我正在寻找一个算法来生成一个集合的排列,这样我就可以在 Clojure 制作一个懒列表。也就是说,我想迭代一个排列列表,其中每个排列在我请求之前不会被计算,并且所有的排列不必一次性存储在内存中。
或者我寻找一个算法,在给定一个特定的集合时,它将返回该集合的“下一个”排列,以这样的方式,重复调用函数对其自身输出将循环通过原始集合的所有排列,以某种顺序(顺序是什么并不重要)。
有这种算法吗?我见过的大多数排列生成算法都倾向于一次性(通常是递归地)生成所有的排列,这样就不能扩展到非常大的集合。用 Clojure (或其他函数式语言)实现会很有帮助,但我可以从伪代码中找到答案。