全排列的生成方法
2015-06-21 18:46
246 查看
本文主要记录一下对全排列问题的理解,以及一种全排列的生成方法。
全排列问题,本质上就是一个解空间的遍历问题。
对于三个整数1,2,3的全排列问题,记其解空间为:
O(1,2,3)={
(1,2,3),
(1,3,2),
(2,1,3),
(2,3,1),
(3,1,2),
(3,2,1)
}.
如果需要按照解空间中各个解的出现顺序遍历该解空间(或者给定一个解,求其后续解),
那么就需要分析各个解的关系。
此处:
记:
若解中,存在b(n) < b(n+1) [n>0],则n为递增点
若b(n+1)不存在,则n也为递增点
若n不为递增点则n为非递增点
则该处解与下一个解的关系可表示为:
k=max{n|n为递增点} [若递增点不存在,则为最后一个解]
逆向搜索解中满足b(n)>b(k)的第一个n值
将b(n)与b(k)交换,
递增排序b(b+1)及后续序列,
即可得到下一个解。
此方法有较大改进空间!
全排列问题,本质上就是一个解空间的遍历问题。
对于三个整数1,2,3的全排列问题,记其解空间为:
O(1,2,3)={
(1,2,3),
(1,3,2),
(2,1,3),
(2,3,1),
(3,1,2),
(3,2,1)
}.
如果需要按照解空间中各个解的出现顺序遍历该解空间(或者给定一个解,求其后续解),
那么就需要分析各个解的关系。
此处:
记:
若解中,存在b(n) < b(n+1) [n>0],则n为递增点
若b(n+1)不存在,则n也为递增点
若n不为递增点则n为非递增点
则该处解与下一个解的关系可表示为:
k=max{n|n为递增点} [若递增点不存在,则为最后一个解]
逆向搜索解中满足b(n)>b(k)的第一个n值
将b(n)与b(k)交换,
递增排序b(b+1)及后续序列,
即可得到下一个解。
此方法有较大改进空间!