码迷,mamicode.com
首页 > 编程语言 > 详细

全排列算法(字典序法、SJT Algorithm 、Heap's Algorithm)

时间:2014-11-27 16:18:13      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:算法   全排列   

一、字典序法

1) 从序列P的右端开始向左扫描,直至找到第一个比其右边数字小的数字bubuko.com,布布扣,即bubuko.com,布布扣

2) 从bubuko.com,布布扣右边找出所有比bubuko.com,布布扣大的数中最小的数字bubuko.com,布布扣,即bubuko.com,布布扣

3) 交换bubuko.com,布布扣bubuko.com,布布扣

4) 将bubuko.com,布布扣右边的序列翻转,即可得到字典序的下一个排列。

5) 重复上面的步骤,直至得到字典序最大的排列,即左边数字比右边的大的降序排列。



二、SJT Algorithm

初始状态为bubuko.com,布布扣

1) 找到最大的可移动数m(当一个数指向一个比它小的数是,该数就是可移动数)

2) 交换m和m所指向的数

3) 改变所有比m大的数的方向

4) 重复上面的步骤,直至找不到可移动数



三、Heap‘s Algorithm

procedure generate(n : integer, A : array of any):
    if n = 1 then
          output(A)
    else
        for i := 1; i ≤ n; i += 1 do
            generate(n - 1, A)
            if n is odd then
                j ← 1
            else
                j ← i
            swap(A[j], A[n])
以上算法描述摘自维基百科




全排列算法(字典序法、SJT Algorithm 、Heap's Algorithm)

标签:算法   全排列   

原文地址:http://blog.csdn.net/jdplus/article/details/41546455

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!