Full Permutation - 全排列


问题

求包含个不同元素的集合的全排列,其中任意两元素互不相同。

解法

本文介绍Steinhaus-Johnson-Trotter算法求解集合的所有全排列。

初始化设集合为空,其全排列只有个:

在第步基础上增加新元素,可插入的位置唯一,得到个排列:

在第步基础上增加新元素,可插入的位置有个,得到个排列:

在第步基础上增加新元素,可插入的位置都有个,得到个排列:

可以看出在第步操作时新增元素,这时可以插入的位置有个,设第步插入后得到的排列数量为,第步插入后得到的排列数量为

由此可得包含个元素的集合的全排列数量为

个元素的全排列,需要重复步找出所有排列,该算法的时间复杂度为


Steinhaus-Johnson-Trotter算法

LeetCode


源码

FullPermutation.h

FullPermutation.cpp

测试

FullPermutationTest.cpp