algorithm - 种群分割算法

标签 algorithm combinatorics

我有 50 个有序整数 (1,2,3,..,50),我正在寻找一种通用方法将其切片“n”种方式(“n”是截止点的数量,范围从 1到 25) 维护元素的顺序。

例如,对于 n=1(一个分界点),有 49 种可能的分组选择([1,2-49]、[1-2,3-50]、[1-3,4-50]、 ...)。对于 n=2(两个截止点),分组备选方案如下:[1,2,3-50]、[1,2-3,4-50]、...

您能推荐任何通用算法来高效地完成这项任务吗?

谢谢, 克里斯


感谢大家的反馈。我查看了您的所有评论,并且正在研究一个通用解决方案,该解决方案将返回所有数字的所有组合(例如 [1,2,3-50]、[1,2-3,4-50]...)的截止点。

再次感谢, 克里斯

最佳答案

设序列长度为N,切片数为n

当您注意到选择一个切片到 n 个切片等同于从 N - 1 个可能的分割点(一个分割点在序列中每两个数字之间)。因此有 (N - 1 choose n - 1)这样的切片。

要生成所有切片(到 n 个切片),您必须生成从 1 到 N - 1 的所有 n - 1 个数字元素子集。

这个问题的确切算法放在这里:How to iteratively generate k elements subsets from a set of size n in java?

关于algorithm - 种群分割算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6962252/

相关文章:

algorithm - 如何制定elo表

sql - 多层次组合背包

algorithm - 不重复 N 个元素的组合,不使用 for..to..do

java - 最长方形子串算法

c# - C# 中的置换算法

algorithm - 测试线段是否与球体相交

java - 如何在 Java 中组合两个列表

python - Python 中的选择排序不产生任何输出

algorithm - 具有数学公式的 MATLAB 中的相邻元素

algorithm - 将数字表示为四个正整数之和 1<a<=b<=c<=d