全排列问题
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。《算法设计与技巧分析》这本书中,使用归纳法生成一组数【1,2,3……n】的所有排列问题,并用数组P[1……n]来存放每一个排列。该归纳法基于这样一个假设:可以生成n-1个数的所有排列,那么就可以扩展方法,生成1,2,……n这n个数的全排列。
全排列生成方法
生成2,3,……n,这n-1个数的所有排列,再在这些所有排列前面加上第N个数1;接下来生成1,3,4……n这n-1个数的排列,然后再在每个排列前面加上第N个数2,依次类推,直到生成1,2,3……n-1这n-1个数的所有排列,并且在每个排列前面加上第N个数n,那么这所有的排列就构成了1,2,……n这个N个数所有的排列结果集了。
这一过程可以描述为,设一集合变量p = {r1, r2, r3, ... ,rn}, 全排列为permute(p),定义一个集合变量pn,pn=p-{rn},即pn是集合p移除某个元素rn后的集合。那么r1permute(p1)就是集合[r2,r3,……rn]这n-1个数的排列的,然后每个排列之前在加上第N个元素r1得到的排列。
归纳公式
求p=【1,2,3……n】的全排列的算法,可以归纳得到计算公式为:permute(p)=1.permute(p1)+2.permute(p2)+3.permute(p3)……n.permute(pn),也就是直接对于序列1,2,3……n