algorithm - 具有多个分支的等待队列

标签 algorithm sorting

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

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

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

我考虑过让测试次数较少的人先参加,但我还没有测试过,看来这仍然不公平。为了增加复杂性,我添加了一个允许更改优先级的功能。

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

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

最佳答案

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

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

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

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

关于algorithm - 具有多个分支的等待队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17799353/

相关文章:

algorithm - 动态规划 : Algorithm to solve the following?

c++ - 如何以编程方式将照片转换为类似宝丽来的照片?

c - 在3D网格上以最小的点成本有效地找到等成本点

java - 如何从给定索引开始对多维数组进行排序

HTML/CSS 列表列排序

string - 这已经是一个字符串相似度算法了吗?

java - Algo 获取 Integer.MAX_VALUE 的超时

python - 如何在 Python 中获得相同的输出示例?

performance - Raku 慢速混合排序

android - 在 android 中按字母顺序使用文件夹和文件类型对 ListView 进行排序