挑战:是否有一个纯函数式算法来计算约束排列集

时间:2016-12-11 12:46:49

标签: algorithm functional-programming permutation

给出一个列表,例如'A'..'Z',我想要由N个元素(例如5)组成的所有排列的集合,使得在多于一个结果中不出现2个元素的组合。因此,一旦排列包含'A'和'B',就不允许未来的排列以任何顺序或位置包含这两个元素。

我喜欢它们的随机顺序,所以每次算法运行时,它都会生成一个不同的集合。

如果我要强制执行此操作,我会保留已经看过的对的哈希表。我会接受剩余项目的列表,将它们随机播放,然后迭代它们,逐个取出一个项目,检查是否将该项目添加到当前集合中会违反约束条件,如果我找到了一个没有,递归,直到选择了必要数量的项目。

我最常见的用于阵列改组的算法显然是必要的,但确实存在纯粹的功能解决方案。但是约束检查怎么样?使用存储目前为止看到的每一对的散列表构成了副作用,实际上算法的整个要点是具有限制排列集的副作用,以仅包括那些不违反约束的排列。

我错过了什么吗?在没有维护哈希表的情况下,是否有一种纯函数式方法来完成最后一部分?

0 个答案:

没有答案