等待多个分支的队列

时间:2013-07-22 23:54:50

标签: algorithm sorting

我目前正在开展一个项目,我正在寻找一种可以解决这个问题的技术:

有些人在一个房间里等着接受许多测试之一。可以为每个人分配多个测试。每个测试可以在给定时间在一个或多个位置给出,但一次只能有一个人在一个给定的位置进行测试。

将人们随机分配到测试并最终完成测试相对简单,但我可以使用什么样的系统来让人们等待相对平等的时间?如果我只是随机分配它们,那么只需要参加其中一项测试的人就可以放在需要服用5的人身上。

我已经考虑过将测试次数较少的人分配给他们,但我还没有测试过,看起来它仍然是不公平的。为了增加复杂性,我添加了一个允许更改优先级的功能。

要说清楚,这不是家庭作业。这个项目仍处于逻辑开发阶段,所以我还没有真正开始编程来比较不同的技术。我所想到的最接近的事情是创建一个有点像线程池的系统,但是我没有找到任何能够详细描述线程池背后技术的东西,而且似乎需要一点点好处如果我直接使用线程池,开销仍然会遇到问题。我也研究了C#Queue类,但我还没有想过扩展其功能的方法。

任何人都有任何想法或建议吗?

1 个答案:

答案 0 :(得分:1)

C#(以及大多数其他语言)都有concurrent priority queue你可以使用。将测试者放在队列中,并在房间释放时将其中一个(并为其分配一个测试);如果考生还有更多的考试,那就把它放回队列。

平衡执行时间的一种方法是为“测试者”分配一个随机优先级,例如。

testTaker.serPriority(random.Next(CONSTANT * testTaker.numberOfRemainingTests))

然后在完成测试时重置测试者的优先级。这将有利于为需要更多测试的测试者分配测试,而随机元素将接近公平性。 CONSTANT应该大于考生的数量,以确保足够的随机性。