此问题是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
我希望占用时间的数据结构具有合理的空间效率,并允许以合理的性能执行以下查询:
答案 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并解密字符串并将字符串存储在数组中。完成。