algorithm - 我怎样才能找到给定列表的分区?

标签 algorithm recursion sml ml partition-problem

<分区>

如何找到整数列表的所有分区?大多数情况下,我需要使用递归的算法,因为我将在 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/

相关文章:

python - 最大递归并不完全是 sys.getrecursionlimit() 所声称的。怎么会?

java - 在android中的给定字符串数组中搜索子字符串

algorithm - 将旧密码迁移到 CakePHP 3

algorithm - 推理引擎与决策树

python - 在递归函数中保持计数? [Jython]

c# - 递归在 C# 中的工作原理

functional-programming - 如何在 Mac 终端中移动 SML/NJ 的 REPL 中的光标?

functional-programming - 通过查看第二个列表中的 bool 值来过滤一个列表的元素

data-structures - 在标准 ML O(n) 时间内追加到列表中吗?

arrays - 一维数组到二维数组的映射