Tower of Hanoi
เป้าหมาย & กติกา
เสาสำรอง (auxiliary) เสาต้นทาง (from) เสาปลายทาง (to)
Algorithm - Tower of Hanoi กรณี Base case : เมื่อ N=1(เหลือจานใบเดียวในเสา) ย้ายจากใบล่างสุดจากเสาต้นทาง ไปยัง เสาปลายทาง กรณี Recursive case : (มีจำนวน N จานในเสา) ย้าย N - 1 จาน จาก เสาต้นทาง ไปยัง เสาสำรอง ย้าย จานใบที่ N จาก เสาต้นทาง ไปยัง เสาปลายทาง ย้าย N – 1 จาน จาก เสาสำรอง ไปยัง เสาปลายทาง
Funtion moveDisks(N,frm,to,aux) Algorithm - Tower of Hanoi Funtion moveDisks(N,frm,to,aux) 1. if(N=1) then Move Disk 1 from frm -> to 2. Else { moveDisks(N-1,frm,aux,to) Move Disk N from frm -> to moveDisks(N-1,aux,to,frm) } 3.Return
N=1 Move Disk N from frm (A) -> to (C) A B C N=1 Move Disk N from frm (A) -> to (C)
N=1 Move Disk N from frm (A) -> to (C) A B C N=1 Move Disk N from frm (A) -> to (C)
กรณีเมื่อมีจานเดียว ( N = 2 ) 1 2 A B C N=2 moveDisks(2,A,C,B)
กรณีเมื่อมีจานเดียว ( N = 2 ) moveDisks(N,frm,to,aux) moveDisks(N-1,frm,aux,to) Move Disk N from frm -> to moveDisks(N-1,aux,to,frm) moveDisks(1,A,B,C) *Move Disk 1 from A -> B moveDisks(2,A,C,B) moveDisks(1,A,B,C) *Move Disk 2 from A -> C moveDisks(1,B,C,A) moveDisks(1,B,C,A) *Move Disk 1 from B -> C
กรณีเมื่อมีจานเดียว ( N = 2 ) ผลของโปรแกรม 1. Move Disk 1 from A -> B 2. Move Disk 2 from A -> C 3. Move Disk 1 from B -> C
N=1 1. Move Disk 1 from A -> B 2 1 A B C N=1 1. Move Disk 1 from A -> B
N=1 2. Move Disk 2 from A -> C A B C N=1 2. Move Disk 2 from A -> C
N=1 3. Move Disk 1 from B -> C 2 A B C N=1 3. Move Disk 1 from B -> C
กรณีเมื่อมีจานเดียว ( N = 3 ) 1 2 3 A B C
กรณีเมื่อมีจานเดียว ( N = 3 ) moveDisks(3,A,C,B) moveDisks(2,A,B,C) *Move Disk 2 from A -> C moveDisks(2,B,C,A)
กรณีเมื่อมีจานเดียว ( N = 3 ) moveDisks(2,A,C,B) moveDisks(1,A,B,C) *Move Disk 2 from A -> C moveDisks(1,B,C,A) moveDisks(3,A,C,B) moveDisks(2,A,B,C) *Move Disk 3 from A -> C moveDisks(2,B,C,A) moveDisks(2,B,C,A) moveDisks(1,A,B,C) *Move Disk 2 from A -> C moveDisks(1,B,C,A)
กรณีเมื่อมีจานเดียว ( N = 3 ) moveDisks(1,A,C,B) *Move Disk 1 from A -> C moveDisks(2,A,B,C) moveDisks(1,A,C,B) *Move Disk 2 from A -> B moveDisks(1,C,B,A) moveDisks(1,C,B,A) *Move Disk 1 from C -> B moveDisks(3,A,C,B) moveDisks(2,A,B,C) *Move Disk 3 from A -> C moveDisks(2,B,C,A) moveDisks(1,B,A,C) *Move Disk 1 from B -> A moveDisks(2,B,C,A) moveDisks(1,B,A,C) *Move Disk 2 from B -> C moveDisks(1,A,C,B) moveDisks(1,A,C,B) *Move Disk 1 from A -> C
กรณีเมื่อมีจานเดียว ( N = 3 ) ผลของโปรแกรม 1. Move Disk 1 from A -> C 2. Move Disk 2 from A -> B 3. Move Disk 1 from C -> B 4. Move Disk 3 from A -> C 5. Move Disk 1 from B -> A 6. Move Disk 2 from B -> C 7. Move Disk 1 from A -> C
A B C 2 3 1 กรณีเมื่อมีจานเดียว ( N = 3 ) 1. Move Disk 1 from A -> C
A B C 3 2 1 กรณีเมื่อมีจานเดียว ( N = 3 ) 2. Move Disk 2 from A -> B
A B C 1 3 2 กรณีเมื่อมีจานเดียว ( N = 3 ) 3. Move Disk 1 from C -> B
A B C 1 2 3 กรณีเมื่อมีจานเดียว ( N = 3 ) 4. Move Disk 3 from A -> C
A B C 1 2 3 กรณีเมื่อมีจานเดียว ( N = 3 ) 5. Move Disk 1 from B -> A
A B C 2 1 3 กรณีเมื่อมีจานเดียว ( N = 3 ) 6. Move Disk 2 from B -> C
A B C 1 2 3 กรณีเมื่อมีจานเดียว ( N = 3 ) 7. Move Disk 1 from A -> C
วิเคราะห์จำนวนครั้ง n=1 จำนวน 1 ครั้ง 21 -1 n=2 จำนวน 1 ครั้ง 21 -1 n=3 จำนวน 1 ครั้ง 21 -1 n=N จำนวน 1 ครั้ง 2N -1
PROGRAME
Thank for watch our presentation THE END Thank for watch our presentation