【发布时间】:2014-09-12 07:14:45
【问题描述】:
我正在尝试编写一个执行以下操作的函数:
> partitions([a,b,c,d])
< [
[[a,b],[c,d]],
[[a,c],[b,d]],
[[a,d],[b,c]]
]
即它找到所有大小为 2 的分区。
目前我正在尝试以递归方式执行此操作:在每次调用时生成一个对列表,并且对于生成的每一对,在列表中再次调用该方法并删除该对。这有效,但会产生重复项。删除重复项需要比较生成的分区中的每个元素,这非常慢。
我想知道是否有更聪明的方法来做到这一点。
【问题讨论】:
-
我认为可以做到这一点的另一种方法是生成所有在循环移位之前唯一的排列,然后按索引对结果进行分组。是否有一种有效的方法来生成所有不循环相关的排列(无需通过蛮力删除循环排列)?
标签: javascript algorithm recursion set partition