再帰
ハノイの塔(ハノイ)
提案
3極、大合計に対する小サイズの第一ルートが存在する\(N- \)プレートは、第一ポール上の第3の極に移動し、プレートの全ては、以下の3つのルールが必要となります。
- あなただけのプレートを移動することができます。
- あなただけの各極プレートの上部を移動することができます。
- 小さい上、下各大極にプレート。
ステップの最小数は、問題を必要としました。
例:
場合\(N = 3 \) 、図に示すように移動する方法。
最小の動きの数(7 \)\、そう\(N = 3 \)場合提案溶液である\(7 \) 。
解きます
方法:ネーミングと解決
名前
- セット\(H(N)\)の\(N- \)プレートハノイの塔の溶液。
- 三極の番号は(A、B、C \)\。
- 最初の\(I \)層板として(H_I \)\。
解決
明らかに、\(H(1)。1 = \)
利用可能な観察は、\(N- \)からプレート\(Aは\)に移動される\(B \)に対応する\(H_1、H_2 \ cdots H_ {N-1} \) に移動する\(B \)後\(H_n \)移動\(C \) 、次いで\(H_1、H_2 \ cdots H_ {N-1} \) 移動\(C \) 。
定義により、\(H_1、H_2 \ cdots H_ {N-1} \) から\(A \)に移動\(B \)のための\(H(N-1) \) ステップ。
\(\したがって、H(N)= 2H(N-1)+1 \ qquad H(1)= 1 \)
テスト
既知の(H(3)= 7 \ \)
\ [\ので、H(N)= 2H(N-1)+1 \]
\ [\したがって、H(3)= 2 \回H(2)+1 \]
\ [\したがって、H(3)= 2 \時間(2 \回H(1)+ 1)+ 1 \]
\ [\したがって、H(3)= 2 \回(2 \回1 + 1)+1 \]
\ [\したがって、H(3)= 2 \時間3 + 1 \]
\ [\したがって、H(3)= 7 \]
コード
# python
A = [3, 2, 1]
B = []
C = []
def move(n, source, target, auxiliary):
if n > 0:
# Move n - 1 disks from source to auxiliary, so they are out of the way
move(n - 1, source, auxiliary, target)
# Move the nth disk from source to target
target.append(source.pop())
# Display our progress
print(A, B, C, '##############', sep='\n')
# Move the n - 1 disks that we left on auxiliary onto target
move(n - 1, auxiliary, target, source)
# Initiate call from source A to target C with auxiliary B
move(3, A, C, B)
リカーシブ
再帰的な解決方法は、計算で自分のを呼び出すことです。
再帰的構成条件は、持っている必要があります
サブ問題は、元の問題は、同じ問題であり、かつ容易になります。
自分自身を呼び出して無制限にすることはできません、非再帰的な処理のために状況を簡素化、国境を持っている必要があります。
ハノイの塔は、再帰を解決するための代表的な式です。
囲いました
以前の漸化式で、容易表示するには、計算(\ H(N))\必要(N-1 \)\回\(H(n)は、\)で置換されている\(2H(N-1) + 1 \)の操作。
したがって、再帰的な直感的なものの、しかし、便利な計算ではありません。
クローズは、直接再帰的である必要はない、関数の値を計算することができます。
私たちは、ハノイの塔が閉じて、再帰的に変換しようとします。
第1幕
解決
\ [\ので、H(N)= 2H(N-1)+1 \]
\ [\したがって、H(N)= 4H(N-2)+3 \]
\ [\したがって、H(N)= 8H(N -3)+7 \]
\ [\ vdots \]
\ [\したがって、H(N)= 2 ^ {N-1} H(1)+ 2 ^ {N-1} -1 \]
\ [\したがって、H (N)= ^ {N-1} 2 + 2 ^ {N-1} -1 \]
\ [\したがって、H(N)= 2 ^ N-1 \]
テスト
既知の(H(3)= 7 \ \)
\ [\ H(N)= 2 ^ N-1 \なぜなら]
[故にH(3)= ^ 3-1 2 \ \] \
\ [\したがって、H(3)= 7 \]
第2幕
解決
\ [\ので、H(N)
= 2H(N-1)\] 推測:
\ [H(N)1 = 2-N- ^ \。]
実証:
\ [n iははっきり\確立= 1、]
\ [IIは、次いで、K-1 = 2 ^と仮定N = K、すなわち、H(k)を設立:\]
\ [\ので、H(N)= 2H(N-1)+1 \]
\ [\したがって、H(N + 1)= 2H(N)+1 \]
\ [\ので、H(N)= 2 ^ K-1 \]
\ [\したがって、H(N + 1)= 2 \ CDOT(2 ^ K-1)-1 \]
\ [\したがって、H(N + 1)= 2 ^ {K + 1} -2 + 1 \]
\ [\したがって、H(N + 1)= 2 ^ {K + 1} -1 \]
QED。