k-ハノイの塔

 投稿者:山中和義  投稿日:2015年 3月23日(月)19時39分23秒
  4本の棒のハノイの塔 最小手数

考察
初期状態を、
   ▲
  △△ ┴ ┴ ┴
とする。

これを、△△ ▲ ┴ ┴ と移動することを考える。
上からm個の▲の移動は4-hanoi[m]となる。
続いて、
┴ ▲ ┴ △△
残り(n-m)個の△△の移動は3-hanoi[n-m]となる。
最後に、
     ▲
┴ ┴ ┴ △△
▲の移動は4-hanoi[m]となる。
(終わり)

参考サイト http://mathworld.wolfram.com/TowerofHanoi.html


OPTION ARITHMETIC RATIONAL
DECLARE EXTERNAL FUNCTION HANOI.H
FOR N=1 TO 50
   PRINT N; H(N,4)
NEXT N
END

MODULE HANOI !n枚の板、k本の棒のハノイの塔をH(n,k)と表す
OPTION ARITHMETIC RATIONAL
SHARE NUMERIC F(1000,10)
MAT F=ZER

PUBLIC FUNCTION H
EXTERNAL FUNCTION H(N,K)
   OPTION ARITHMETIC RATIONAL
   IF F(N,K)>0 THEN !算出している場合
      LET H=F(N,K) !restore it
   ELSE
      IF K=3 THEN !3本の場合、(2^n-1)回
         IF N=1 THEN
            LET T=1
         ELSE
            LET T=2*H(N-1,3)+1 !漸化式
         END IF
      ELSE !4本以上
         IF N=1 THEN
            LET T=1
         ELSE
            LET T=2*H(1,K)+H(N-1,K-1) !最小のもの
            FOR M=2 TO N-1
               LET W=2*H(M,K)+H(N-M,K-1) !m本はk-hanoi、(n-m)本は(k-1)-hanoi
               IF W<T THEN LET T=W
            NEXT M
         END IF
      END IF
      LET H=T
      LET F(N,K)=T !save it
   END IF
END FUNCTION
END MODULE


実行結果

1  1
2  3
3  5
4  9
5  13
6  17
7  25
8  33
9  41
10  49
11  65
12  81
13  97
14  113
15  129
16  161
17  193
18  225
19  257
20  289
21  321
22  385
23  449
24  513
25  577
26  641
27  705
28  769
29  897
30  1025
31  1153
32  1281
33  1409
34  1537
35  1665
36  1793
37  2049
38  2305
39  2561
40  2817
41  3073
42  3329
43  3585
44  3841
45  4097
46  4609
47  5121
48  5633
49  6145
50  6657


 

戻る