我需要高效地计算长度为
约束条件: - 该算法必须仅通过当前排列计算下一个排列。如果需要生成所有排列的列表,它将占用太多内存。 - 它必须能够计算长度为
非约束条件:
k
的下一个排列,选项有n
个。维基百科列出了一个很好的算法来计算从n
个选项中计算长度为n
的下一个排列。最好的方法是使用该算法(或 Steinhaus-Johnson-Trotter算法),然后只考虑列表的前k
项,每当更改都在该位置以上时再次迭代。约束条件: - 该算法必须仅通过当前排列计算下一个排列。如果需要生成所有排列的列表,它将占用太多内存。 - 它必须能够计算长度为
k
的n
的排列(这是另一种算法失败的地方)非约束条件:
- 我不在意是否就地排序
- 我不在意它是否按字典顺序排列,或者按任何顺序排列
- 当然,我不会太在意它如何高效地计算下一个排列,但是要合理,不能每次都生成所有可能的排列来给我下一个排列。