求排列p的下一个排列Q,以及已知Q,如何求它的上一个
求X={1,2,3,4,5,6,7}上的排列P=2637541的下一个排列Q。
下面直接讲如何操作:
先从右往左找出比右边数字小(即
j
=
m
a
x
(
i
∣
a
i
<
a
i
+
1
)
j=max(i|a_i<a_{i+1})
j=max(i∣ai<ai+1))的第一个数,即3所在的位置可能是引起变动的最左位置。再从右往左考察比3大的第一个数(即
k
=
m
a
x
(
a
i
>
a
j
)
k=max(a_i>a_j)
k=max(ai>aj)),可看出是4,将3与4对换位置,得2647531,然后将得到的排列从4后面的7531翻转得1357,最后把264接在1357的前面得2641357,它就是所求排列2637541的下一个排列。
已知Q=2641357,那么如何得到它的上一个呢?
可以模仿上面的思路与步骤:(首先肯定要从右边一个数与一个左边比它小的数交换,模仿上面的就差不多了)
先从右往左找出比右边数字大的第一个数(即
j
=
m
a
x
(
i
∣
a
i
>
a
i
+
1
)
j=max(i|a_i>a_{i+1})
j=max(i∣ai>ai+1)),即4所在的位置可能是引起变动的最左位置。再从右往左考察比4小的第一个数(即
k
=
m
a
x
(
a
i
<
a
j
)
k=max(a_i<a_j)
k=max(ai<aj)),可看出是3,将4与3对换位置,得2631457,然后将得到的排列从3后面的1457翻转得7541,最后把263接在7541的前面得2637541,它就是所求排列2641357的上一个排列。
- 全排列的生成算法还有递增进位制数法,递减进位制数法和邻位对换法等