首页 > 其他 > 详细

next_permutation / prev_permutation

时间:2015-04-06 15:28:32      阅读:259      评论:0      收藏:0      [点我收藏+]

设现有序列为a[1 ... n]。

 

(1)在a[1 ... n]找到所有满足a[p] < a[p+1]的p的最大值。如果不存在这样的p,说明现有序列已经是最大字典序的排列。

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8]
7 3 4 2 0 1 5 8 6

例如上表中有a[1] < a[2],a[4] < a[5],a[5] < a[6],a[6] < a[7]这四对关系。

其中满足要求的p的最大值为6。

 

(2)在a[p+1 ... n]中找到所有满足a[q] > a[p]的a[q]的最小值。

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8]
7 3 4 2 0 1 5 8 6

例如上表中当p = 6时:

q = 7,a[q] = 8 > a[p]

q = 8,a[q] = 6 > a[p]

最小的a[q]为6,此时q = 8。

 

(3)交换a[p]和a[q],并反转a[p+1 ... n]中的元素。

以上表为例:

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8]
7 3 4 2 0 1 5 8 6

交换a[p]和a[q]后变为:

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8]
7 3 4 2 0 1 6 8 5

反转a[p+1 ... n]的元素后变为:

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8]
7 3 4 2 0 1 6 5 8

next_permutation / prev_permutation

原文:http://www.cnblogs.com/meowcherry/p/4395973.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!