哪种算法将一组具有不同数量的作业按统一顺序排列?
示例
给定许多不同的任务类型,需要在一个月的时间内完成:
Type | Number per month
--------------------------
A | 1
B | 5
C | 30
D | 15
E | 20
--------------------------
71
>问题:
如何生成类型的统一订单(一维数组),以确保
- 在一个月内完成 71 项工作,并且
- 类型尽可能均匀地分布(ABAB 而不是 AABB)
编辑:
评论中提出的一个想法是:
也许可以将每个类型堆栈减少与其大小相关的数量 比使用绝对量 1 更好。例如A:2, B:10 结果 在“对于每个 A 取 5 B”中,因为 B 比 A 大五倍。
Example
Given a number of different task types that need to be completed over a period of one month:
Type | Number per month
--------------------------
A | 1
B | 5
C | 30
D | 15
E | 20
--------------------------
71
Question:
How do I generate a flat order (1-dimensional array) of types that ensures that
- 71 jobs are completed within one month
- the types are spreaded as equally as possible (ABAB instead of AABB)
Edit:
One Idea that came up in the comments is:
Maybe reducing each stack of types by an amount relative to its size
is better than to use the absolute amount of 1. eg. A:2, B:10 results
in "for each A take 5 B" because B is five times larger than A.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
假设您有一个任务类型数组,例如:
您可以先排序,然后使用较大的数字作为参考点来构建任务数组。
示例:
产生:
Assume you have an array of task types such as:
You can first sort, and then use the greater number as reference point to build the array of tasks.
Example:
produces:
表示法:您有一个集合 X={x1,...xk},其中 xi 需要出现在输出 ci 次中。
像这样的事情应该这样做:
令 C 为 c1+c2..+ck (在您的示例中为 71)。
计算每个项目的步幅:si = C/ci。
计算每个项目的暂定位置并创建一个 (location,item) 列表:
locs_i = (si,i), (2*si,i), ... (c_i*si,i)
按字典顺序合并 locs_i 列表。
Notation: You have a set X={x1,...xk} where xi needs to appear in the output ci times.
Something like this should do it:
Let C be c1+c2..+ck (71 in your example).
Compute the stride of each item: si = C/ci.
Compute tentative locations for each item and make a (locations,item) list:
locs_i = (si,i), (2*si,i), ... (c_i*si,i)
Merge the locs_i lists lexicographically.