给每个人分配一组文章来阅读,同时优先考虑某些分组

Assign each person a set of essays to read, while prioritizing certain groupings

假设:

  1. 要阅读的 10,000 篇学生论文,每篇都与一所高中相关
  2. 80 readers,有一个 desired_essay_count 和一个 maximum_essay_limit。
  3. 国家分为 300 个地区,每个地区属于一个州(例如加利福尼亚 1、加利福尼亚 2 等)

要求:

是否有类似此设置的算法?目前,我正在按州、地区和高中对所有论文进行分类。然后,我将高中论文组合在一起,并将它们分配给队列中可用 space 的下一个 reader,并重复直到 reader 命中 max_essay_limit。很简单,它导致了一个相对干净的解决方案,但根本没有考虑 desired_essay_count(意味着队列末尾的 reader 最终只有几篇文章可供阅读)。

我会用优先队列解决这个问题。

第一个是论文组队列,它总是会为您提供最大的分组。您从与州相对应的组开始,数据结构可以很容易地按地区或学校细分。

第二个是读者队列。根据您与 desired_essay_count 的距离来确定这篇文章的优先级,以便您尝试先将文章分配给负载较轻的读者。

现在是算法。

while you have groups:
    group = next group in groups
    scanned_readers = empty array
    while you have readers:
       reader = next reader in readers
       if you can comfortably assign group to reader:
           assign group
           put reader back in readers with new priority
           replace scanned_readers into reader
           GO TO NEXT ITERATION of groups loop.
       else:
           put reader into scanned_readers
           put all readers for reader in priority_queue
    if the group can be split:
        split the group into pieces, put them into groups array
    else:
        find a reader who can do it, no matter how much they don't want to.
        (or else give up)

这将做出真诚的努力,使各州、地区和学校团结在一起。它会根据人们想要的工作量来平均分配负载。它应该 运行 可以接受地很快。