假设:
要求:
有没有类似这种设置的算法?目前,我正在按州,地区和高中排序所有论文。然后我将高中论文组合在一起,并将它们分配给队列中的下一个具有可用空间的读者,并重复直到读者点击max_essay_limit。简单,它会导致一个相对干净的解决方案,但根本不考虑desired_essay_count(意味着队列末尾的读者最终只能阅读几篇文章)。
答案 0 :(得分:4)
我会用优先级队列来解决这个问题。
第一个是散文组的队列,它总是会给你最大的分组。您可以从对应于状态的组开始,在数据结构中可以轻松按地区或学校划分。
第二个是读者队列。根据您与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)
这将使各州,地区和学校齐心协力。它将尝试根据人们想要的工作量均匀分布负载。它应该可以快速运行。