# 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、alogrithm)可以解决这样的问题请举个例子。
[编辑:删除了第二个示例,以关注真正的问题。]
最佳答案
我想用最少的物品交换每次租赁…租金一个接一个地进来。
因为我们无法预测未来,所以我们给你的任何算法都只是统计的,很容易找到算法给你的结果低于标准的情况。
无需担心用户的租赁模式,或者我们提前知道的租赁,我只需将每个项目映射到其相邻的可用日期范围(意味着某些项目将有多个日期范围),然后按每个日期范围的长度排序。当新订单进入时,使用完全填充订单的最小日期范围。记住,当我们实时通过日期范围时,日期范围应该会变小,因为我们不关心一周前该项是否可用。
如果人们可以预订项目,请等到指定项目的日期,然后从最短到最长进行分配。
当然这只是一个答案;你可以应用无限多的启发式方法。