首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于计算给定已用时间的空闲时间的数据结构

用于计算给定已用时间的空闲时间的数据结构
EN

Stack Overflow用户
提问于 2020-01-17 21:30:23
回答 2查看 50关注 0票数 0

前言:我有一个有一百个停车位的停车场。我根据指定的空格将预订存储为自由格式的开始和结束时间。我们目前允许人们查询特定时间的停车场,并可以很容易地告诉他们是否有空余空间。但我现在有一个要求,广告有多少空闲空间有1个小时的时间从7-7,跨度为5天。使用现有的查询将意味着我需要执行60个查询,这对于交互操作来说太慢了,而且对于非交互操作似乎也太笨拙了。

因此,我正在寻找一种方法来映射预订之间的时间,然后强制将其转换为可单独存储的空位。这个过程本身可能有点困难,但它也可能使查询特定可用性的数据库变得更快一些。

我想要做的是定义一个日期,然后“减去”当天的预订量,得到一个围绕这些预订量的可用时间范围的列表,然后我可以强制进入长达一小时的时段。

我自己已经完成了一半,从给定的时间开始,一直到第一次预订,跳到最后,重复到最后,但这是相当乏味的事情,我很难相信这是以前没有做过的事情。我使用的是Python,但我很乐意移植。就像..。

代码语言:javascript
复制
today = Day(start=datetime.time(7), end=datetime.time(19))
print(today.ranges)
# [(datetime.time(7), datetime.time(19))]

day.subtract(datetime.time(12), datetime.time(13))
print(today.ranges)  
# [(datetime.time(7), datetime.time(12)), (datetime.time(13), datetime.time(19))]

我意识到我可能已经进入了一个特定的层次,它可能只会让我受益,但这个范围和分割时间的想法正是我需要帮助的地方。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2020-01-17 22:26:46

你可以创建所有的小时时段并删除使用过的时段吗?

代码语言:javascript
复制
def create_hour_slots(start, end):
    return list(zip(range(start, end), range(start+1, end+1)))

today = create_hour_slots(7, 19)
today
[(7, 8), (8, 9), (9, 10), (10, 11), (11, 12), (12, 13), (13, 14), (14, 15), (15, 16), (16, 17), (17, 18), (18, 19)]

def remove_range(start_subtract, end_subtract, day_range):
    slots_to_remove = create_hour_slots(start_subtract, end_subtract)
    availability = [r in day_range for r in slots_to_remove]
    if not all(availability):
        unavailable = [r for r in slots_to_remove if r not in day_range]
        print("Unavailable slots: {}".format(unavailable))
        return False
    remaining_range = [s for s in day_range if s not in slots_to_remove]
    return remaining_range

remove_noon_slot = remove_range(12, 13, today)
remove_noon_slot
[(7, 8), (8, 9), (9, 10), (10, 11), (11, 12), (13, 14), (14, 15), (15, 16), (16, 17), (17, 18), (18, 19)]
remove_unavailable_slot = remove_range(6, 8, today)
Unavailable slots: [(6, 7)]
票数 0
EN

Stack Overflow用户

发布于 2020-01-18 05:53:02

如果你只想知道“有多少空闲空间,从7小时到7小时,持续5天”,那么我的建议是:

  • 1小时时隙空间数为12*5*100=6000。每次进行新的预订时,将一些计数器设置为6000
  • (假设1小时

预留,仅在整个小时开始)每满小时递减计数器

  • 运行查询以检查有多少预留已结束,并递增计数器

每次您都可以执行一个查询来检查您有多少空闲空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59788394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档