线分割排列的算法

标签 algorithm permutation partitioning division segment

我正在尝试找到一种代码/算法来获取分割线或线段的所有可能排列。假设你有一条 5 英寸的线,你可以将它分成 5 block ,每 block 1 英寸,或者 2 x 2 英寸的段 + 1 段 1 英寸......等等......

是否有一种算法可以找到给定段的所有可能的分割排列?

如有任何帮助,我们将不胜感激。

谢谢

最佳答案

您可以通过递归地选择下一段的长度来做到这一点。

def find_partitions(length_remaining,only_decreasing_lengths=True,A=None):
    longest = length_remaining
    if A is None:
        A = []
    elif only_decreasing_lengths:
        longest = min(longest,A[-1])
    if longest==0:
        print A
    for x in range(1,longest+1):
        find_partitions(length_remaining-x,only_decreasing_lengths,A+[x])

print 'Decreasing'
find_partitions(5)
print 'Any order'
find_partitions(5,False)

不清楚顺序是否重要,因此此代码支持这两种方法。

它打印出:

Decreasing
[1, 1, 1, 1, 1]
[2, 1, 1, 1]
[2, 2, 1]
[3, 1, 1]
[3, 2]
[4, 1]
[5]
Any order
[1, 1, 1, 1, 1]
[1, 1, 1, 2]
[1, 1, 2, 1]
[1, 1, 3]
[1, 2, 1, 1]
[1, 2, 2]
[1, 3, 1]
[1, 4]
[2, 1, 1, 1]
[2, 1, 2]
[2, 2, 1]
[2, 3]
[3, 1, 1]
[3, 2]
[4, 1]
[5]

关于线分割排列的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43394451/

相关文章:

python - 如何检查列表中的邻接关系,然后修复 python 中的邻接关系

python - 在不必要时获得排列而不重复

mysql - mysql按年分区按月分区

arrays - 使用 Ruby 生成多重集的分区

java - 如何防止遗传算法收敛于局部最小值?

r - 在 2 个向量中查找常见的 "subchains"

objective-c - 方法、算法和 NSValue 问题中的递归性

Mysql Subpartioning--按天分区然后取一个值

C++ STL 下一个排列与组合

java从数据库获取持续时间