我们可以使用哪种数据结构来有效地检查资源可用性?

时间:2017-01-20 21:40:53

标签: data-structures language-agnostic

此问题是reddit用户asked on behalf/u/Dasharg95

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

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

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

我希望占用时间的数据结构具有合理的空间效率,并允许以合理的性能执行以下查询:

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

2 个答案:

答案 0 :(得分:0)

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

String [] = {"taken","not","taken","not","taken"}

索引是元素的位置

第二个元素" not",索引为1,因为第一个元素(item)是零索引。要获取房间号,请将索引添加为1,就像酒店只有一个房间一样,它将是"房间1和#34;不是"房间0"。因此索引+ 1保持数字。

如果你指定相同大小的时间(xxxx.yyyy,xxxx是开放时间,yyyy是关闭),那么你可以通过使用子字符串来获得前四个/后四个字符的一半元素当时,通过在xxxx中间放置一个冒号来打印出来,就像xx:xx一样。

它可以存储在一个简单的一维数组中,如下所示:

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循环检查关闭时间后是否有更多次 - >如果没有,则移动到下一个元素/一组时间,以及房间号/索引。

循环完所有元素后,房间检查即告结束。

答案 1 :(得分:0)

想象一下,如果你喜欢在15分钟的间隔内拥有它,那么你将拥有24×4 = 92个不同的intervalls,第一个从0:00到0:15。把它放在二进制文件中,加上一些附加信息来检查你是否选择了合适的房间,你可以使用100位。现在,您创建函数来创建bitstring并解密字符串并将字符串存储在数组中。完成。

相关问题