<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 117  文章 - 72  trackbacks - 0

    聲明:原創作品(標有[原]字樣)轉載時請注明出處,謝謝。

    常用鏈接

    常用設置
    常用軟件
    常用命令
     

    訂閱

    訂閱

    留言簿(7)

    隨筆分類(130)

    隨筆檔案(123)

    搜索

    •  

    積分與排名

    • 積分 - 155671
    • 排名 - 391

    最新評論

    三、四柱漢諾塔問題
    3、四塔問題:設有ABCD四個柱子(有時稱塔),在A柱上有由小到大堆放的n個盤子,如圖所示。

    今將A柱上的盤子移動到D柱上去。可以利用BC柱作為工作棧用,移動的規則如下:
    每次只能移動一個盤子。
    在移動的過程中,小盤子只能放到大盤子的上面。
    設計并實現一個求解四塔問題的動態規劃算法,并分析時間和空間復雜性。
     
      算法思想:
    用如下算法移動盤子(記為FourPegsHanoi):
    1)、將A柱上n個盤子劃分為上下兩部分,下方部分共有k(1kn)個盤子,上方部分共有n - k個盤子。
    2)、將A柱上面部分n–k個盤子使用FourPegsHanoi算法經過CD柱移至B柱。
    3)、將A柱剩余的k個盤子使用ThreePegsHanoi算法經過C柱移至D柱。
    4)、將B柱上的n–k個盤子使用FourPegsHanoi算法經過AC柱移至D柱。
     
    ThreePegsHanoi算法如下(設三個柱子分別為ABCA柱上共有k個盤子):
    1)、將A柱上方k-1個盤子使用ThreePegsHanoi算法經過B柱移至C柱。
    2)、將C柱上最后一個盤子直接移至C盤。
    3)、將B柱上k-1個盤子使用ThreePegsHanoi算法經過A柱移至C柱。
     
     
     
      算法步驟:
    根據動態規劃的四個步驟,求解如下:
    1)、最優子結構性質:
       四柱漢諾塔問題的最優解是用最少的移動次數將A柱上的盤子全部移到D柱上。當盤子總數為i時,我們不妨設使用FourPegsHanoi的最少移動次數為f(i)。相應的ThreePegsHanoi 算法移動次數為g(k),由于g(k)=2g(k-1)+1=2k -1,k確定時,g(k)也是不變的。
       f(i)為最優解時,其子問題f(i-k)也必為最優解。如果f(i-k)不是最優解,那么存在f(i-k) < f(i-k)。用f(i-k)替換f(i-k)將產生一個比f(i)更優的解。這與f(i)為最優解是矛盾的。所以本問題具有最優子結構性質。
     
    2)、遞歸地定義問題的最優解:
    根據上述FourPegsHanoi算法得到最少移動次數f(i):
    3)、自底向上地計算最優解的值: (相應的Java源程序在Hanoi.java中。)
    f(i)對應算法中的m[i , s[i]]
    -----------------------------------------------------------------------------------------
    求四柱漢諾塔最小移動次數偽代碼:
    組下標從0開始,數組m,s大小為n+1數組m存儲計算最小移動次數的中間值。數組s存儲每步最小移動次數所對應的分割值k
    MinMovements ( n ):
          m[0,0] ← s[0] ← 0 ?為了方便計算增加了f(0) = m[0,s[0]] = 0   
          for i ← 1 to n
               do min ←
                     for k ← 1 to i
                          do m[i , k] ← 2 * m[i – k , s[i – k]] + 2k – 1
                                if m[i , k] < min
                                      then min ← m[i , k]
                                            s[i] = k
          return m[n , s[n]] & s
    4)、根據計算信息構造最優解:
    MinMovements求出的數組s中,s[i]f(i)所對應的最優分割位置。根據數組s來構造移動盤子的最佳序列,偽代碼如下:
    -----------------------------------------------------------------------------------------
    FourPegsHanoi (i , src, temp1, temp2, dest):
    if i = 1
    then move(src , dest)
    else FourPegsHanoi(i – s[i] , src , temp2 , dest , temp1)
    ThreePegsHanoi(s[i] , src , temp2 , dest)
                      FourPegsHanoi(i – s[i] , temp1 , src , temp2 , dest)
    ----------------------------------------------------------------------------------------
    ThreePegsHanoi(k , src , temp, dest):
               if k = 1
    then move(src , dest)
                     else ThreePegsHanoi(k - 1, src , dest , temp)
                            move(src , dest)
                            ThreePegsHanoi(k - 1, temp , src , dest)
    -----------------------------------------------------------------------------------------
       時間空間復雜度分析:
    1、時間復雜度
    MinMovements算法的時間復雜度為:
    T(n) = 1 + 2 + ... + n = n(n+1)/2 = O(n2)
    2、空間復雜度
    MinMovements算法占用的空間為m s數組的大小:
    (n+1)2 + (n+1) = O(n2)
    通過分析m數組中記錄了一些與結果不相關的數據,所以通過對MinMovements進行改進,可使占用空間減小為O(n)
    MinMovements ( n ):
          m[0] ← s[0] ← 0      
          for i ← 1 to n
               do m[i] ←
                     for k ← 1 to i
                          do q ← 2 * m[i – k] + 2k – 1
                                if q < m[i]
                                      then m[i] ← q
                                            s[i] ← k
          return m[n] & s

       算法測試
    n=10時,最小移動次數49 移動序列如下:
    1    A->D
    2    A->B
    3    A->C
    4    B->C
    5    D->C
    6    A->B
    7    A->D
    8    B->D
    9    A->B
     
    10  D->A
    11  D->B
    12  A->B
    13  C->A
    14  C->D
    15  C->B
    16  D->B
    17  A->B
    18  A->C
    19  A->D
     
    20  C->D
    21  A->C
    22  D->A
    23  D->C
    24  A->C
    25  A->D
    26  C->D
    27  C->A
    28  D->A
    29  C->D
     
    30  A->C
    31  A->D
    32  C->D
    33  B->C
    34  B->D
    35  B->A
    36  D->A
    37  C->A
    38  B->D
    39  B->C
    40  D->C
    41  B->D
    42  C->B
    43  C->D
    44  B->D
    45  A->B
    46  A->C
    47  A->D
    48  C->D
    49  B->D
     
    n=15時,最小移動次數129。移動序列如下:
    1    A->B
    2    A->C
    3    A->D
    4    C->D
    5    B->D
    6    A->C
    7    A->B
    8    C->B
    9    A->C
    10  B->A
    11  B->C
    12  A->C
    13  D->A
    14  D->B
    15  D->C
    16  B->C
    17  A->C
    18  A->D
    19  A->B
    20  D->B
    21  A->D
    22  B->A
    23  B->D
    24  A->D
    25  A->B
    26  D->B
     
    27  D->A
    28  B->A
    29  D->B
    30  A->D
    31  A->B
    32  D->B
    33  C->D
    34  C->B
    35  C->A
    36  B->A
    37  D->A
    38  C->B
    39  C->D
    40  B->D
    41  C->B
    42  D->C
    43  D->B
    44  C->B
    45  A->C
    46  A->D
    47  A->B
    48  D->B
    49  C->B
    50  A->D
    51  A->C
    52  D->C
     
    53  A->D
    54  C->A
    55  C->D
    56  A->D
    57  A->C
    58  D->C
    59  D->A
    60  C->A
    61  D->C
    62  A->D
    63  A->C
    64  D->C
    65  A->D
    66  C->A
    67  C->D
    68  A->D
    69  C->A
    70  D->C
    71  D->A
    72  C->A
    73  C->D
    74  A->D
    75  A->C
    76  D->C
    77  A->D
    78  C->A
     
    79  C->D
    80  A->D
    81  B->D
    82  B->A
    83  B->C
    84  A->C
    85  D->C
    86  B->A
    87  B->D
    88  A->D
    89  B->A
    90  D->B
    91  D->A
    92  B->A
    93  C->B
    94  C->D
    95  C->A
    96  D->A
    97  B->A
    98  B->C
    99  B->D
    100C->D
    101B->C
    102D->B
    103D->C
    104B->C
     
    105      B->D
    106      C->D
    107      C->B
    108      D->B
    109      C->D
    110    B->C
    111   B->D
    112    C->D
    113    A->C
    114    A->D
    115    A->B
    116    D->B
    117   C->B
    118    A->D
    119    A->C
    120      D->C
    121      A->D
    122      C->A
    123      C->D
    124      A->D
    125      B->A
    126      B->C
    127      B->D
    128      C->D
    129      A->D

    文章來源:http://wintys.blog.51cto.com/425414/100703
    [附件]:四柱漢諾塔.zip
    posted on 2009-03-18 12:02 天堂露珠 閱讀(1148) 評論(0)  編輯  收藏 所屬分類: Algorithm
    主站蜘蛛池模板: 成人在线免费视频| 成人a毛片免费视频观看| 精品国产一区二区三区免费| 亚洲人成影院在线无码观看| 日本一区二区三区在线视频观看免费| 免费观看a级毛片| 99亚洲乱人伦aⅴ精品| 四虎影视精品永久免费| 男女男精品网站免费观看| 亚洲A丁香五香天堂网| 一级黄色免费大片| 亚洲综合AV在线在线播放| 全黄大全大色全免费大片| 亚洲AV永久无码精品| 国产午夜免费高清久久影院| 久久精品国产亚洲AV大全| 成年人视频免费在线观看| 亚洲人成网站在线在线观看| 免费中文字幕在线观看| 一级特黄录像免费播放肥| 久久久亚洲欧洲日产国码aⅴ| 免费精品国产日韩热久久| 国产成人高清亚洲一区91| 亚洲一区无码中文字幕| 国产精彩免费视频| 香蕉视频免费在线播放| 亚洲av福利无码无一区二区| 成年人免费的视频| 日本一区二区三区免费高清在线 | 又粗又硬又大又爽免费视频播放| 美女被免费网站视频在线| 国产成人亚洲精品青草天美| 一色屋成人免费精品网站| 猫咪www免费人成网站| 亚洲av女电影网| 日日AV拍夜夜添久久免费| 国产日韩AV免费无码一区二区三区 | 国产人妖ts在线观看免费视频| 9久热这里只有精品免费| 亚洲精品456在线播放| 伊人久久亚洲综合影院|