Data structures 我们可以使用什么数据结构来有效地检查资源可用性?

Data structures 我们可以使用什么数据结构来有效地检查资源可用性?,data-structures,language-agnostic,Data Structures,Language Agnostic,这个问题是reddit用户的问题 我想建立一个酒店房间预订系统,在这个系统中,每个酒店房间都可以在任意的时间范围内预订。对预订数据集的一个常见查询是试图找出在给定时间范围内哪些房间可用。是否存在允许高效执行此类查询的预订数据集的数据结构 例如,假设我们有五个房间,占用时间如下: room 1: 9:00 -- 12:00, 15:00 -- 18:00, 19:30 -- 20:00 room 2: 8:00 -- 9:30, 15:30 -- 17:30, 18:00 -- 20:00

这个问题是reddit用户的问题

我想建立一个酒店房间预订系统,在这个系统中,每个酒店房间都可以在任意的时间范围内预订。对预订数据集的一个常见查询是试图找出在给定时间范围内哪些房间可用。是否存在允许高效执行此类查询的预订数据集的数据结构

例如,假设我们有五个房间,占用时间如下:

room 1:  9:00 -- 12:00, 15:00 -- 18:00, 19:30 -- 20:00
room 2:  8:00 --  9:30, 15:30 -- 17:30, 18:00 -- 20:00
room 3:  6:30 --  7:00,  7:30 --  8:15
room 4: 12:00 -- 20:00,
room 5:  7:00 -- 14:15, 18:00 -- 21:55
我希望占用时间的数据结构具有合理的空间效率,并允许以合理的性能执行以下查询:

  • 某个房间被占用的时间是多少
  • 在给定的时间范围内,哪些房间是免费的

2D阵列系统在不占用大量资源的情况下仍然有用。房间号可以等同于索引-例如,索引i是房间号:

String [] = {"taken","not","taken","not","taken"}
索引是元素的位置

第二个元素“not”是1的索引,因为第一个元素(项)是零的索引。要获得房间号,请将索引加上1,就像一家酒店只有一个房间一样,它将是“房间1”而不是“房间0”。因此,索引+1保存数字

如果你分配了相同大小的时间(XXXX.YYYY,XXXX是打开的时间,YYYY是关闭的),那么你可以使用一个子串来减去一半的元素来获得时间的前四个/最后四个字符,通过在XXXX的中间放一个冒号(如xx:xx)打印出来。p> 它可以存储在一个简单的1D数组中,如下所示:

String [] rooms = {"0900.1200", "1500.1800", "1930.2000")
。。。。。。编辑,刚刚意识到这些时间是一个房间x(

因此,要为一个房间分配多次,您可能需要使用格式系统,如:

// * = the next four digits are the opening time
// - = the next four digits are the closing time
所以你可以在一个元素中保存多次,比如:`{“*0800-0930*1530-1730*1800*2000”…}

它非常复杂,但这只使用一个数组,计算机可以使用while循环检查关闭时间后是否有更多的时间->如果没有,移动到下一个元素/时间集,以及房间号/索引


一旦你在所有元素中循环,房间检查就完成了。

想象一下,如果你想在15分钟的间隔内检查房间,那么你将有24×4=92个不同的间隔,第一个间隔从0:00到0:15。将其放入二进制文件,并添加一些信息,以检查你是否选择了正确的房间,你可以使用100位。现在你创建了函数to创建位字符串并解密字符串,然后将字符串存储在数组中。完成。

对于许多实际情况来说,这是一个很好的解决方案。但是,它存在的问题是,它需要对占用时间进行量化,这可能并不容易。此外,需要相当大的空间。您是否知道是否有更好的解决方案?@fuz链表/动态集合可能是一个想法-它只使用它所需的相同数量的ram,不同于具有永久大小的阵列,它会根据数据量进行相应调整。这是最有效的数据结构。通过您的编辑,我不确定此数据结构是否有用。您能否说明如何检查哪些房间可用给定时间范围的标签?请注意,该时间范围内可能只有少量房间可用,因此不需要遍历所有房间的解决方案可能会很有用。此外,一个房间被占用的时间列表可能会变得相当大,每次检查完整个占用列表听起来有点慢。请参阅我更新的qu我想了解一下我需要什么样的酒店。想象一下,我对阵列中的每个房间都有10年的预订时间。你认为从今天上午8:00到12:00,要确定是否有房间是空闲的需要多长时间?我必须阅读几乎整个数据库才能找到。你不需要一个简单的数据结构,你需要一个规范化的数据库d关系数据库。太宽了。@EJP我不确定关系数据库如何解决这个问题。你能写一个答案,解释我可以在什么关系上运行什么查询来解决这个问题吗?这个问题的答案在很大程度上取决于房间的数量、时间框架的粒度以及f插槽可用。如果我们谈论的是一天几十个房间,粒度为15分钟,那么简单的方法就足够了。如果你谈论的是一家酒店的数千个房间,你可以提前几年预订几天,那就完全不同了。@JimMischel我说的是后一种情况。我对我感兴趣n一个理论上的解决方案,而不是一个“在实践中足够好”的解决方案。那么关系数据库就是解决方案。它不仅仅是一个简单的“代码在这里”。这是一个相当复杂的系统。请注意,这只是一个例子。在现实世界的应用程序中,需要节省很长的时间(10年左右),粒度更细,房间更多。