0

我目前正在做一个项目,我正在寻找一种可以解决这种情况的技术:

有人在房间里等着参加许多测试中的一项。可以为每个人分配多个测试。每个测试可以在给定时间在一个或多个位置进行,但一次只能一个人在给定位置参加测试。

随机分配人员进行测试并最终完成测试相对简单,但我可以使用什么样的系统来让人们等待的时间相对相等?如果我只是随机分配他们,一个只需要参加一项测试的人可能会落后于必须参加 5 项测试的人。

我曾考虑让测试次数较少的人先进行测试,但我还没有测试过,而且似乎仍然不公平。为了增加复杂性,我添加了一个允许更改优先级的功能。

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

有人有什么想法或建议吗?

4

1 回答 1

1

C#(和大多数其他语言)有一个您可以使用的并发优先级队列。将应试者置于队列中,并在房间空闲时移除其中一个(并为其分配一个测试);如果应试者还有更多要参加的考试,则将其放回队列中。

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

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

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

于 2013-07-23T00:05:24.750 回答