<分区>
如何找到整数列表的所有分区?大多数情况下,我需要使用递归的算法,因为我将在 SML 中实现它。我只需要算法,我会自己做编码部分。我错误地编写了用于查找子集的代码,但我没有太多时间用于此
SML 有点类似于 Pascal,所以你会理解我要写的阶乘格式,例如像这样有趣的 fuc x = if x<0 then 0 else if x=1 then 1 else x*(fac x- 1)
提前致谢
<分区>
如何找到整数列表的所有分区?大多数情况下,我需要使用递归的算法,因为我将在 SML 中实现它。我只需要算法,我会自己做编码部分。我错误地编写了用于查找子集的代码,但我没有太多时间用于此
SML 有点类似于 Pascal,所以你会理解我要写的阶乘格式,例如像这样有趣的 fuc x = if x<0 then 0 else if x=1 then 1 else x*(fac x- 1)
提前致谢
最佳答案
The partition problem是一个已知的NP-Hard问题(因此没有已知的多项式解决方案),可以使用用递归很好地编写的穷举搜索来解决。
伪代码(尝试做类似 ML 的伪代码,希望它能帮助和清除):
partition([],A,B): #base clause
if (sum(A) == sum(B)):
print (A,B) # this is a partition
partition(list, A,B):
e <- head(list)
partition(tail(list),e :: A,B)
partition(tail(list),A, e :: B)
(如果我没记错的话,e::A
是在ML中的A
开头添加一个元素,如果记错了欢迎指正)
关于algorithm - 我怎样才能找到给定列表的分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13850536/