【问题标题】:Some sort of number allocation algorithm某种号码分配算法
【发布时间】:2016-04-02 01:08:48
【问题描述】:

我正在创建一个允许预订特定数量的房间/座位的预订系统。假设用户可以预订编号为 1-100 的座位/房间。我的讲师建议我使用一种算法来经济地划分预订数量,以便将未售出的座位保持在最低限度。例如,如果有 10 个座位可用:

用户 1 预订 4 个席位。给定(没有 1-4)。 用户 2 预订 1 个座位。给定(第 5 个)。 用户 3 预订 4 个座位。给定(没有 6-9)。 用户 2 然后取消。释放(第 5 条)。 用户 4 想要预订 2 个座位,但唯一可用的座位是 5 和 10(不在一起,所以他们不预订)。

我的讲师说这个问题存在一个通用算法,但记不住名字。我想这就像用于磁盘上数据的算法。

有什么想法吗? 非常感谢。

【问题讨论】:

  • 相同的算法用于在 C 中实现 malloc()free()。它们经常使用“freelists”——空闲的(内存)范围的链表。当有新请求进来时,会在 freelist 中搜索一个足够大的块来满足请求;如何选择块有不同的权衡(例如,选择第一个适合的,选择适合的最小的,选择最大的)并且没有一个策略是处处最优的。

标签: algorithm


【解决方案1】:

没有保证最优性的算法。

以你为例。为确保您获得最佳设置,您需要知道谁将取消以确保他们在可用空间旁边,这样可用空间是连续的(并且您可以预订更多)。空闲空间旁边只能有 2 个预订。除非您可以展望未来并说出 3 个预订中的哪一个不会被取消,否则您将有可能犯错误并且无法获得最佳分配。

您可以尝试类似于分配技术 (malloc) 的方法,尝试将新预订放入最小的可用空间。如果您有更多关于预订的信息(很有可能会被取消),您可以尝试做出更明智的选择(例如重复预订,就像他们在航空公司上所做的那样)。 如果您能够重新分配预订(这就是 java 垃圾收集器在主要压缩时所做的),那么您仍然可以从系统中挤出更多信息。

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    相关资源
    最近更新 更多