Bài toán Tháp Hà Nội thú vị đến mức nó đã được dùng làm đề tài của một số luận án Tiến sĩ và luận văn cao học ở nước ngoài (Trung Quốc, Mỹ, Đức,…). Hai hội thảo khoa học quốc tế đã được tổ chức tại Slovenia (2005) và Paris 2009. Đã có hai cuốn sách chuyên khảo đầu tiên (4 và 8) về Bài toán Tháp Hà Nội. Luận văn Bài toán Tháp Hà Nội với các đĩa màu có mục đích trình bày bài toán Tháp Hà Nội cải biên, trong đó mỗi cọc đĩa được gán cho một màu nhất định.
Trang 1MỤC LỤC
Trang
Mục lục 1
Mở đầu 2
Chương 1 Bài toán Tháp Hà Nội với nhiều cọc 4
1.1 Bài toán tháp Hà Nội cổ điển 4
1.2 Bài toán tháp Hà Nội với nhiều cọc 7
Chương 2 Bài toán Tháp Hà Nội với các đĩa màu 11
2.1 Các biến thể của trò chơi tháp Hà Nội 11
2.2 Một số thí dụ trò chơi tháp Hà Nội với đĩa màu 12
2.2.1 Bài toán 1 12
2.2.2 Bài toán 2 13
2.2.3 Bài toán 3 13
2.3 Trò chơi tháp Hà Nội đen trắng 22
2.3.1 Trò chơi Tháp Hà Nội đen trắng: Phiên bản 1 23
2.3.2 Trò chơi Tháp Hà Nội đen trắng: Phiên bản 2 27
2.3.3 Trò chơi Tháp Hà Nội đen trắng: Phiên bản 3 33
2.3.4 Trò chơi Tháp Hà Nội đen trắng: Phiên bản 4 38
Kết luận 42
Tài liệu tham khảo 43
Trang 2MỞ ĐẦU
Trò chơi (Bài toán) Tháp Hà Nội được nhà toán học người Pháp Edouard Lucas phát minh và phổ biến rộng rãi ở Paris năm 1883, là một bài toán nổi tiếng thế giới, hiện nay đang được nghiên cứu bởi rất nhiều nhà toán học và khoa học máy tính, các chuyên gia giáo dục và y học, được đưa vào nhiều giáo trình tin học và sách về trò chơi toán học như một ví dụ điển hình về thuật toán đệ qui và lập trình căn bản, nhưng hình như chưa được chú ý nghiên cứu và phổ biến rộng rãi ở Việt Nam
Mặc dù trò chơi Tháp Hà Nội có mặt trên khá nhiều trang WEB và giáo trình tiếng Việt, số lượng bài viết tiếng Việt giới thiệu về trò chơi và bài toán Tháp
Hà Nội trên các tạp chí là rất ít và còn rất sơ lược, hình như chưa có bài nghiên cứu tiếng Việt nào về bài toán Tháp Hà Nội, trong khi đó chỉ tính riêng số bài báo trên thế giới nghiên cứu về bài toán Tháp Hà Nội trong lĩnh vực Toán-Tin học đã có đến gần 500 bài với khoảng 250 bài với đầu đề có
cụm từ The Tower of Hanoi, đăng trên hơn 100 tạp chí khoa học uy tín Đó là
chưa kể đến những bài viết về sử dụng bài toán Tháp Hà Nội trong khoa học giáo dục và y học
Bài toán Tháp Hà Nội thú vị đến mức nó đã được dùng làm đề tài của một số luận án Tiến sĩ và luận văn cao học ở nước ngoài (Trung Quốc, Mỹ, Đức,…) Hai hội thảo khoa học quốc tế đã được tổ chức tại Slovenia (2005) và Paris
2009 Đã có hai cuốn sách chuyên khảo đầu tiên ([4] và [8]) về Bài toán Tháp
Hà Nội
Bài toán Tháp Hà Nội không chỉ thú vị ở chỗ nó mang tên Hà Nội, thủ đô của Việt nam, mà nó hấp dẫn các nhà Toán-Tin học bởi nó liên quan đến nhiều vấn đề như giải thuật đệ qui, hệ đếm, tam giác Pascal, thảm Sierpinski, lý thuyết đồ thị và chu trình Hamilton, ôtômát hữu hạn, độ phức tạp tính toán, Bài toán Tháp Hà Nội gợi ý cho nhiều nghiên cứu trong khoa học máy tính và
Trang 3Sau hơn một thế kỉ, trò chơi Tháp Hà Nội đã được tổng quát hóa (trò chơi Tháp Hà Nội với nhiều cọc, trò chơi Tháp Hà Nội song song,…) và đã có nhiều cải biên (trò chơi Tháp Hà Nội xoay vòng, trò chơi Tháp Hà Nội với các đĩa màu, ) Những tổng quát hóa và cải biên này dẫn đến những vấn đề toán học thú vị, thậm chí dẫn tới nhiều bài toán hiện nay chưa có lời giải
Luận văn Bài toán Tháp Hà Nội với các đĩa màu có mục đích trình bày bài toán
Tháp Hà Nội cải biên, trong đó mỗi cọc đĩa được gán cho một màu nhất định Luận văn gồm phần mở đầu, hai Chương và phần tài liệu tham khảo
Chương 1 Bài toán Tháp Hà Nội tổng quát
Chương 2 Bài toán Tháp Hà Nội với các đĩa màu
Luận văn được hoàn thành dưới sự hướng dẫn tận tình của PGS.TS Tạ Duy Phượng Em xin bầy tỏ lòng biết ơn sâu sắc nhất đối với Thầy
Em xin cảm ơn các Thầy Cô của Đại học Khoa Học Đại học Thái Nguyên và Viện Toán học đã tận tình giảng dạy em trong suốt quá trình học cao học
Em xin cảm ơn khoa Toán trường Đại học Khoa học Đại học Thái Nguyên, khoa Sau Đại học của nhà trường đã quan tâm giúp đỡ, tạo điều kiện thuận lợi cho em thực hiện kế hoạch học tập của mình
Tôi xin chân thành cảm ơn Sở Giáo dục và Đào tạo tỉnh Tuyên Quang, trường Trung học Phổ thông Hòa Phú, Chiêm Hóa, Tuyên Quang, đã tạo điều kiện và giúp đỡ tôi trong thời gian học Cao học
Xin cảm ơn người thân, đồng nghiệp, bạn bè đã cổ vũ động viên tôi trong suốt quá trình làm luận văn
Thái Nguyên, 20.11.2015
Vũ Hoàng Đạo
Trang 4Chương 1
BÀI TOÁN THÁP HÀ NỘI VỚI NHIỀU CỌC
Nhằm làm sáng tỏ các bài toán xét trong Chương 2, Chương 1 trình bày sơ lược bài toán tháp Hà Nội cổ điển và bài toán mở rộng của nó là bài toán tháp
Hà Nội với nhiều cọc
1.1 Bài toán tháp Hà Nội cổ điển
Năm 1883 nhà toán học người Pháp Édouard Lucas (1842–1891) đã phát minh và truyền bá trò chơi tháp Hà Nội (the Hanoi Tower, viết tắt: TH) Trò chơi (Bài toán) tháp Hà Nội cổ điển (the Hanoi Tower-TH) được phát
biểu như sau: Có ba cọc thẳng đứng được gắn trên một đế nằm ngang Cho n
đĩa tròn có lỗ ở giữa và đường kính khác nhau Lúc đầu các đĩa được lồng vào một cọc theo thứ tự từ lớn đến nhỏ, từ thấp lên cao, tạo nên một tòa tháp Trò chơi đòi hỏi di chuyển các đĩa, bằng cách đặt chúng vào cọc bên cạnh, mỗi lần chuyển một đĩa, theo các qui tắc sau
I Mỗi lần chỉ được chuyển một đĩa trên cùng từ một trong ba cọc
II Sau mỗi lần chuyển, các đĩa đều nằm trên một trong ba cọc, theo thứ tự từ lớn đến nhỏ, từ thấp đến cao
III Đĩa trên cùng của một trong ba cọc được đặt vào cọc trống hoặc đặt lên một trong hai cọc khác, nếu đĩa này nhỏ hơn các đĩa của cọc đó
Qui tắc sau đây được gọi là Qui tắc thiêng liêng (devine rule):
Không được đặt đĩa lên trên đĩa có đường kính nhỏ hơn
Một phân bố bất kì của n đĩa trên ba cọc được gọi là một trạng thái (state) hay một cấu hình (configuration) Một trạng thái (một cấu hình) được gọi là chính qui (regular) hay hợp lệ nếu không có đĩa nào nằm trên đĩa nhỏ hơn
Một trạng thái được gọi là hoàn hảo (perfect) nếu nó là chính qui và tất cả các
Trang 5Hình 1 là ví dụ các trạng thái (với số đĩa n8)
Thuật toán giải bài toán tháp Hà Nội cổ điển
Bước 1: Chuyển đĩa số 1 từ cọc A sang cọc C;
Bước 2: Chuyển đĩa số 2 sang cọc B;
Bước 3: Chuyển đĩa số 1 từ cọc C sang cọc B
Khi ấy đĩa số 1 nằm trên đĩa số 2
Như vậy, ta đang có hai đĩa nằm trên cọc B, cọc C hiện thời còn trống
Bước 4: Chuyển đĩa số 3 từ cọc A sang cọc C
Lặp lại ba bước trên để giải bài toán cho hai đĩa: chuyển đĩa số 1 và đĩa số 2 cho nằm lên trên đĩa số 3 trên cọc C
Tiếp tục làm như vậy cho bốn, năm,…đĩa
Mỗi lần dựng xong tháp từ đĩa thứ k đến đĩa thứ nhất (trên cọc B hoặc cọc
C, một trong hai cọc đó trống), ta chuyển đĩa thứ k1 từ cọc A sang cọc trống (cọc C hoặc cọc B), rồi lại di chuyển tháp đã dựng từ cọc B (hoặc cọc C) lên đĩa thứ k1 để được tháp với k1 đĩa Như vậy, khi đã xây dựng
xong tháp với k đĩa thì ta cũng dễ dàng xây dựng được tháp với k1 đĩa sau khi chuyển đĩa thứ k1 sang cọc trống
Trang 6Phương pháp trên được gọi là thuật giải đệ qui: Để tiến hành giải bài toán với
1
n đĩa, ta áp dụng lại thuật giải bài toán với n đĩa Toàn bộ quá trình cần
một số hữu hạn các bước, vì vậy đến một lúc nào đó thuật giải sẽ được áp dụng cho n1. Bước này chỉ đơn giản là chuyển một đĩa duy nhất từ cọc A
sang cọc C
Kí hiệu L n là số lần chuyển đĩa tối ưu trong bài toán tháp Hà Nội với n đĩa
và ba cọc Khi ấy, để chuyển n đĩa từ cọc A sang cọc C, trước tiên ta phải
chuyển n1 đĩa trên cùng (các đĩa nhỏ) từ cọc A sang cọc B, sau đó chuyển
đĩa thứ n từ cọc A sang cọc C Cuối cùng, lại chuyển n1 đĩa từ cọc B sang cọc C
Định lí 1 (Theorem 2.1, [2], p 73-74) Số bước chuyển tối ưu trong bài toán
tháp Hà Nội với ba cọc và n đĩa là
Trang 7Vậy công thức ( ) 2n 1
L n được chứng minh với mọi n
1.2 Bài toán tháp Hà Nội với nhiều cọc
Một mở rộng tự nhiên của bài toán
Tháp Hà Nội với ba cọc là Bài toán
Tháp Hà Nội với bốn (hoặc nhiều) cọc
Chính tác giả của bài toán Tháp Hà
Nội, E Lucas cũng là người đầu tiên
xét bài toán với nhiều cọc vào năm
1899, xem [5] Bài toán Tháp Hà Nội với bốn cọc
Năm 1902-1903 Henry Ernest
Dudeney đã viết hai bài báo về bài
toán Tháp Hà Nội với bốn cọc Trong
hai trang đầu tiên của cuốn sách nổi
tiếng The Canterbury Puzzles and
Other Curious Problems xuất bản tại
London năm 1907 và tại New York
năm 1908 (xem [1]), Ông đã viết về
bài toán này trò chơi tháp Hà Nội với
bốn cọc (dưới dạng các quân cờ) và
số đĩa là 8, 10 hoặc 21 và gọi là The
Reve's puzzle-câu đố của Reve)
Trong phần lời giải (trang 131-132), Dudeney đã khẳng định (không chứng minh) rằng số lần chuyển cần thiết tương ứng với 8, 10 hoặc 21 đĩa là 33, 49 hoặc 321 Hơn nữa, Ông còn xét trường hợp với số đĩa là số tam giác, tức là các số t k k( 1)
, k 1,2, Giả sử t k k( 1)
là số tam giác thứ k và
1( 1) 2 ( ) 1 2.(2n 1) 1 2n 1
Trang 8giả sử M n là số lần chuyển tối thiểu cần thiết để chuyển xong n đĩa ( )Dudeney tuyên bố mà không chứng minh rằng
Tuy nhiên Dudeney không cho một thuật toán nào cho phép tìm ra các số này,
và cũng không có một gợi ý nào cho trường hợp số đĩa không phải là số tam giác, thí dụ khi n8
Bài toán tổng quát với p3 cọc, p là số bất kì với số đĩa n bất kì được B
M Stewart đề xuất năm 1939 (Problem 3918 trong tạp chí The Americal Mathematical Montly [9]) Lời giải độc lập của bài toán này đã được B M
Stewart [10] và J S Frame [3] cùng trình bày trong tạp chí này năm 1941 Các thuật toán của Stewart và Frame cùng với một số thuật toán cải biên khác
đã được chứng minh là tương đương theo nghĩa số lần chuyển đĩa là bằng nhau (xem [11]) Vì vậy người ta thường gọi chung thuật toán của hai Ông
hoặc các thuật toán tương đương là thuật toán Frame- Stewart
Giả sử n là số đĩa nằm trên cọc 0 và p là số cọc được đánh số từ 0 đến p1
Để giải bài toán tháp Hà Nội với p cọc, ta thực hiện các bước sau
Bước 1 Với số l , 1 l n , chuyển l đĩa trên cùng từ cọc 0 tới cọc 3, mất
( )
p
S l lần chuyển Được phép sử dụng tất cả các cọc trong khi chuyển
Bước 2 Giữ nguyên cọc 3 chứa l đĩa trên cùng Chuyển n l đĩa từ cọc 0 tới cọc đích, sử dụng n1 cọc còn lại (vì cọc 3 đang được dùng để chứa l đĩa
nhỏ nhất), mất S p1(n l ) lần chuyển
Bước 3 Cuối cùng, chuyển l đĩa trên cùng từ cọc 3 tới cọc đích, mất S l p( )lần chuyển nữa Được phép sử dụng tất cả các đĩa
Trang 9Như vậy, tổng cộng cần 2S l p( )S p1(n l ) lần chuyển
Bài toán đặt ra là, cần tính số l để tổng này là nhỏ nhất
Thuật toán Frame-Stewart với cách chọn l như trên cho phép tìm ra một (một vài) giá trị i sao cho
Nói cách khác, các giá trị i thỏa mãn công thức trên là số bước tối ưu cần
thiết trong lớp các thuật toán đề nghị
B M Stewart và J S Frame cũng đã chứng minh rằng, nếu n là số tam giác
k
nt , thì cách chọn tối ưu nhất cho l là l k , trong khi đó nếu t k1 n t k
thì cả hai giá trị k1 và k đều là cách chọn tối ưu cho l Như vậy, B M
Stewart và J S Frame đã đề xuất thuật toán giải cho bài toán Tháp Hà Nội với số cọc bất kì Thuật toán này trùng với lời giải của H E Dudeney trong các trường hợp riêng nêu trên Ta cũng lưu ý rằng, khác với trường hợp bài toán với ba cọc, lời giải cho bài toán với bốn cọc có thể là không duy nhất Hơn nữa, như ta đã biết, số lần chuyển đĩa cho bài toán ba cọc là
S n , nên S n3( ) sẽ tăng theo hàm mũ Tuy nhiên, trong trường hợp
số cọc p4, phân tích thuật toán Frame- Stewart, Stockmeyer 1994 [11] phát hiện ra rằng, độ phức tạp của thuật toán là dưới mũ (sub-exponential), cỡ
2 n
n
cho k 4
Như vậy, ý tưởng cơ bản của thuật toán Frame-Stewart cho bài toán bốn cọc
là sử dụng chiến lược chia để trị (hay dùng trong các thuật toán tin học) Cụ thể như sau: Chia n đĩa thành hai phần, phần trên gồm l đĩa có kích thước nhỏ, phần dưới chứa nl đĩa có kích thước lớn Chuyển l đĩa trên cùng từ cọc thứ nhất sang cọc thứ tư bằng cách giải bài toán ba cọc với l đĩa nhỏ Tiếp tục giải bài ba cọc với nl đĩa lớn Sau đó lại giải bài toán ba cọc với l đĩa để chuyển l đĩa về cọc đã chứa n l đĩa lớn và bài toán đã giải xong
Trang 10Tuy nhiên, Otto Dunkel [2], tổng biên tập của tạp chí The Americal Mathematical Montly khi cho đăng hai lời giải của Frame và Stewart đã chỉ ra rằng: Chứng minh
tính tối ưu của Frame và Stewart chỉ áp dụng được cho các thuật toán của một lược đồ chung mô tả bởi Frame và Stewart mà thôi Nói cách khác, Frame và
Stewart mới chỉ chứng minh được rằng: trong số tất cả các giá trị có thể của l (theo thuật toán của hai Ông) phải có ít nhất một giá trị i làm cực tiểu số lần chuyển Hai ông chưa chứng minh rằng mọi thuật toán tối ưu bắt buộc phải có
dạng trên Và điều này cho tới nay vẫn chưa chứng minh được Vì vậy lời giải của
Frame và Stewart cần phải coi một cách đúng đắn là lời giải giả định là tối ưu
(presumed optimal solution), chứ chưa chứng minh được là lời giải tối ưu Từ
1941 đến nay, rất nhiều người khác đã nghiên cứu thuật toán này Gần đây một số tác giả đề nghị một số thuật toán hồi qui tương đương với thuật toán Frame -Stewart (xem [14]) Nhưng tính tối ưu của thuật toán vẫn chưa được chứng minh
Đây là một ví dụ tiêu biểu cho thấy: từ một bài toán đơn giản, có thể giải được, nhưng bằng cách nới lỏng một số ràng buộc của nó (tăng thêm số cọc), thì lại trở thành khó hơn rất nhiều, do xuất hiện những vấn đề mới (sự tồn tại,
tính duy nhất, tính tối ưu của nghiệm)
Việc chưa chứng minh được tính tối ưu của thuật toán Frame –Stewart cho bài toán với bốn hoặc nhiều cọc là tối ưu không suy ra rằng không tồn tại thuật toán tìm (tất cả) các nghiệm tối ưu
Mặc dù chưa chứng minh được số lần chuyển đĩa tối ưu chính xác là bao
nhiêu, nhưng thuật toán Frame-Stewart và các cải biên của nó cũng đã cho lời giải được giả định là tối ưu (presumed-optimal solution), cho phép lập trình
giải bài toán tháp Hà Nội với số cọc bất kì Tính tối ưu của thuật toán Stewart đã được kiểm tra trên máy tính cho số đĩa nhỏ hơn 30
Frame-Định lí 2 ([12]) Số bước chuyển giả định là tối ưu trong thuật toán Frame
Stewart cho bài toán bốn cọc là
1( 1)
2
R n l n trong đó l là số tự nhiên gần 2n nhất
Trang 11Chương 2
TRÒ CHƠI THÁP HÀ NỘI VỚI ĐĨA MÀU
2.1 Các biến thể của trò chơi tháp Hà Nội
Trò chơi tháp Hà Nội có rất nhiều biến thể Trong [5], trang 303, E Lucas, tác
giả của trò chơi tháp Hà Nội, đã nhận xét như sau: Le nombre des problèms que l’on peut se poser sur la nouvelle Tour d’Hanoi est incalculable (Số bài
toán có thể tạo ra trò chơi tháp Hà Nội mới là không tính được)
Mọi biến thể của trò chơi Tháp Hà Nội đều chứa các cọc và các đĩa, các đĩa
được đặt trên các cọc Các qui tắc chung sau đây phải được thỏa mãn:
1) Các cọc là có thể phân biệt được (distinguishable);
2) Các đĩa là có thể phân biệt được;
3) Đĩa luôn nằm trên cọc trong suốt thời gian chơi, ngoại trừ khi chuyển động;
4) Một hoặc nhiều đĩa chỉ có thể chuyển động từ đỉnh của cọc đĩa
5) Trò chơi: Cho một phân bố ban đầu của các đĩa trên các cọc (trạng thái ban đầu) và một phân bố cuối của các đĩa trên các cọc (trạng thái cuối) Hãy tìm cách chuyển các đĩa từ trạng thái ban đầu sang trạng thái cuối theo những qui tắc nhất định với số lần chuyển đĩa ít nhất
Ngoài những qui tắc trên, có thể còn có một số hạn chế hoặc qui định khác nữa, chúng cung cấp một số vô cùng lớn các biến thể khác nhau Thí dụ:
1) Số cọc có thể là bất kì (như ta thường gặp);
2) Các cọc có thể được sắp thứ tự theo chiều cao, nghĩa là, theo số đĩa mà chúng có thể chứa;
3) Các đĩa có thể được phân biệt và ưu tiên theo bán kính hoặc màu;
4) Có thể chấp nhận một số trạng thái không chính qui (irregular state)
5) Nhiều hơn một đĩa trên đỉnh có thể chuyển động đồng thời;
Trang 126) Có thể thêm một số hạn chế hoặc qui tắc phụ đặt lên chuyển động, mà thậm chí qui tắc thiêng liêng bị bỏ qua;
7) Và cuối cùng, là tổ hợp của các qui tắc trên
2.2 Một số thí dụ trò chơi tháp Hà Nội với đĩa màu
2.2.1 Bài toán 1
Một điều thú vị là chính Lucas, tác giả của trò chơi tháp Hà Nội, cũng đã xem xét một số biến thể của trò chơi này Trong [5], Ông đã xét trò chơi tháp Hà Nội với năm cọc và bốn nhóm đĩa với các màu khác nhau Mỗi cọc có thể chứa tất cả các đĩa Mỗi nhóm đĩa gồm bốn đĩa và 16 đĩa có các kích thước đôi một khác nhau Nhóm có màu c1,2,3,4 chứa bốn đĩa d1,2, ,16
với c 1 16dmod 4 Nghĩa là:
Màu c1 ứng với các đĩa mang số d 4,8,12,16.
Màu c2 ứng với các đĩa mang số d 3,7,11,15
Màu c3 ứng với các đĩa mang số d 2,6,10,14
Màu c4 ứng với các đĩa mang số d 1,5,9,13.
Hình 2.1: Trạng thái ban đầu của trò chơi với bốn cọc đĩa màu (của Lucas)
Hình 2.1 (Hình vẽ trên trang đầu của bài báo của E Lucas) chỉ ra trạng thái ban đầu của trò chơi Nhiệm vụ được đặt ra là đưa các đĩa về bốn cọc, mỗi cọc chứa đủ bốn màu khác nhau Nhiệm vụ này có thể được hoàn thành nhờ
Trang 13sử dụng cọc giữa tuân theo qui tắc thiêng liêng ([5], Quatriem Problem-Bài toán số 4)
2.2.2 Bài toán 2
Trò chơi gồm ba cọc được đánh số 0,1,2 và 8 đĩa Cọc 1 chứa bốn đĩa màu (thí dụ, màu đỏ, được kí hiệu là c1) gồm các đĩa được đánh số 2,4,6,8 Cọc 2 chứa 4 đĩa màu (thí dụ, màu xanh, được kí hiệu là c2), gồm các đĩa được đánh số 1,3,5,7 Kích thước của các đĩa tăng dần từ 1 đến 8 Nhiệm vụ của trò chơi là đưa tất cả các đĩa về cọc 0 theo quy tắc thiêng liêng (đĩa nhỏ hơn nằm trên đĩa lớn hơn, Hình 2.2)
đánh số 2,5,8,11 Cọc 3 chứa 4 đĩa mầu c3 gồm các đĩa mang số 1,4,7,10
Kích thước của các đĩa tăng dần từ 1 đến 12 Nhiệm vụ của trò chơi là hợp nhất hai màu c1 và c2 vào cọc 0 và cọc 3 với chồng đĩa mầu c=3 vẫn cố
định Được phép di chuyển các đĩa màu c3 và sử dụng cọc 3 trong quá trình thực hiện nhiệm vụ Khi chơi phải tuân theo quy tắc thiêng liêng
Giải pháp tối ưu cho bài toán này là 39 lần chuyển đĩa
Thật vậy, giả sử cọc 1 chứa 4 đĩa màu đỏ kí hiệu là Đ3, Đ6, Đ9, Đ12 Cọc 2 chứa 4 đĩa mầu vàng kí hiệu là V2, V5, V8, V11 và cọc 3 chứa 4 đĩa mầu xanh kí hiệu là X1, X4, X7, X10
Trang 14Qui trình chuyển đĩa như sau:
Bước 1: Chuyển đĩa Đ3 từ cọc 1 sang cọc 0
Bước 2: Chuyển đĩa V2 từ cọc 2 sang cọc 0
Bước 3: Chuyển đĩa X1 từ cọc 3 sang cọc 0
Bước 4: Chuyển đĩa X4 từ cọc 3 sang cọc 2
Trang 15Bước 5: Chuyển đĩa Đ6 từ cọc 1 sang cọc 3
Bước 6: Chuyển đĩa X4 từ cọc 2 sang cọc 1
Bước 7: Chuyển đĩa V5 từ cọc 2 sang cọc 3
Bước 8: Chuyển đĩa X1 từ cọc 0 sang cọc 2
Bước 9: Chuyển đĩa X4 từ cọc 1 sang cọc 3
Trang 16Bước 10: Chuyển đĩa V2 từ cọc 0 sang cọc 1
Bước 11: Chuyển đĩa Đ3 từ cọc 0 sang cọc 3
Bước 12: Chuyển đĩa V2 từ cọc 1 sang cọc 3
Bước 13: Chuyển đĩa X1 từ cọc 2 sang cọc 3
Bước 14: Chuyển đĩa V8 từ cọc 2 sang cọc 0
Trang 17Bước 15: Chuyển đĩa Đ9 từ cọc 1 sang cọc 2
Bước 16: Chuyển đĩa V8 từ cọc 0 sang cọc 2
Bước 17: Chuyển đĩa Đ12 từ cọc 1 sang cọc 0
Bước 18: Chuyển đĩa V8 từ cọc 2 sang cọc 0
Bước 19: Chuyển đĩa Đ9 từ cọc 2 sang cọc 1
Trang 18Bước 20: Chuyển đĩa V8 từ cọc 0 sang cọc 1
Bước 21: Chuyển đĩa V11 từ cọc 2 sang cọc 0
Bước 22: Chuyển đĩa V8 từ cọc 1 sang cọc 2
Bước 23: Chuyển đĩa Đ9 từ cọc 1 sang cọc 0
Bước 24: Chuyển đĩa V8 từ cọc 2 sang cọc 0
Trang 19Bước 25: Chuyển đĩa X1 từ cọc 3 sang cọc 0
Bước 26: Chuyển đĩa V2 từ cọc 3 sang cọc 1
Bước 27: Chuyển đĩa Đ3 từ cọc 3 sang cọc 2
Bước 28: Chuyển đĩa V2 từ cọc 1 sang cọc 2
Bước 29: Chuyển đĩa X1 từ cọc 0 sang cọc 2
Trang 20Bước 30: Chuyển đĩa X4 từ cọc 3 sang cọc 0
Bước 31: Chuyển đĩa V5 từ cọc 3 sang cọc 1
Bước 32: Chuyển đĩa X4 từ cọc 0 sang cọc 1
Bước 33: Chuyển đĩa Đ6 từ cọc 3 sang cọc 0
Bước 34: Chuyển đĩa X4 từ cọc 1 sang cọc 3
Trang 21Bước 35: Chuyển đĩa V5 từ cọc 1 sang cọc 0
Bước 36: Chuyển đĩa X1 từ cọc 2 sang cọc 3
Bước 37: Chuyển đĩa V2 từ cọc2 sang cọc 1
Bước 38: Chuyển đĩa Đ3 từ cọc 2 sang cọc 0
Bước 39: Chuyển đĩa V2 từ cọc 1 sang cọc 0
Hình 2.3: Giải pháp các bước di chuyển tối ưu cho Bài toán 3
Trang 22Hình 2.4: Tất cả các giải pháp cho Bài toán 3 chuyển trạng thái ban đầu (ba
cọc 1, 2, 3, mỗi cọc bốn đĩa Cọc 0 trống)
Màu sắc của một đoạn thẳng ứng với màu của đĩa di chuyển
Nhận xét ([4], trang 91) Nếu trạng thái kết thúc là các đĩa ở cọc 1 mầu c1vẫn cố định, hai mầu c2 và c3 được kết hợp vào cọc 0 Số lần di chuyển tối ưu trong trường hợp này là 32 Đối với trường hợp kết thúc các đĩa ở cọc 2 mầu c2 vẫn cố định, mầu c1 và c3 được kết hợp vào cọc 0 thì số di chuyển là 37 lần
Số lần tối thiểu của di chuyển cần thiết để nối tiếp hai màu sắc bằng cách sử dụng tất cả 5 cọc là khoảng từ 31 lần di chuyển với các đĩa tương đối nhỏ cố định, và 23 lần di chuyển cho những đĩa tương đối lớn nhất cố định
2.3 Trò chơi tháp Hà Nội đen trắng
Năm 2010, Stockmeyer và F Lunnon trong [12] đã đưa ra một phiên bản của
bài toán tháp Hà Nội với đĩa màu, được gọi là Tháp Hà Nội đen trắng (the Black and White Hanoi Tower-BWTH)
Dưới đây sẽ trình bày các thuật toán giải bốn phiên bản của bài toán BWTH Các thuật toán này sử dụng một thuật toán chung giải tháp Hà Nội cổ điển (mà ở đây là phương pháp Hanoi) như là một chương trình con
Giả code (pseudo-code) của thuật toán giải bài toán tháp Hà Nội cổ điển được viết như sau
procedure Hanoi (bottom, top, stack, from, via, to)
if (top<=bottom)
Hanoi (bottom-1, top, stack, from, to, via);