Full Permutation - 全排列
问题
求包含个不同元素的集合的全排列,其中任意两元素互不相同。
解法
本文介绍Steinhaus-Johnson-Trotter算法求解集合的所有全排列。
初始化设集合为空,其全排列只有个:
在第步基础上增加新元素,可插入的位置唯一,得到个排列:
在第步基础上增加新元素,可插入的位置有个,得到个排列:
在第步基础上增加新元素,可插入的位置都有个,得到个排列:
可以看出在第步操作时新增元素,这时可以插入的位置有个,设第步插入后得到的排列数量为,第步插入后得到的排列数量为。
由此可得包含个元素的集合的全排列数量为
求个元素的全排列,需要重复步找出所有排列,该算法的时间复杂度为。
Steinhaus-Johnson-Trotter算法
LeetCode
- leetcode 46: website, source.hpp
- leetcode 47: website, leetcode-47 source.hpp