1
# Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
rentable_items = [ 
  %w(x x x - - - x x x - - -), # item1
  %w(- - - - - - - - - - - -), # item2
  %w(x x x x x x x - - - - -), # item3
  %w(x x x - - - - x x x x x) ]# item4

好的,鉴于数据结构(代表项目月份的租金槽),其中“x”代表不可出租,“-”代表可出租,我有以下问题。

当我收到从 4 月到 6 月期间的请求时,我希望按以下优先顺序获得结果:

items = rentable_items.ideal_utilization_for("2010/03/01", "2010/06/30")
items # [item1, item2, item4] #where item4 is the worst

这背后的想法是首先填补一个项目的空白,并尝试产生尽可能少的新空白。

我不需要完整的解决方案,而是建议哪些工具(库、gem、算法)可用于解决此类问题。示例将不胜感激。

[编辑:删除第二个例子,专注于真正的问题。]

4

1 回答 1

1

我想以最少的项目交换次数获得每次租赁的项目......租金是一个接一个的。

那么由于我们无法预测未来,所以我们给你的任何算法都只是统计的,很容易找到算法给你低于标准的结果的情况。

无需担心用户的租赁模式或我们提前知道的租赁,我只需将每个项目映射到其连续的可用日期范围(这意味着某些项目将有多个日期范围),然后按每个范围的长度。当有新订单进来时,使用完全填写订单的最小日期范围。请记住,当我们实时通过它时,日期范围应该变小,因为我们不关心该项目是否在一周前可用。

如果人们能够预订物品,请等到当天分配物品给他们,然后从最短到最长进行分配。

这当然只是一个答案;实际上,您可以应用无限多的启发式方法。

于 2010-01-27T21:33:52.403 回答