【发布时间】:2012-05-02 16:44:58
【问题描述】:
这是how to represent priorities的一个后续问题
答案引导我将设计基于Priority Queue ADT。
我的问题是我无法弄清楚如何建模这个问题(我了解PQ 的工作原理)。
所以使用我原来的(简单的例子)假设我有PersonAPersonB ...PersonY(表示为类)喜欢各种菜肴PizzasSpaggetiSteak等。
我想找到一种方法来指定应该根据Preference 向人们提供哪道菜(这可能是一个额外的课程,因为在开始问题线程的答案中也建议了朋友)。
我不确定这应该如何建模。我的第一个想法是为每道菜创建一个PriorityQueue(PizzaPQ、SpaggetiPQ 等),将每个队列 all 放入 Persons 并开始从每个队列中移除顶部(作为对这道菜有最大偏好的人)并将Person 从其他队列中删除。此过程按顺序遍历所有队列。
现在虽然在概念上它似乎是正确的(但这不是最好的方法,因为我认为由于过程本身会出现差异),我不认为我走在正确的轨道上,因为
- 从其他队列中移除是线性操作(我说的是
remove(Object),其中Object已经被服务Pizza并且不应再出现在其他队列中)并且会花费O(N*k)其中k是队列的数量(这在我看来 在第一个中添加了很多优先级队列的使用 地点) - 在我看来,我需要一些抽象来处理 “池” 优先队列,我不确定是否真的有这样的数据 结构,我不知道。
我想这个问题可以概括为如何分配作业或如何操作多个队列(也许?)
必须有针对此类问题的标准设计方法。
非常欢迎任何意见
@Thomas 回答后更新:
问题稍微复杂一点。
除了偏好之外,还可能存在其他(一个人的)属性。
例如。 PersonA 和 PersonB 都更喜欢牛排而不是其他任何菜肴。但是PersonA 有高胆固醇,PersonB 是一名运动员。以某种方式考虑到这些属性,那么PersonB 应该得到牛排。也许PersonA 最终可能会得到其他结果。
这就是我最初想到PQs的菜的原因
【问题讨论】:
-
当您提到:“在每个队列中加入所有人员”时,您的意思是每个人都会在每个队列中吗?如果是这样,为什么,它的用例是什么?为什么不只将人们添加到他们感兴趣的菜品队列中?
-
@Brady:好点子。我要提到更糟糕的情况,即所有人都对所有菜肴感兴趣,但对每种菜肴的偏好不同
标签: java algorithm oop design-patterns data-structures