将N个列表中的项目组合成一个平衡分布的好算法?

Joh*_*han 8 algorithm list

假设我有以下三个列表

A1
A2
A3

B1
B2

C1
C2
C3
C4
C5

我想将它们组合成一个列表,每个列表中的项目尽可能均匀分布,如下所示:

C1
A1
C2
B1
C3
A2
C4
B2
A3
C5

我正在使用.NET 3.5/C#,但我正在寻找更多如何处理它然后特定的代码.

编辑:我需要保持原始列表中元素的顺序.

And*_*ngs 17

  1. 获取最多成员的列表副本.这将是目的地列表.

  2. 然后选择下一个最大数字的列表.

  3. 将目标列表长度除以较小的长度,以得到大于1的小数值.

  4. 对于第二个列表中的每个项目,维护一个浮点计数器.添加上一步中计算的值,并在数学上将其四舍五入为最接近的整数(保持原始浮点计数器完好无损).将其插入目的地列表中的此位置,并将计数器增加1以说明它.对第二个列表中的所有列表成员重复此操作.

  5. 对所有列表重复步骤2-5.

编辑:这也有O(n)的优点,这总是很好:)

  • @AndrewRollings你可以详细解释一下,或者`pseudocode`对我来说绰绰有余吗?我无法清楚地理解你的答案. (2认同)