algorithm - 将值拆分为分布相似、大小均匀的组

标签 algorithm grouping

给定一个标量值列表,我们如何将列表分成 K 个大小均匀的组,以使这些组具有相似的分布?请注意,简单性比效率更受欢迎。

我目前正在做:

sort values
create K empty groups: group_1, ... group_k
while values is not empty:
    for group in groups:
        group.add(values.pop())
        if values is empty:
            break

最佳答案

这是 @m.raynal 提出的变体,即使 n 只是 k 的相当小的倍数,它也能很好地工作。

  1. 将元素从小到大排序。
  2. 创建 k 个空组。
  3. 将它们放入 Priority Queue从最少元素到最多元素排序,然后从最大总和到最小元素排序。 (因此下一个元素始终是所有元素最少的元素中总和最大的那个。)
  4. 对于每个元素,从优先级队列中取出一组,添加该元素,将该组放回优先级队列中。

在实践中,这意味着前 k 元素随机分组,接下来的 k 元素以相反的顺序排列。然后它在保持事物平衡方面变得聪明。

根据您的应用程序,底部两个值按预期间隔很远的事实可能是个问题。如果是这种情况,那么您可以通过“中间出”来使事情复杂化。但该方案要复杂得多。

关于algorithm - 将值拆分为分布相似、大小均匀的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49414511/

相关文章:

Python:按日期分组并查找数据框中列的平均值

c# - 实现非日期驱动的重复

java - 用JAVA ArrayList实现DFA最小化算法

c++ - 在排序数组中搜索,比较少

r - 根据 R 中的空间邻域和时间标准将行分配给组

r - 在 R 中定义变量的全局集合

c# - 有没有办法在 ListView 中嵌套分组?或者我必须使用 TreeView 吗?

algorithm - 在排列中查找已排序的子序列

具有阈值的 Python 集成梯形函数

php - 将 SQL 查询逐行输出为 JSON