我正在创建一个预订系统,允许预订特定数量的房间/座位。假设用户可以预订编号为1-100的座位/房间。我的讲师建议我使用一种经济地划分预订号码的算法,以便将未售出的座位保持在最低限度。例如,如果有10个席位可供选择:
用户1预订4个席位。鉴于(没有1-4)。 用户2预订1个席位。给定(没有5)。 用户3预订4个席位。鉴于(没有6-9)。 用户2然后取消。释放(没有5)。 然后用户4想要预订2个座位但是唯一可用的座位是5个和5个座位。 10(不在一起,所以他们不预订)。
我的讲师说这个问题存在一个常见的算法,但不记得这个名字。我想它就像用于磁盘上数据的算法一样。
有什么想法吗? 非常感谢。
答案 0 :(得分:1)
没有算法可以保证最优性。
举个例子。为了确保您获得最佳设置,您需要知道谁将取消以确保它们位于可用空间旁边,以便可用空间是连续的(并且您可以预订更多)。免费空间旁边仅有2次预订。除非您可以展望未来,并说明3个预订中的哪一个不会被取消,否则您将有机会犯错误而没有最佳分配。
您可以尝试类似于分配技术(malloc)的尝试,以便将新预订纳入最小的可用空间。如果您有关于预订的更多信息(概率将被取消),您可以尝试做出更明智的选择(如双重预订,就像他们在航空公司那样做)。 如果你能够重新分配预订(这就是java垃圾收集器在主要压缩中的作用),你仍然可以从系统中挤出更多的东西。