【发布时间】:2018-09-19 03:56:26
【问题描述】:
有一家洗车店一次只能为 1 位顾客提供服务。洗车的目标是通过让他们在队列中等待最少的时间来获得尽可能多的满意客户。如果客户可以在 15 分钟内得到服务,他们会很高兴,在 1 小时内他们会很高兴,在 1 到 3 小时之间保持中立,在 3 到 8 小时之间会生气。 (目标是尽量减少愤怒的人,最大限度地增加快乐的人)。对这个问题的唯一警告是,每辆车需要不同的时间来清洗和维修,因此我们不能总是按照先到先得的原则提供服务,因为我们必须最大限度地提高客户效用。所以它可能看起来像这样:
客户热线:
客户1) 任务:6 分钟(第一次到达)
Customer2) 任务:3 分钟(第二次到达)
客户3) 任务:9 分钟(第 3 次)
Customer4) 任务:4 分钟(第 4 次)
服务热线:
服务客户 2,服务客户 1,服务客户 4,服务客户 3。
这样一来,没有人排队超过 15 分钟才上菜。我知道我应该使用某种形式的优先级队列来实现这一点,但老实说我知道我应该如何为不同的客户提供优先级。我不能优先考虑所需工作量最少的客户,因为例如他们可能是最后一个到达的客户(其他人会很生气),而且我不能只根据时间进行比较,因为第一个人的任务可能需要一整天。那么我如何将这些客户相互比较,以最大限度地提高幸福感?
干杯
【问题讨论】:
-
让工作时间短的人插队肯定会让大多数人开心。问题在于,根据整体队列负载,有些人可能永远不会得到服务。但是,要使这个问题成为一个正确的问题,您需要提供代码并说明它的实际问题。
-
目标可以用数学方式表达吗?例如。两个快乐的客户和一个愤怒的客户比三个中立的客户更好吗?
标签: algorithm data-structures scheduling priority-queue compareto