【发布时间】:2013-03-01 10:25:41
【问题描述】:
我正在为学校做一个项目,并试图决定我应该如何去做。
这是一个餐厅模拟。我生成一张桌子和等候方的随机列表。我随机安排了一些派对,有些派对没有在等候名单上。我希望有保留的各方拥有第一优先权。
是否对列表进行排序,以便所有有预订的各方都在一端,而没有另一端的一方是解决这个问题的好方法?
然后我可以只评估列表,看看派对是否适合在桌子上,然后让他们入座或继续下一个派对。还是有更聪明的方法来解决这个问题?任何意见表示赞赏!
【问题讨论】:
-
循环一次并处理预订,然后再次处理其他所有人。您需要的更像是过滤聚会的集合,而不是排序——尽管排序当然可以划分列表并使过滤变得非常容易,但这只是达到目的的一种手段,可能并不值得。
-
为了让餐厅更有效率,您会希望它的预订量永远不会超过座位数。预订应该意味着该人始终在餐桌旁获得座位,无论他们的顺序如何。如果预订数量 = 座位数量,那么您不关心其他列表。但是,如果预订数量
-
按保留对它们进行排序似乎是合理的。我会按照你的想法运行,看看它会把你带到哪里。
-
@dash 您可能需要更多的聪明才智,而不仅仅是到达顺序。如果队列前面有一个 4 人的聚会,但您有一张 2 人的空桌,您需要进一步查看。
-
@JRoughan 同意,但永远不需要对有保留的人员列表进行排序;只需要把人分成两组,有保留和没有保留。然后,您需要做的唯一排序是在没有预订的情况下对组进行排序,并且在这种情况下,您希望
take与您拥有的空座位(桌子)数量相匹配的第一方,按到达顺序排序.在这种情况下,列表可能不是最好的构造;由 Party 对象组成的队列可能会更好,因为您可以立即删除 Reservation = true 的 Party。