【发布时间】:2013-01-17 18:51:21
【问题描述】:
我需要有效地从n计算长度k的下一个排列
选择。维基百科列表a great
algorithm
用于从 n 选择中计算长度 n 的下一个排列。
我能想到的最好的办法是使用该算法(或the Steinhaus–Johnson–Trotter algorithm),然后只考虑列表中的第一个k 项,并在所有更改都高于该位置时再次迭代。
约束:
- 算法必须计算下一个排列 当前的排列。如果它需要生成所有排列的列表, 会占用太多内存。
- 它必须能够计算长度为
k的n的排列(这是 其他算法失败的地方
非约束:
- 不管它是否就位
- 我不在乎它是按字典顺序还是按任何顺序排列
- 我不在乎太多它计算下一个排列的效率如何, 当然,在合理范围内,它不能通过制作一个给我下一个排列 每次都列出所有可能的列表。
【问题讨论】:
-
我很确定你会在 Python itertools 模块的代码中找到答案,看看
-
是的,它是 mac os x 上的 *.so,所以我懒得去找源代码。我想我应该停止偷懒,去做吧。
标签: algorithm permutation