寻找红宝石中可出租物品的理想利用率

时间:2010-01-27 20:21:18

标签: ruby algorithm utilization

# 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

这背后的想法是首先填补项目的空白,尽量减少新的差距。

我不需要完整的解决方案,但是建议使用工具(库,宝石,算法)来解决这个问题。例子将非常感激。

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

1 个答案:

答案 0 :(得分:1)

  

我想获得每次租赁物品掉头次数最少的物品......租金一个接一个。

然后,由于我们无法预测未来,我们给你的任何算法都只是统计学,并且很容易找到算法给你低于标准结果的情况。

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

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

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