Hanois tårn

Hanois tårn

Spillet «Hanois tårn» består av tre pinner og en mengde disker med ulik radius som skal tres på pinnene.

Når spillet starter, skal alle diskene være plassert på samme pinne. Ingen av diskene skal ha en større disk liggende oppå seg.

Målet er å flytte alle diskene over på én av de to ledige pinnene. Det er bare lov å flytte én disk av gangen. Diskene som ikke flyttes, må ligge på en pinne. Det er aldri lov å plassere en større disk oppå en mindre disk.

Det minste antallet forflytninger du må gjøre for å flytte nn disker kaller vi F(n)F(n).

Bestem F(3)F(3).

Hanois tårn: tre disker skal flyttes fra venstre til høyre pinne

Det er en rekursiv sammenheng mellom F(n)F(n) og F(n1)F(n-1).

Bestem den rekursive sammenhengen. Bruk denne til å bestemme F(10)F(10).

Hanois tårn med ti disker på venstre pinne

Det finnes også en eksplisitt formel for FF.

Undersøk og finn denne formelen.

Fasit

F(3)=7F(3) = 7

F(n)=2F(n1)+1F(n) = 2 \cdot F(n-1) + 1, F(10)=1023\quad F(10) = 1023

F(n)=2n1F(n) = 2^n - 1

LøsningsforslagKI-generert

Vi skal flytte 3 disker fra venstre pinne til høyre pinne. Kall pinnene A (venstre), B (midtre) og C (høyre), og diskene 1 (minst), 2 (mellom) og 3 (størst).

Strategien er: flytt de to øverste diskene til midtpinnen, flytt den største til høyre, og flytt de to øverste tilbake.

  1. Disk 1: A → C
  2. Disk 2: A → B
  3. Disk 1: C → B
  4. Disk 3: A → C
  5. Disk 1: B → A
  6. Disk 2: B → C
  7. Disk 1: A → C

Det er altså 3+1+3=73 + 1 + 3 = 7 trekk, og vi kan ikke gjøre det på færre.

F(3)=7\mathbf{F(3) = \underline{\underline{7}}}

For å flytte nn disker fra pinne A til pinne C bruker vi denne strategien:

  1. Flytt de øverste n1n-1 diskene fra A til B. Det krever F(n1)F(n-1) trekk.
  2. Flytt den største disken fra A til C. Det er 11 trekk.
  3. Flytt de n1n-1 diskene fra B til C. Det krever igjen F(n1)F(n-1) trekk.

Den rekursive sammenhengen er:

F(n)=F(n1)+1+F(n1)=2F(n1)+1F(n) = F(n-1) + 1 + F(n-1) = \underline{\underline{2 \cdot F(n-1) + 1}}

med startverdien F(1)=1F(1) = 1.

Vi bygger opp tabellen:

nnF(n)=2F(n1)+1F(n) = 2 \cdot F(n-1) + 1
111
221+1=32 \cdot 1 + 1 = 3
323+1=72 \cdot 3 + 1 = 7
427+1=152 \cdot 7 + 1 = 15
5215+1=312 \cdot 15 + 1 = 31
6231+1=632 \cdot 31 + 1 = 63
7263+1=1272 \cdot 63 + 1 = 127
82127+1=2552 \cdot 127 + 1 = 255
92255+1=5112 \cdot 255 + 1 = 511
102511+1=10232 \cdot 511 + 1 = 1023
F(10)=1023\mathbf{F(10) = \underline{\underline{1023}}}

Fra tabellen i b) ser vi at verdiene er 1,3,7,15,31,1, 3, 7, 15, 31, \ldots Vi legger merke til at disse er 211,  221,  231,  241,  251,2^1 - 1,\; 2^2 - 1,\; 2^3 - 1,\; 2^4 - 1,\; 2^5 - 1, \ldots

Vi gjetter at den eksplisitte formelen er:

F(n)=2n1F(n) = 2^n - 1

Verifisering: Vi setter inn i rekursjonen og sjekker at formelen stemmer:

2F(n1)+1=2(2n11)+1=2n2+1=2n1=F(n)2 \cdot F(n-1) + 1 = 2 \cdot (2^{n-1} - 1) + 1 = 2^n - 2 + 1 = 2^n - 1 = F(n) \checkmark

Formelen er altså konsistent med rekursjonen. Kombinert med startverdien F(1)=211=1F(1) = 2^1 - 1 = 1 gir dette:

F(n)=2n1\mathbf{F(n) = \underline{\underline{2^n - 1}}}