【发布时间】:2010-07-30 10:20:23
【问题描述】:
我遇到这个问题有一段时间了,仍在努力寻找解决方案。
在列表中均匀分布项目且差异较小的最佳方法是什么?
假设我们有一个列表或数组中的元素:
Red, Red, Red, Red, Red, Blue, Blue, Blue, Green, Green, Green, Yellow
理想情况下,输出会产生如下内容:
Red, Blue, Red, Green, Red, Yellow, Blue, Red, Green, Red, Blue, Green.
每个实例都尽可能“远离”自身的另一个实例...
当我第一次尝试解决这个问题时,我必须承认我很天真,所以我只是使用某种形式的种子随机数来打乱列表,但这会导致实例聚集。
建议从频率最高的项目开始,因此红色将放置在位置 n*12/5 处,n 从 0 到 4(含)。
然后将下一个重复次数最多的元素(蓝色)放置在位置 n*12/3 + 1 中,n 从 0 到 2(含)。如果那里已经放了东西,那就把它放在下一个空的地方。等等等等。但是,当在纸上记下它时,这并不适用于所有情况,
说列表只是
Red, Red, Red, Red, Red, Blue
它会失败。
其中任一选项具有三个相同颜色的邻接
Red, Red, Blue, Red, Red, Red
Red, Red, Red, Blue, Red, Red
所以请,任何想法或实现如何做到这一点都会很棒。
如果这很重要,我正在研究objective-c,但现在我只关心如何去做。
【问题讨论】:
-
不知道我理解的对不对。在第一个示例中,输入列表有 12 个元素,输出列表有 14 个。这样正确吗?
-
对不起,我的错。我会改正的。