Tài liệu Đề tài Thuật toán frame – stewart giải bài toán tháp Hà Nội tổng quát: Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC SƢ PHẠM
NGUYỄN THỊ HỒNG PHƢỢNG
THUẬT TOÁN FRAME – STEWART GIẢI BÀI TOÁN
THÁP HÀ NỘI TỔNG QUÁT
LUẬN VĂN THẠC SĨ TOÁN HỌC
THÁI NGUYÊN - 2010
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC SƢ PHẠM
NGUYỄN THỊ HỒNG PHƢỢNG
THUẬT TOÁN FRAME – STEWART GIẢI BÀI TOÁN
THÁP HÀ NỘI TỔNG QUÁT
LUẬN VĂN THẠC SĨ TOÁN HỌC
Chuyên ngành: Giải tích
Mã số: 60 46 01
Người hướng dẫn khoa học: PGS. TS. TẠ DUY PHƢỢNG
THÁI NGUYÊN - 2010
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
1
MỤC LỤC
Trang
MỤC LỤC
LỜI NÓI ĐẦU ............................................................................................... 2
Chƣơng 1 ....................................................................................................... 4
TỔNG QUAN VỀ TRÒ CHƠI THÁP HÀ NỘI .......................................... 4
§1. Lịch sử trò chơi ...
82 trang |
Chia sẻ: hunglv | Lượt xem: 1346 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Thuật toán frame – stewart giải bài toán tháp Hà Nội tổng quát, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC SƢ PHẠM
NGUYỄN THỊ HỒNG PHƢỢNG
THUẬT TOÁN FRAME – STEWART GIẢI BÀI TOÁN
THÁP HÀ NỘI TỔNG QUÁT
LUẬN VĂN THẠC SĨ TOÁN HỌC
THÁI NGUYÊN - 2010
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC SƢ PHẠM
NGUYỄN THỊ HỒNG PHƢỢNG
THUẬT TOÁN FRAME – STEWART GIẢI BÀI TOÁN
THÁP HÀ NỘI TỔNG QUÁT
LUẬN VĂN THẠC SĨ TOÁN HỌC
Chuyên ngành: Giải tích
Mã số: 60 46 01
Người hướng dẫn khoa học: PGS. TS. TẠ DUY PHƢỢNG
THÁI NGUYÊN - 2010
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
1
MỤC LỤC
Trang
MỤC LỤC
LỜI NÓI ĐẦU ............................................................................................... 2
Chƣơng 1 ....................................................................................................... 4
TỔNG QUAN VỀ TRÒ CHƠI THÁP HÀ NỘI .......................................... 4
§1. Lịch sử trò chơi Tháp Hà Nội ............................................................ 4
§2. Sơ lược về bài toán tháp Hà Nội tổng quát, các bài toán cải biên và
các vấn đề toán học liên quan ................................................................ 15
Chƣơng 2: TRÒ CHƠI THÁP HÀ NỘI..................................................... 21
§1 Trò chơi tháp Hà Nội và thuật giải đệ qui.......................................... 21
§2 Giải bài toán tháp Hà Nội bằng biểu diễn trong hệ đếm cơ số 2 ........ 26
§3 Đồ thị Hà Nội.................................................................................... 34
§4 Giải bài toán Tháp Hà Nội trên máy tính ........................................... 38
Chƣơng 3: BÀI TOÁN THÁP HÀ NỘI VỚI BỐN CỌC (Trò chơi
Reve-The Reve’s Puzzle) ............................................................................. 39
§1 Trò chơi Tháp Hà Nội với bốn cọc .................................................... 39
§2 Tính số bước chuyển tối ưu trong trò chơi Tháp Hà Nội với bốn cọc...... 43
Chƣơng 4: BÀI TOÁN THÁP HÀ NỘI TỔNG QUÁT............................. 52
§1 Tính số
( )pS n
trong thuật toán Frame-Stewart cho trò chơi Tháp
Hà Nội tổng quát ................................................................................... 52
§2 Đánh giá
( )pS n
............................................................................... 68
§3 Sự tương đương của một số thuật toán giải bài toán Tháp Hà Nội
tổng quát................................................................................................ 70
KẾT LUẬN .................................................................................................. 78
TÀI LIỆU THAM KHẢO ........................................................................... 79
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
2
LỜI NÓI ĐẦU
Trò chơi (Bài toán) Tháp Hà Nội được phổ biến rộng rãi ở Paris năm
1883 bởi nhà toán học Edouard Lucas, 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 ở 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 (xem [1]-[6]), 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 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 hơn 450 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 (trong [5] thống
kê số lượng bài báo khoa học viết về Tháp Hà Nội là 464 bài). Đó 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. Trò chơi 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. Một hội thảo khoa học quốc
tế [21] với tên gọi Workshop on the Tower of Hanoi and Related Problems đã
được tổ chức năm 2005.
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à toán học.
Luận văn Thuật toán Frame-Stewart giải bài toán Tháp Hà Nội tổng
quát có mục đích trình bày tổng quan về một thuật toán quan trọng giải bài
toán Tháp Hà Nội với số cọc bất kì.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
3
Luận văn gồm phần mở đầu, bốn Chương và phần tài liệu tham khảo.
Chương 1. Tổng quan về trò chơi Tháp Hà Nội.
Chương 2. Bài toán Tháp Hà Nội cổ điển.
Chương 3. Bài toán Tháp Hà Nội với bốn cọc.
Chương 4. Bài toán Tháp Hà Nội tổng quát.
Chương 1 giới thiệu tổng quan về Trò chơi Tháp Hà Nội.
Lời giải Bài toán Tháp Hà Nội cho ba cọc được trình bày trong Chương 2.
Sau hơn 100 năm, trò chơi Tháp Hà Nội đã có những cải biên và tổng
quát hoá (trò chơi Tháp Hà Nội xoay vòng, trò chơi Tháp Hà Nội song song,
trò chơi Tháp Hà Nội với nhiều cọc,...). Những cải biên và tổng quát hóa 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. Trong luận văn này, chúng tôi tập trung trình bày trong
Chương 3 và Chương 4 lời giải của bài toán Tháp Hà Nội, đó là Thuật toán đệ
qui dạng Frame-Stewart giải bài toán Tháp Hà Nội tổng quát.
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 và xin
được cảm ơn Thầy đã cung cấp nhiều tài liệu đồng thời cho phép sử dụng Bản
thảo cuốn sách của Thầy về Tháp Hà Nội.
Em xin cảm ơn các Thầy Cô của Đạ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.
Tôi xin cảm ơn khoa Toán trường ĐHSP Thái Nguyên, khoa Sau Đại
học trường ĐHSP Thái Nguyên đã quan tâm giúp đỡ, tạo điều kiện thuận lợi
cho tôi thực hiện kế hoạch học tập của mình.
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, 19.8.2010
Nguyễn Thị Hồng Phượng
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
4
Chƣơng 1
TỔNG QUAN VỀ TRÒ CHƠI THÁP HÀ NỘI
§1. Lịch sử trò chơi Tháp Hà Nội
Bìa cuốn sách của E. Lucas xuất bản tại Paris năm 1895, trong đó có 4
trang (179-183) viết về trò chơi Tháp Hà Nội.
1.1 Truyền thuyết
Theo một truyền thuyết, liên tục suốt ngày đêm, các nhà tu hành của tòa
tháp Brahma trong thành Bernares (Ấn Độ) phải chuyển 64 đĩa vàng từ một
cọc này sang cọc khác của tòa tháp. Các đĩa có kích thước khác nhau và lúc
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
5
đầu được đặt trên một trong ba cọc của tòa tháp theo thứ tự đĩa nhỏ ở trên, đĩa
lớn ở dưới. Đĩa trên cùng được chuyển sang cọc khác, mỗi lần chỉ di chuyển
một đĩa. Do tính dễ vỡ, đĩa lớn không được đặt lên trên đĩa nhỏ. Trong quá
trình di chuyển, có thể đặt đĩa lên một cọc trung gian. Khi công việc hoàn
thành, tòa tháp sẽ đổ, và lúc đó cũng là thời điểm kết thúc của vũ trụ với một
tiếng nổ khủng khiếp!
1.2 Lịch sử
Dựa trên truyền thuyết về tháp Brahma, và có thể, theo truyền thuyết về sự
tồn tại những ngôi tháp cổ đồng dạng với tháp Brahma trong vùng đất phật giáo
linh thiêng gần Hà Nội (Bắc Ninh?, Vĩnh Phúc?), Việt Nam, nhà toán học
người Pháp Edouard Lucas (quê ở Amiens) đã phổ biến Trò chơi Tháp Hà Nội
ở Paris năm 1883 với tên giả là giáo sư N. Claus. Năm 1884, Parvile trong [14]
đã trình bày lời giải bài toán Tháp Hà Nội và tiết lộ giáo sư N. Claus chính là
tên giả của nhà nghiên cứu lí thuyết số nổi tiếng Eduard Lucas.
Trên bìa của hộp đựng trò chơi sản xuất năm 1883 và trong cuốn sách
L’Arithméique Amusante, xuất bản tại Paris năm 1895 (sau khi Ông mất), chính
Edouard Lucas đã viết ([12], trang 179): “…la Tour d’Hanoi, véritable casse-
tête annamite…” (Tháp Hà Nội, một trò chơi trí tuệ của người Annam), nhưng
tại sao ông lại gọi trò chơi này là trò chơi Tháp Hà Nội thì chưa có câu trả lời
thật rõ ràng.
Rất có thể (theo Edouard Lucas), trò chơi Tháp Hà Nội “đã xuất hiện ở Đông
Á từ thế kỷ 19 hoặc trước đó. Các đĩa được làm bằng sứ ở Trung Quốc, Nhật Bản
và Đông Kinh (Bắc Kì, Việt Nam)”. Tuy nhiên, cho tới nay, các nhà lịch sử có lẽ
vẫn chưa tìm thấy các đĩa sứ của trò chơi tháp Hà Nội tại châu Á. Những hộp đựng
trò chơi cũ nhất vẫn là hộp đựng các đĩa sản xuất tại Pháp năm 1883.
Theo David G. Pool [15], trích dẫn theo P. J. Hilton [10], sự tồn tại
những ngôi tháp gần Hà Nội (Việt Nam) là lí do để E. Lucas đã đặt tên cho
trò chơi của mình là Trò chơi Tháp Hà Nội.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
6
Có một giả định rằng: “nhà toán học đến thăm Việt Nam, ngắm cảnh Hồ
Gươm và bị quyến rũ bởi vẻ đẹp của Tháp Rùa nên đã đặt tên là Bài toán
Tháp Hà Nội”. Nếu có tư liệu khẳng định nhà toán học nổi tiếng E. Lucas đã
đến Hà Nội từ trước năm 1883 (Pháp chiếm Hà Nội năm 1882) thì thật là thú
vị. Tuy nhiên, lúc đó E. Lucas đã ra khỏi quân đội và đang dạy học, vì vậy ít
có khả năng ông đã đến Hà Nội.
Cũng có lẽ Cột cờ Hà Nội đã gợi ý cho E.
Lucas đặt tên trò chơi của mình là Tháp Hà
Nội: “The Flag Tower of Hanoi may have
served as the inspiration for the name”. Cột cờ
Hà Nội có đáy gồm ba khối vuông xây chồng
lên nhau. Trò chơi Tháp Hà Nội đơn giản nhất
cũng gồm ba đĩa tròn xếp chồng lên nhau. Cột
cờ Hà Nội xây năm 1805-1812, Tháp Rùa xây
năm 1886, trò chơi Tháp Hà Nội xuất hiện ở
Paris 1883.
Có thể Pháp chiếm Hà Nội là đề tài thời sự
ở Paris vào những năm 1882-1883, và điều này
gợi ý E. Lucas đặt tên cho trò chơi của mình là
Tháp Hà Nội?
Trò chơi Tháp Hà Nội vừa được phổ biến
đã được đón nhận rộng rãi vì sự đơn giản và hấp
dẫn của nó. Mặc dù chưa có câu trả lời rõ ràng
về lí do E. Lucas đặt tên cho trò chơi của mình
là trò chơi Tháp Hà Nội, người Việt Nam vẫn có
thể tự hào và cần quan tâm về trò chơi này.
Dưới đây là bìa của hộp đựng trò chơi
Tháp Hà Nội sản xuất lần đầu tiên tại Paris năm
1883 và hai tờ hướng dẫn qui tắc chơi. Đây là
những tư liệu quí về lịch sử trò chơi.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
7
Bìa của hộp đựng trò chơi Tháp Hà Nội đƣợc bán lần đầu tại Paris
năm 1883.
Trên tờ bìa này có một hình tháp 10 tầng, cây tre, người Annam (Việt
Nam) và ghi rõ: La Tour d’Hanoϊ, Veritable casse-téte Annamite Jeu, rapporté
du Tonkin par le professeur N. Claus (de Siam) du college Mandarin Li-Sou-
Sian (Tháp Hà Nội, Trò chơi trí tuệ của người Annam, được giới thiệu bởi
giáo sư N. Claus (ở Siam), trường trung học Li-Sou-Sian).
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
8
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
9
Bản dịch tờ hướng dẫn thứ nhất giới thiệu trò chơi Tháp Hà Nội được
sản xuất lần đầu tiên tại Paris:
THÁP HÀ NỘI
Trò chơi trí tuệ của người Annam
Trò chơi được đem về từ Đông Kinh
bởi Giáo sư N. CLAUS (DE SIAM)
Trường Cao đẳng Li-Sou-Stian!
Trò chơi này được tìm thấy, lần đầu, trong cuốn sách được minh họa
Quan thoại FER-FER-TAM-TAM, đang được xuất bản, trong tương lai gần,
bởi chính phủ Trung Hoa. Tháp Hà Nội có các đĩa, nhỏ dần, có số lượng thay
đổi, mà chúng tôi làm bằng gỗ, có lỗ ở giữa. Ở Nhật Bản, Trung Quốc, và ở
Đông Kinh, chúng được làm bằng sứ.
Trò chơi có mục đích là dỡ bỏ từng đĩa, và đặt vào cột bên cạnh, theo
các quy tắc nhất định. Vui và bổ ích, dễ học và dễ chơi trong thành phố, ngoài
nông thôn, trên chuyến du lịch, nó được tạo ra để mang đến kiến thức khoa
học, giống mọi trò chơi kỳ thú và mới lạ của giáo sư N. CLAUS (của SIAM).
Chúng tôi trao giải thưởng 1000 franc, 100 nghìn franc, một triệu franc,
và nhiều hơn, cho ai hoàn thành, bằng việc dùng tay di chuyển tháp Hà Nội
với 64 đĩa, theo quy tắc của trò chơi. Chúng tôi nói ngay là cần số lần di
chuyển là:
18 446 744 073 709 551 615, nhiều hơn năm tỷ thế kỷ!
Theo một truyền thuyết Ấn Độ, những người Brahmin đã tiếp nối nhau
trong một thời gian dài để thay đổi Đền Bernares, di chuyển 64 đĩa vàng của
Tòa tháp Brahma. Khi công việc hoàn thành, Tòa tháp và Brahmin sẽ đổ, và
lúc đó là thời điểm kết thúc của vũ trụ!
PARIS, BẮC KINH, TOKYO và SÀI GÒN
Trong các hiệu sách và tiểu thuyết
1883
Bản quyền đã giữ.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
10
Bản dịch tờ hướng dẫn trò chơi Tháp Hà Nội được sản xuất lần đầu tại Paris:
Luật chơi và cách chơi trò chơi THÁP HÀ NỘI
Đế đặt nằm ngang; các cọc thẳng đứng. Các đĩa đặt 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 luật sau:
I. Sau mỗi lần chuyển, các đĩa đều nằm trên một, hai, hoặc ba cọc, theo
thứ tự từ lớn đến nhỏ từ thấp đến cao.
II. Đĩa trên cùng của một trong ba cọc được đặt vào cọc trống.
III. Đĩa trên cùng của một trong ba cọc đĩa đượ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 đó.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
11
Trò chơi có thể dễ dàng tự khám phá, bằng việc giải quyết dần từ 3, 4, và 5 đĩa.
Trò chơi luôn giải được và đòi hỏi thời gian chơi lâu khoảng gấp đôi mỗi
khi cho thêm một đĩa vào Tòa tháp. Bất kì ai giải được cho tám đĩa, ví dụ,
chuyển các đĩa từ cọc 1 sang cọc 2, cũng sẽ biết cách giải cho chín đĩa. Chỉ
cần chuyển tám đĩa sang cọc 3, rồi chuyển đĩa thứ chín sang cọc 2, và mang
tám đĩa từ cọc 3 về cọc 2. Bây giờ, khi thêm một đĩa vào trò chơi, tổng số di
chuyển tăng gấp đôi, cộng với một, so với trước.
Với tháp hai đĩa ba lần chuyển là đủ Số đĩa Số lần chuyển
Ba đĩa 7 lần 6 đĩa 63 lần
Bốn đĩa 15 lần 7 đĩa 127 lần
Năm đĩa 31 lần 8 đĩa 255 lần
Với tốc độ một di chuyển mất một giây, cần bốn phút để chuyển tám đĩa.
Các biến thể của trò chơi: Có thể thay đổi đến vô cùng điều kiện của
bài toán tháp Hà Nội như sau. Khi bắt đầu, xếp các đĩa theo thứ tự bất kỳ lên
một, hai, hay cả ba cọc. Sau đó cần xây dựng lại tòa tháp trên một cọc định
trước. Với 64 đĩa, số lần di chuyển là khổng lồ, số này dài 50 chữ số. Xem
thêm chi tiết trong chương nói về Baguenaudier (trò chơi tháo vòng) ở:
TOÁN HỌC GIẢI TRÍ
bởi Mr. Édouard Lucas
giáo sư toán học cao cấp tại Lycée Saint-Louis
Hai tập nhỏ, trong hai màu
Paris, 1883, bởi GAUTHER-VILLARS,
máy in của Académie des Sciences và Ecole Polytechnique
Trên mạng Internet có rất nhiều chương trình hiển thị minh họa và hướng
dẫn trò chơi Tháp Hà Nội (với ba cọc). Ngoài ra, có thể tìm mua trò chơi
Tháp Hà Nội làm bằng gỗ hoặc sứ tại các cửa hàng Việt Nam hoặc nước
ngoài để giải trí.
Dưới đây chúng tôi chụp lại bốn trang (179-183) viết về Tháp Hà Nội
trong cuốn sách Số học vui của E.Lucas xuất bản năm 1895 (sau khi Ông mất)
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
12
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
13
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
14
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
15
§2. Sơ lƣợc về bài toán tháp Hà Nội tổng quát, các bài toán cải biên
và các vấn đề toán học liên quan
Trò chơi Tháp Hà Nội ngày càng được các nhà toán học quan tâm, Với
sự phát triển của tin học, bài toán tháp Hà Nội lại càng thu hút sự chú ý của
các nhà toán-tin học. Nó trở thành ví dụ điển hình về phương pháp giải đệ qui
và lập trình căn bản.
2.1 Bài toán Tháp Hà Nội tổng quát
Bài toán Tháp Hà Nội với ba cọc và
n
đĩa có thể giải được dễ dàng theo
thuật giải đệ qui (xem Chương 2). Hơn nữa, có thể biết chính xác số lần cần
chuyển tối ưu cho bài toán với
n
đĩa là 2 1n lần. Vì vậy nó thường được
dùng làm thí dụ kinh điển về lập trình căn bản và thuật giải đệ qui cũng như
minh họa về độ phức tạp tính toán (thời gian mũ) của bài toán với thuật giải
đơn giản và tối ưu.
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.
Theo một số tài liệu, 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. Năm 1902-
1903 Henry Ernest Dudeney đã viết về bài toán Tháp Hà Nội với bốn cọc
trong hai bài báo. Trong hai trang đầu tiên của cuốn sách nổi tiếng của Ông
The Canterbury Puzzles (xem [7]) ông đã viết về bài toán này (và gọi là
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
16
Reve's puzzle) với số cọc là 4 và số đĩa là 8, 10 hoặc 21, chỉ có khác là Ông đã
thay các đĩa bằng các quân cờ. 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ố ( 1)
2
k
k k
t
,
1,2,...k
Giả sử
( 1)
2
k
k k
t
là số tam giác thứ
k
và giả 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ố rằng
4 4 12 2 1
k
k kM t M t
,
4 1 1M
. Từ đây ta có
4 3 5M
;
4 6 17M
,
4 10 49M
,… 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
8n
.
Bài toán tổng quát với
3p
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 [17]). Lời giải của bài toán này đã được Stewart [19] và
Frame [9] trình bày cũng 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 thuật toán của hai ông hoặc các thuật toán cải biên
tương tự là thuật toán Frame- Stewart. Thuật toán Frame-Stewart cùng các
thuật toán tương đương sẽ được trình bày trong Chương 3 và Chương 4.
Thuật toán Stewart (1941)
Thuật toán truy hồi do Stewart đề xuất 1941, được coi là presumably-
optimal solution (lời giải giả định là tối ưu) cho bài toán bốn cọc (hoặc nhiều
hơn). Giả sử
n
là số đĩa và
p
là số cọc. Để 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.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
17
Bước 1. Với số
l
,
1 l n
, chuyển
l
đĩa trên cùng tới cọc 1, mất
( )pS l
lần
chuyển. Sử dụng tất cả các cọc trong khi chuyển.
Bước 2. Giữ nguyên cọc 1 chứa
l
đĩa trên cùng. Chuyển
n l
đĩa tới cọc
đích, sử dụng
1p
cọc còn lại (vì cọc 1 đang được dùng để chứa
l
đĩa nhỏ
nhất), mất
1( )pS n l
lần chuyển.
Bước 3. Cuối cùng, chuyển
l
đĩa trên cùng từ cọc 1 tới cọc đích, mất
( )pS l
lần chuyển nữa. Được phép sử dụng tất cả các cọc.
Như vậy, tổng cộng cần
12 ( ) ( )p pS l S 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 Stewart nói trên (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
1 1
1
2 ( ) ( ) min 2 ( ) ( )p p p p
l n
S i S n i S l S n l
. (1.1)
Nói cách khác, các giá trị
i
thỏa mãn (1.1) là số bước chuyển tối ưu trong lớp
các thuật toán đề nghị.
Stewart và Frame cũng đã chứng minh rằng, nếu
n
là số tam giác
kn t
, thì
cách chọn tối ưu nhất cho
l
là
l k
, trong khi đó nếu
1k kt n t
thì cả hai
giá trị
1k
và
k
đều là cách chọn tối ưu cho
l
. Như vậy, Stewart và Frame
đã đề xuất thuật toán hiển cho bài toán Tháp Hà Nội với bốn cọc. Thuật toán
này trùng với lời giải của Dudeney trong các trường hợp riêng nêu trên. Từ
đây ta cũng có nhận xét 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.
Otto Dunkel, tổng biên tập của tạp chí The Americal Mathematical
Montly khi cho đăng hai lời giải trên đã 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 rằng trong số tất cả các giá trị có thể của
l
theo thuật
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
18
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. Tuy
nhiên hai ông chưa chứng minh rằng 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à 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 (xem
trích dẫn đầy đủ trong [5]). 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 và Stewart (xem [11]). 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ó thì lại trở thành khó
hơn rất nhiều do xuất hiện những bài toán mới.
Việc chưa chứng minh được lời giải 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).
Giả thuyết Frame-Stewart (chưa được chứng minh) nói rằng thuật toán
Frame-Stewart luôn cho lời giải tối ưu. Tính tối ưu của thuật toán Frame-
Stewart đã được kiểm tra trên máy tính cho số đĩa nhỏ hơn 30.
Theo Donald Knuth, nhà tin học nổi tiếng thế giới đã gọi giả thuyết này là
“giả thuyết Frame” và Ông đã viết: “Tôi nghi ngờ rằng ai đó đã giải được giả
thuyết này. Nó thật sự khó”.
2.2. Bài toán Tháp Hà Nội cải biên
Bài toán Tháp Hà Nội có khá nhiều cải biên rất thú vị. Mỗi qui tắc chơi
mới lại làm trò chơi Tháp Hà Nội thêm phong phú và lại xuất hiện thêm nhiều
vấn đề toán học mới. Dứới đây chúng tôi sơ lược liệt kê một số cải biên của
trò chơi Tháp Hà Nội.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
19
2.2.1 Bài toán Tháp Hà Nội với vị trí bất kì
Bài toán Tháp Hà Nội với ba cọc và
n
đĩa đã được E. Lucas cải biên ngay
khi phổ biến cách chơi năm 1883. Đó là trò chơi Tháp Hà Nội với vị trí bất kì:
có thể coi vị trí của đĩa là bất kì (không nhất thiết phải tất cả các đĩa nằm trên
một cọc, mà có thể ở trên các cọc khác nhau, miễn là tuân theo qui tắc “đĩa ở
trên nhỏ, đĩa nằm dưới to”). Bài toán đã được Hinz nghiên cứu khá kĩ.
2.2.2 Bài toán Tháp Hà Nội quay vòng (cyclic moving)
Có thể đóng ba cọc trên ba đỉnh của một tam giác và chuyển động các
đĩa theo chiều quay của kim đồng hồ hoặc ngược lại.
2.2.2 Bài toán Tháp Hà Nội song song (parallel moving)
Có thể chuyển các đĩa từ cọc này sang cọc khác trong cùng một thời gian.
2.2.2 Bài toán Tháp Hà Nội hỗn hợp
Kết hợp giữa bài toán Tháp Hà Nội quay vòng với chuyển động song song.
Các cải biên của bài toán Tháp Hà Nội đặt ra những bài toán mới thú vị,
có thể nói khó không kém bài toán ban đầu.
2.3 Một số vấn đề toán học liên quan đến bài toán Tháp Hà Nội
Nhiều bài toán của toán học và tin học thú vị xuất hiện trong trò chơi
Tháp Hà Nội. Dưới đây liệt kê một vài vấn đề chính.
2.3.1 Đồ thị Hà Nội
Các nhà toán học đã phát hiện ra rằng Tháp Hà Nội có cùng bản chất với
bài toán tìm đường Hamilton (Hamilton Path) trên một hình giả phương cấp
n
(
n
-Hypercube), một bài toán cũng rất nổi tiếng.
Nhà toán học D.G. Poole đã phát hiện ra Lược đồ Hà Nội -một tam giác
có các đỉnh tương ứng với các cách sắp xếp đĩa trong Tháp Hà Nội, từ đó tìm
ra những liên hệ lý thú giữa Tam giác Pascal với Lược đồ Hà Nội. Liên hệ
này đã được công bố trong một công trình mang một cái tên đầy liên tưởng:
Pascal biết Hà Nội (Pascal knows Hanoi, [15]).
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
20
Có thể biểu diễn trò chơi dưới dạng một đồ thị không có hướng đơn
giản. Các nút chính là các phân bố của các đĩa và các cạnh chính là các
chuyển động. Nhưng, thậm chí được thực hiện một cách khéo léo thuật toán
của Dijkstra để tìm một (hoặc tất cả) các đường ngắn nhất chuyển đĩa từ một
cọc này sang cọc khác trên máy tính nhanh nhất hiện nay, thuật toán này
không cho một con đường hữu hiệu tính nghiệm của bài toán với số lượng đĩa
lớn. Chương trình này đỏi hỏi nhiều thời gian và bộ nhớ hơn là có thể. Do đó,
thậm chí có thuật toán, ta vẫn không thể biết cần bao nhiêu lần chuyển đĩa mà
lời giải tối ưu đòi hỏi và có bao nhiêu lời giải tối ưu cho bài toán, thí dụ, với
1000 đĩa và 10 cọc.
Rất nhiều nghiên cứu bài toán tháp Hà Nội với tên gọi Đồ thị Hà Nội.
2.3.1 Thuật toán giải trò chơi Tháp Hà Nội
Trò chơi Tháp Hà Nội và các cải biên của nó đặt ra những câu hỏi khá
thú vị: Tìm thuật toán tối ưu giải quyết trò chơi, đánh giá độ phức tạp của
thuật toán,… Một thuật toán, có lẽ là quan trọng nhất, được trình bày trong
luận văn này (Chương 3 và 4), đó là thuật toán Frame-Stewart và các cải biên
của nó.
2.4 Bài toán Tháp Hà Nội trong y học và giáo dục
Bài toán Tháp Hà Nội thường được dùng trong nghiên cứu tâm lý về
cách giải quyết vấn đề (problem solving). Cũng có những biến thể khác của
bài toán này gọi là Tháp Luân Đôn (Tower of London) dùng trong chuẩn đoán
và điều trị thần kinh tâm lý đối với các chức năng thực hành. Những vấn đề
này không được đề cập trong luận văn này
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
21
Chƣơng 2
TRÒ CHƠI THÁP HÀ NỘI
§1 Trò chơi tháp Hà Nội và thuật giải đệ qui
Luật chơi của trò chơi Tháp Hà Nội đã được qui định rõ trong tờ hướng
dẫn thứ hai khi Trò chơi Tháp Hà Nội được phổ biến lần đầu tại Paris năm
1883 (xem Chương 1). Trong cuốn sách của mình, E. Lucas mô tả trò chơi
gồm 8 đĩa ([12], trang 180-181). Dưới đây trình bày lời giải bài toán Tháp Hà
Nội với ba cọc và số đĩa
n
bất kì.
Bài toán 1
Có
n
đĩa kích thước nhỏ dần xếp chồng lên nhau trên một cọc (được gọi
là cọc nguồn, cọc A), đĩa lớn ở dưới, đĩa nhỏ ở trên. Ngoài cọc nguồn còn có
hai cọc trống khác, được gọi là cọc đích và cọc trung gian (cọc B và cọc C).
Hãy chuyển các đĩa này từ cọc nguồn sang cọc đích (một trong hai cọc B
hoặc C) tuân theo hai qui tắc sau:
Qui tắc 1. Mỗi lần chỉ được chuyển một đĩa từ cọc này sang cọc khác và
được dùng cọc thứ ba làm cọc trung chuyển.
Qui tắc 2. Không được xếp đĩa lớn nằm trên đĩa nhỏ.
Giải
Trước tiên ta xét bài toán với 1, 2, 3 đĩa.
Bài toán với 1 đĩa: chỉ cần 1 lần chuyển (Hình 1)
Lần 1: Chuyển đĩa từ cọc A sang cọc C.
Hình 1
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
22
Bài toán với 2 đĩa: cần 3 lần chuyển (Hình 2)
Lần 1: Chuyển đĩa số 1 từ cọc A sang cọc B .
Lần 2: Chuyển đĩa số 2 từ cọc A sang cọc C.
Lần 3: Chuyển đĩa số 1 từ cọc B sang cọc C (lên trên đĩa số 2). Kết thúc.
Hình 2
Bài toán với 3 đĩa: cần 7 lần chuyển (Hình 3)
Hai đĩa đầu làm như trường hợp 2 đĩa ở trên (ba lần chuyển):
Lần 1: Chuyển đĩa số 1 từ cọc A sang cọc C.
Lần 2: Chuyển đĩa số 2 từ cọc A sang cọc B.
Lần 3: Chuyển đĩa số 1 từ cọc C sang cọc B (lên trên đĩa số 2). Cọc C trống.
Lần 4: Chuyển đĩa số 3 từ cọc A sang cọc C. Cọc A trống.
Lại chuyển hai đĩa đầu từ cọc B sang cọc C (ba lần chuyển):
Lần 5: Chuyển đĩa số 1 từ cọc B sang cọc A.
Lần 6: Chuyển đĩa số 2 từ cọc B sang cọc C (chồng lên trên đĩa số 3).
Lần 7: Chuyển đĩa số 1 từ cọc B sang cọc C (chồng lên đĩa số 2). Kết thúc.
Hình 3
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
23
Bài toán với 4 đĩa: cần 15 lần chuyển (Hình 4)
Với
4n
ta minh họa các bước chuyển đĩa như Hình 4 dưới đây.
Dòng 1 cột 1 biểu thị cả bốn đĩa nằm trên cọc A.
Hình 4
Trước tiên ta giải bài toán ba cọc (mất 7 lần chuyển):
Lần 1 (dòng 2 cột 1): Chuyển đĩa trên cùng (số 1) từ cọc A sang cọc C.
Lần 2 (dòng 3 cột 1): Chuyển đĩa số 2 từ cọc A sang cọc B.
Lần 3 (dòng 4 cột 1): Chuyển đĩa số 1 từ cọc C sang cọc B (cọc C trống).
Lần 4 (dòng 5 cột 1): Chuyển đĩa số 3 từ cọc A sang cọc B.
Lần 5 (dòng 6 cột 1): Chuyển đĩa số 1 từ cọc C sang cọc A.
Lần 6 (dòng 7 cột 1): Chuyển đĩa số 2 từ cọc C sang cọc B (cọc C trống).
Lần 7 (dòng 8 cột 1): Chuyển đĩa số 1 từ cọc A sang cọc B.
Như vậy, sau 7 lần chuyển, bài toán với 3 cọc và 3 đĩa đã giải xong.
Lần 8 (dòng 1 cột 2): Chuyển đĩa số 4 từ cọc A sang cọc C.
Tiếp theo lại giải bài toán ba cọc: Chuyển ba đĩa từ cọc B sang cọc C (mất
thêm 7 lần chuyển):
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
24
Lần 9 (dòng 2 cột 2): Chuyển đĩa số 1 từ cọc B sang cọc C.
Lần 10 (dòng 3 cột 2): Chuyển đĩa số 2 từ cọc B sang cọc A.
Lần 11 (dòng 4 cột 2): Chuyển đĩa số 1 từ cọc C sang cọc A.
Lần 12 (dòng 5 cột 2): Chuyển đĩa số 3 từ cọc B sang C (cọc B trống).
Lần 13 (dòng 6 cột 2): Chuyển đĩa số 1 từ cọc A sang cọc B.
Lần 14 (dòng 7 cột 2): Chuyển đĩa số 2 từ cọc A sang C (cọc A trống).
Lần 15 (dòng 8 cột 2): Chuyển đĩa 1 từ cọc B sang cọc C (cọc B trống).
Tổng cộng sau 15 lần chuyển các đĩa nằm trên cọc C.
Từ các trường hợp riêng trên, ta đi tới thuật giải tổng quát cho bài toán Tháp
Hà Nội với ba cọc và số đĩa
n
bất kì như sau.
Thuật toán
Trước tiên ta giải bài toán Tháp Hà Nội cho ba đĩa:
Chuyển đĩa số 1 từ cọc A sang cọc B; chuyển đĩa số 2 sang cọc C; chuyển đĩa
số 1 từ cọc B sang cọc C. Khi ấy đĩa số 1 nằm trên đĩa số 2. Vậy ta hiện đã có
hai đĩa nằm trên cọc C, cọc B hiện thời trống. Chuyển đĩa số 3 từ cọc A sang
cọc B. 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 B.
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ứ 1 (trên cọc B hoặc cọc C, một trong hai cọc đó trống), ta
chuyển đĩa thứ
1k
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 lên đĩa thứ
1k
để được tháp với
1k
đĩa.
Như vậy, khi đã xây dựng xong tháp thứ
k
thì ta cũng dễ dàng xây dựng
được tháp thứ
1k
sau khi chuyển đĩa thứ
1k
sang cọc trống.
Phươ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
1n
đĩ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 là một số hữu hạn các bước, vì đến một lúc nào đó thuật giải sẽ được áp
dụng cho
1n
. Bước này chỉ đơn giản là chuyển một đĩa duy nhất từ cọc A
sang cọc B.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
25
Thuật giải đệ qui bài toán tháp Hà Nội có thể phát biểu nhƣ sau.
Nếu
1n
hoặc
2n
thì bài toán giải được ngay.
Giả sử đã biết cách giải bài toán với
1n
đĩa. Giải bài toán cho
n
đĩa
như sau:
Chuyển
1n
đĩa trên cùng từ cọc A sang cọc B (theo giả thiết đã biết
cách giải).
Chuyển đĩa thứ n (dưới cùng trên cọc A) từ cọc A sang cọc C (Bài toán 1 đĩa).
Chuyển
1n
đĩa từ cọc B sang cọc C (theo giả thiết đã biết cách giải).
Như vậy, lời giải bài toán rất đơn giản: giải bài toán
n
đĩa được đưa về
bài toán
1n
đĩa và bài toán một đĩa.
Thuật giải đệ qui (có quan hệ mật thiết với phép qui nạp và công thức
truy hồi trong toán học) được áp dụng để giải rất nhiều bài toán. Thí dụ, bài
toán Josephus; Bài toán tính số Fibonacci;…
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
1n
đĩ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
1n
đĩa từ cọc
B sang cọc C. Ta có:
(1) 1L
;
(2) 3L
;
( ) ( 1) (1) ( 1) 2 ( 1) 1L n L n L L n L n
.
Theo qui nạp, ta dễ dàng chứng minh được
( ) 2 1nL n
.
Một điều thú vị là dãy
( ) 2 1nL n
chính là dãy số Merssen.
Thuật toán đệ qui giải bài toán Tháp Hà Nội nêu trên là thuật toán tối ưu (số
lần chuyển đĩa ít nhất). Theo công thức trên, nó là thuật toán có thời gian mũ.
Giả sử mỗi lần chuyển 1 đĩa hết thời gian 1 giây. Nếu có 64 đĩa thì thời gian
chuyển hết 64 đĩa là
642 1 18446744073703551615
giây
50 tỉ năm.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
26
Nếu sử dụng máy tính thực hiện chương trình đệ qui với tốc độ 1 triệu
phép toán/giây thì thời gian chạy máy là:
642 1 :1000000 50 000
năm.
Như vậy bài toán Tháp Hà Nội, mặc dù có thuật giải đơn giản và tối ưu,
nhưng không giải được trong thời gian thực.
Ta có thể minh họa bài toán theo cách khác như sau.
Cho ba cột và
n
đĩa. Kí hiệu dãy
i kS a
,
1,...,i n
là chỉ số của các
đĩa cần phải chuyển tại bước thứ
k
. Dãy
i kS a
này được xây dựng theo
thuật giải đệ qui đơn giản bắt đầu với
1 1S
cho một đĩa và theo công thức
truy hồi
1 1, ,n n nS S n S
.
Bảng dưới đây chỉ ra cách xây dựng dãy
nS
cho các giá trị
1,2,3,4n
.
n
nS
1 1
2 1,2,1
3 1,2,1,3,1,2,1
4 1,2,1,3,1,2,1,4,1,2,1,3,1,2,1
Ta thấy dãy số
nS
có tính chất đối xứng và lồng nhau. Số ở giữa bao giờ
cũng là
n
, chính là số đĩa. Dãy
1nS
lại có số ở giữa chính là
1n
. Các số
trong dãy
nS
(nhận giá trị từ 1 đến
n
) tương ứng với chỉ số của đĩa được
chuyển.
§2 Giải bài toán tháp Hà Nội bằng biểu diễn trong hệ đếm cơ số 2
Bằng cách chia cho 2, một số tự nhiên bất kì có thể biểu diễn dưới dạng
tổng các lũy thừa của 2 với các hệ số bằng 1 hoặc 0. Thí dụ,
10 9 8 7 6 4 3
10 9 8 7 6 5 4 3 2 1 0
2010 2 2 2 2 2 2 2 2
1.2 1.2 1.2 1.2 1.2 0.2 1.2 1.2 0.2 1.2 0.2 .
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
27
Như vậy, nếu chọn 2 làm cơ số trong hệ đếm cơ số 2 thì mọi số tự nhiên
đều có thể biểu diễn dưới dạng hệ đếm cơ số 2 với các hệ số 1 và 0. Các hệ số
trong phân tích số đã cho dưới dạng lũy thừa của 2 được gọi là các chữ số của
nó và số đã cho được biểu diễn trong hệ đếm theo vị trí, tương tự như trong hệ
đếm cơ số 10. Thí dụ (chỉ số dưới biểu thị cơ số):
10 22010 =11111011010 11111011010
.
Sau này, để cho gọn, ta sẽ không viết chỉ số cơ số 2 dưới số đã cho.
Ta có thể sử dụng hệ đếm cơ số 2 để giải bài toán Tháp Hà Nội cho ba cọc với
n
đĩa như sau.
Để dễ hiểu, trước tiên ta xem xét trường hợp bài toán Tháp Hà Nội với
ba cọc và hai, ba, bốn đĩa hoặc năm đĩa.
Giải bài toán Tháp Hà Nội với hai đĩa nhờ hệ đếm cơ số 2
Bước 0: Hai đĩa ở cọc A, kí hiệu là
2
00
.
Bước 1: Chuyển đĩa số 1 từ cọc A sang cọc trống B, kí hiệu là
2
01
.
Chữ số 1 cuối cùng biểu thị đĩa trên cùng đã được chuyển (
10201 1
).
Bước 2: Chuyển đĩa số 2 từ cọc A sang cọc trống C, kí hiệu là
2
10
.
Chữ số 1 thứ hai biểu thị đĩa thứ hai đã được chuyển (
10210 2
).
Hai chữ số 1 và 0 biểu thị hai đĩa ở hai cọc khác nhau.
Bước 3: Chuyển đĩa số 1 từ cọc B sang cọc C, kí hiệu là
2
11
. Chữ số 1
thứ hai biểu thị đĩa thứ hai đã được chuyển. Hai chữ số 1 và 1 biểu thị hai đĩa
ở trên cùng một cọc (đĩa thứ hai chồng lên đĩa thứ nhất ,
10211 3
).
Giải bài toán Tháp Hà Nội với ba đĩa nhờ hệ đếm cơ số 2
Bước 0: Ba đĩa ở cọc A, kí hiệu là
2
000
.
Bước 1: Chuyển đĩa số 1 từ cọc A sang cọc trống C, kí hiệu là
102001 1
.
Chữ số 1 ở vị trí thứ nhất (từ bên phải) biểu thị đĩa trên cùng đã được
chuyển.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
28
Bước 2: Chuyển đĩa số 2 từ cọc A sang cọc trống B, kí hiệu là
2
010
.
Chữ số 1 ở vị trí thứ hai biểu thị đĩa thứ hai đã được chuyển
(
10210 2
).
Ba chữ số 0, 1, 0 biểu thị ba đĩa ở ba cọc khác nhau.
Bước 3: Chuyển đĩa số 1 từ cọc C sang cọc B, kí hiệu là
2
011
(
102011 3
). Chữ số 1 ở vị trí thứ nhất (khác với số 0 trong
2
010
ở
bước 2) biểu thị đĩa số 1 đã được chuyển. Ba chữ số 0, 1, 1 biểu thị hai đĩa
nhỏ ở trên cùng cọc C (đĩa thứ hai chồng lên đĩa thứ nhất), đĩa lớn ở cọc khác
(cọc A). Cọc C trống.
Bước 4: Chuyển đĩa số 3 từ cọc A sang cọc C, kí hiệu là
2
100
(
102100 4
). Chữ số 1 thứ ba biểu thị đĩa số 3 đã được chuyển. Ba
chữ số 1, 0, 0 biểu thị hai đĩa nhỏ ở trên cùng một cọc B (đĩa thứ hai chồng
lên đĩa thứ nhất) và không chuyển, đĩa lớn ở cọc khác (cọc C). Cọc A trống.
Bước 5: Chuyển đĩa số 1 từ cọc B sang cọc A, kí hiệu là
2
101
(
102101 5
). Chữ số 1 thứ ba (khác số 0 trong bước 4) biểu thị đĩa số
3 đã được chuyển.
Ba chữ số 1, 0, 1 khác nhau biểu thị ba đĩa ở ba cọc khác nhau.
Bước 6: Chuyển đĩa số 2 từ cọc B sang cọc C, kí hiệu là
2
110
(
102110 6
). Chữ số 1 thứ n (khác số 0 trong bước 4) biểu thị đĩa số 3
đã được chuyển.
Ba chữ số 1, 0, 1 khác nhau biểu thị ba đĩa ở ba cọc khác nhau.
Lần 6: Chuyển đĩa 2 từ cọc B sang cọc C (chồng lên trên đĩa 3).
Lần 7: Chuyển đĩa 1 từ cọc B sang cọc C (chồng lên đĩa 2). Kết thúc.
Giải bài toán Tháp Hà Nội với bốn đĩa nhờ hệ đếm cơ số 2
Số lần chuyển cần thiết trong bài toán ba cọc với bốn đĩa là 42 1 15 .
Kí hiệu các cọc là cọc A (cọc nguồn chứa 4 đĩa), cọc B và cọc C, các đĩa là 1,
2, 3, 4 theo thứ tự từ nhỏ đến lớn.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
29
Biểu thị vi trí ban đầu, khi tất cả bốn đĩa ở cọc A là số
2
0000
có bốn
chữ số 0 .
Bước 1: Chuyển đĩa số 1 từ cọc A sang cọc trống C, kí hiệu là
2
0001
.
Số 1 ở vị trí cuối cùng biểu thị đĩa số 1 được chuyển (sang cọc trống C).
Bước 2: Chuyển đĩa số 2 từ cọc A sang cọc trống B, kí hiệu bởi
2
0010
. Số 1 ở vị trí thứ hai (tính từ bên phải) biểu thị đĩa số 2 được chuyển
(sang cọc trống B). Hai số 10 ở vị trí cuối cùng biểu thị hai đĩa được đặt lên
hai cọc khác nhau.
Bước 3: Chuyển đĩa số 1 từ cọc C sang cọc B, kí hiệu bởi
2
0011
. Cọc
C trống. Số
2
0010
ở bước trên trở thành số
2
0011
, biểu thị đĩa số 1 đã
được chuyển.
Hai số 11 cuối cùng biểu thị đĩa 1 được đặt chồng lên đĩa số 2 trên cọc B.
Bước 4: Chuyển đĩa số 3 từ cọc A sang cọc trống C, kí hiệu bởi
2
0100
. Cọc A trống. Số 1 ở vị trí thứ ba biểu thị đĩa số 3 đã được chuyển.
Ba số 100 ở vị trí cuối cùng biểu thị đĩa số 3 không nằm trên cùng cọc với hai
đĩa đầu tiên.
Bước 5: Đưa đĩa số 1 từ cọc B sang cọc A, kí hiệu bởi
2
0101
.
Từ
2
0100
đổi thành
2
0101
biểu thị đĩa số 1 đã được chuyển.
Ba số 101 cuối cùng biểu thị ba đĩa ở trên ba cọc khác nhau.
Bước 6: Đưa đĩa số 2 từ cọc B sang cọc C, kí hiệu bởi
2
0110
.
Ba số 110 ở vị trí cuối cùng biểu thị hai đĩa số ba và số 2 trên cùng một cọc.
Bước 7: Đưa đĩa số 1 từ cọc A sang cọc C, kí hiệu bởi
2
0111
.
Ba số 111 ở vị trí cuối cùng biểu thị ba đĩa trên cùng một cọc (cọc C).
Như vậy ta đã giải xong bài toán ba đĩa.
Bước 8: Đưa đĩa số 4 từ cọc A sang cọc B, kí hiệu bởi
2
1000
. Cọc A trống.
Số 1000 biểu thị đĩa số 4 không trên cùng cọc với ba đĩa nhỏ.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
30
Bước 9: Đưa đĩa số 1 từ cọc C sang cọc B, kí hiệu bởi
2
1001
.
Số 1001 biểu thị đĩa số 1 và đĩa số 4 trên cùng một cọc.
Bước 10: Đưa đĩa số 2 từ cọc C sang cọc A, kí hiệu bởi
2
1010
.
Số 1010 biểu thị đĩa số 4 không trên cùng cọc với đĩa số 2.
Bước 11: Đưa đĩa số 1 từ cọc B sang cọc A, kí hiệu bởi
2
1011
. Cọc B
trống. Số 1011 biểu thị đĩa số 1 không trên cọc với đĩa số 2.
Bước 12: Đưa đĩa số 2 từ cọc C sang cọc A, kí hiệu bởi
2
0110
.
Ba số 110 ở vị trí cuối cùng biểu thị đĩa số 1 không trên cùngcọc với đĩa số 3.
Bước 13: Đưa đĩa số 2 từ cọc C sang cọc A, kí hiệu bởi
2
0110
.
Ba số 110 ở vị trí cuối cùng biểu thị đĩa số 1 không trên cùngcọc với đĩa số 3.
Bước 14: Đưa đĩa số 2 từ cọc C sang cọc A, kí hiệu bởi
2
0110
.
Ba số 110 ở vị trí cuối cùng biểu thị đĩa số 1 không trên cùngcọc với đĩa số 3.
Bước 15: Đưa đĩa số 2 từ cọc C sang cọc A, kí hiệu bởi
2
0110
.
Ba số 110 ở vị trí cuối cùng biểu thị đĩa số 1 không trên cùngcọc với đĩa số 3.
Bƣớc Cơ số 2 Giải thích
1 0001 Đưa đĩa số 1 từ cọc A sang cọc trống B.
2 0010 Đưa đĩa 2 từ cọc A sang cọc trống C.
3 0011 Đưa đĩa 1 từ cọc B lên trên đĩa 2 của C, cọc B trống.
4 0100 Đưa đĩa 3 từ cọc A lên cọc trống B.
5 0101 Đĩa 1 từ C sang A (KHÔNG chồng lên đĩa 3 của B)
6 0110 Đĩa 2 từ C lên trên đĩa 3 của cọc B (cọc C trống).
7 0111 Đưa đĩa 1 từ cọc A lên trên đĩa 2 của cọc B.
8 1000 Đưa đĩa 4 từ cọc A sang cọc trống C.
9 1001 Đĩa 1 từ cọc B lên trên đĩa 4 của cọc C.
10 1010 Đĩa 2 từ B sang A (KHÔNG chồng lên đĩa 4 của C).
11 1011 Đĩa 1 từ cọc C lên trên đĩa 2 của cọc A.
12 1100 Đĩa 3 từ cọc B lên trên đĩa 4 của C (cọc B trống).
13 1101 Đĩa 1 từ A sang B (KHÔNG chồng lên đĩa 3 của C).
14 1110 Đưa đĩa 2 từ cọc A lên trên đĩa 3 của cọc C.
15 1111 Đĩa 1 từ cọc B lên trên đĩa 2 của C (cọc B trống).
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
31
Giải bài toán Tháp Hà Nội với năm đĩa nhờ hệ đếm cơ số 2
Số lần chuyển cần thiết trong bài toán ba cọc với năm đĩa 52 1 31 . Kí
hiệu các cọc là cọc A (cọc nguồn chứa 5 đĩa), cọc B và cọc C, các đĩa là 1, 2,
3, 4, 5 theo thứ tự từ nhỏ đến lớn.
Bƣớc cơ số 2 Giải thích
1 00001 Đưa đĩa số 1 từ cọc A sang cọc trống B.
2 00010 Đưa đĩa 2 từ cọc A sang cọc trống C.
3 00011 Đưa đĩa 1 từ cọc B lên trên đĩa 2 của C, cọc B trống.
4 00100 Đưa đĩa 3 từ cọc A lên cọc trống B.
5 00101 Đĩa 1 từ C sang A (KHÔNG chồng lên đĩa 3 của B)
6 00110 Đĩa 2 từ C lên trên đĩa 3 của cọc B (cọc C trống).
7 00111 Đưa đĩa 1 từ cọc A lên trên đĩa 2 của cọc B.
8 01000 Đưa đĩa 4 từ cọc A sang cọc trống C.
9 01001 Đĩa 1 từ cọc B lên trên đĩa 4 của cọc C.
10 01010 Đĩa 2 từ B sang A (KHÔNG chồng lên đĩa 4 của C).
11 01011 Đĩa 1 từ cọc C lên trên đĩa 2 của cọc A.
12 01100 Đĩa 3 từ cọc B lên trên đĩa 4 của C (cọc B trống).
13 01101 Đĩa 1 từ A sang B (KHÔNG chồng lên đĩa 3 của C).
14 01110 Đưa đĩa 2 từ cọc A lên trên đĩa 3 của cọc C.
15 01111 Đĩa 1 từ cọc B lên trên đĩa 2 của C (cọc B trống).
16 10000 Đưa đĩa 5 từ cọc A sang cọc trống B (cọc A trống).
17 10001 Đĩa 1 từ cọc C sang A (KHÔNG chồng lên đĩa 5).
18 10010 Đĩa 2 từ cọc C lên trên đĩa 5 của cọc B.
19 10011 Đĩa 1 từ cọc A lên trên đĩa 2 của B (cọc A trống).
20 10100 Đĩa 3 từ cọc C sang A (KHÔNG chồng lên đĩa 5).
21 10101 Đĩa 1 từ cọc B sang C (KHÔNG chồng lên đĩa 3).
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
32
22 10110 Đưa đĩa 2 từ cọc B lên trên đĩa 3 của cọc A.
23 10111 Đưa đĩa 1 từ cọc C lên trên đĩa 2 của cọc A.
24 11000 Đĩa 4 từ cọc C lên trên đĩa 5 của cọc B (C trống).
25 11001 Đưa đĩa 1 từ cọc A lên trên đĩa 4 của cọc B.
26 11010 Đĩa 2 từ cọc A sang cọc C (KHÔNG chồng lên 4).
27 11011 Đưa đĩa 1 từ cọc B lên trên đĩa 2 của cọc C.
28 11100 Đưa đĩa 3 từ cọc A lên trên đĩa 4 của B (A trống).
29 11101 Đưa đĩa 1 từ cọc C sang A (KHÔNG chồng lên 3).
30 11110 Đưa đĩa 2 từ cọc C lên trên đĩa 3 của cọc B.
31 11111 Đưa đĩa 1 từ cọc A lên trên đĩa 2 của cọc B. Kết thúc
Kết luận
Các ví dụ trên (bài toán ba cọc với bốn hoặc năm đĩa) cho thấy: Các vị trí
đĩa có thể hoàn toàn xác định được trực tiếp từ biểu diễn nhị phân của số thứ tự
di chuyển (viết trong hệ đếm cơ số 2 với một chữ số cho mỗi đĩa), trong đó các
dãy 1 và các dãy 0 tượng trưng cho các dãy các đĩa liền nhau trên cùng một
cọc, và mỗi khi chữ số có thay đổi thì đĩa kế tiếp sẽ dời sang trái hay phải một
cọc (hay chuyển sang cọc ngoài cùng phía đối diện). Ta có qui tắc sau.
Dãy bit (dãy chữ số trong cơ số 2) được đọc từ trái sang phải, và mỗi bit
(mỗi chữ số) có thể được sử dụng để xác định vị trí của đĩa tương ứng.
Bit với cùng giá trị như bước trước có nghĩa là đĩa tương ứng được xếp chồng
lên đỉnh của đĩa trước trên cùng một cọc.
Bit với giá trị khác trước nghĩa là đĩa tương ứng có vị trí bên trái hoặc
bên phải của đĩa trước. Để xác định vị trí bên phải hay bên trái ta phải theo
qui tắc sau:
1) Giả thiết cọc đích nằm bên trái và cọc nguồn nằm bên phải.
2) Cũng giả thiết "wrapping" (bao bọc): cọc phải được tính như là cọc
“trái” của cọc trái và ngược lại.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
33
3) Giả sử
k
là số đĩa lớn nhất nằm trên cùng một cọc như là đĩa đầu tiên
lớn nhất của nó và thêm 1 nếu đĩa lớn nhất trên cọc trái. Nếu
n
chẵn, đĩa sẽ
được đặt trên một cọc bên trái, nếu
n
lẻ, đĩa được đặt lên một cọc bên phải.
Chữ số ở đầu đại diện cho đĩa lớn nhất và nếu là chữ số 0 thì có nghĩa là
đĩa lớn nhất không dời khỏi cọc xuất phát và ngược lại. Chữ số 1 từ bên phải
của số trong cơ số 2 biểu thị đĩa đã được chuyển. Nếu không có chữ số 1 nào
khác trong số đã cho trong cơ số 2, tức là số có dạng
20...01
, thì nghĩa là đĩa
đã được chuyển từ cọc A sang cọc trống. Chữ số 1 thứ hai từ bên phải biểu thị
vị trí của cọc mà đĩa được chuyển đến. Nếu không có đĩa nào hoặc có một số
chẵn các chữ số 0 giữa hai chữ số 1 (hai chữ số 1 đầu tiên từ bên phải), thì đĩa
được đặt lên trên đĩa to hơn nó. Nếu số chữ số 0 giữa hai chữ số 1 là lẻ thì
nghĩa là đĩa đang chuyển KHÔNG đặt lên trên đĩa to hơn (mà đặt ở cọc khác).
Các chữ số 1 và 0 luân phiên bên dưới các chữ số của một bước chuyển
cho phép biết được di chuyển theo một chiều khi nó hợp với chữ số của bước
chuyển tại nơi chữ số thay đổi và theo chiều kia khi nó không hợp.
Thí dụ, với số đĩa là 8:
Bước 0:
2
00000000
: Đĩa lớn nhất là 0, do đó nó nằm trên cọc trái (cọc
nguồn). Mọi đĩa khác cũng là 0, do đó chúng được đặt lên trên đĩa lớn nhất.
Và mọi đĩa đều nằm trên trên cọc nguồn.
Bước
211011000
: Đĩa lớn nhất là 1, do đó nó nằm trên cọc phải (cọc
đích). Đĩa thứ hai cũng là 1, do đó nó nằm trên đĩa lớn nhất, trên cọc phải.
Đĩa thứ ba là 0, do đó nó nằm trên cọc khác. Bởi vì 3 là số lẻ nên nó nằm trên
một cọc phía bên phải, nghĩa là trên cọc trái. Đĩa thứ tư là 1 nên nó nằm trên
cọc khác. Vì 4 là chẵn nên nó nằm trên một cọc về bên trái, nghĩa là cọc phải.
Đĩa thứ năm cũng là 1, do đó nó nằm bên trên đĩa thứ tư, trên cọc phải. Đĩa
thứ 6 là 0, do đó nó nằm trên cọc khác. Do 6 là chẵn nên đĩa nằm trên cọc về
bên trái, nghĩa là cọc giữa. Đĩa thứ 7 và đĩa thứ 8 cũng là 0, do đó nó nằm trên
đĩa số 6, trên cọc giữa.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
34
Bước
8
22 1 11111111
: Đĩa lớn nhất là 1, do đó nó nằm trên cọc phải
(cọc đích). Mọi đĩa khác cũng là 1, do đó chúng được đặt lên trên đĩa lớn
nhất. Vậy mọi đĩa nằm trên cọc đích và trò chơi kết thúc.
§3 Đồ thị Hà Nội
3.1 Đồ thị Hà Nội
Trò chơi Tháp Hà Nội có thể biểu diễn như một đồ thị không có hướng.
Các đỉnh biểu thị phân bố của các đĩa và các cạnh biểu thị chuyển động của
các đĩa.
Với một đĩa, đồ thị là một tam giác:
Với hai đĩa, đồ thị là ba tam giác được sắp xếp thành một tam giác lớn:
Các nút tại các đỉnh của tam giác phía ngoài cùng biểu thị các phân bố
với mọi đĩa trên cùng một cọc.
Với
1n
đĩa, ta lấy đồ thị của
n
đĩa và thay mỗi tam giác nhỏ với đồ thị
của hai đĩa.
Đồ thị cho ba đĩa có dạng:
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
35
1) Gọi các cọc là A, B, C.
2) Liệt kê các vị trí của các đĩa từ trái sang phải theo chiều tăng của kích
thước.
Các cạnh của các tam giác ngoài biên biểu thị con đường ngắn nhất để
chuyển tháp từ một cọc này sang cọc khác. Cạnh ở giữa của các biên của tam
giác lớn nhất biểu thị chuyển động của đĩa lớn nhất. Cạnh ở giữa của các biên
của mỗi tam giác nhỏ hơn tiếp theo biểu thị chuyển động của mỗi đĩa nhỏ hơn
tiếp theo. Các cạnh của tam giác nhỏ nhất biểu thị chuyển động của đĩa nhỏ
nhất.
Đồ thị của trò chơi tháp Hà Nội có liên quan mật thiết với tam giác
Sierpinski (Sierpiński Triangle) hay còn được gọi là thảm Sierpinski.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
36
Đồ thị của trò chơi với
n
đĩa sẽ có
3n
nút. Mỗi nút có ba cạnh đi tới nút
khác, ngoại trừ ba nút ở góc chỉ có hai cạnh. Luôn luôn có thể chuyển đĩa nhỏ
nhất sang một trong hai cọc khác. Và có thể chuyển một đĩa giữa hai cọc này
ngoại trừ trường hợp khi tất cả các đĩa nằm trên một cọc. Các nút góc biểu thị
ba trường hợp, khi mọi đĩa nằm trên một cọc. Biểu đồ cho
n
đĩa nhận được
từ biểu đồ cho
1n
đĩa bằng cách copy ba lần-mỗi copy biểu thị mọi trạng
thái và chuyển động của các đĩa nhỏ hơn cho một vị trí riêng của một đĩa mới
lớn hơn và cùng với chúng tại các góc với ba cạnh mới biểu thị chỉ có ba khả
năng chuyển đĩa lớn nhất. Do đó kết quả sẽ có 13n nút và vẫn có ba góc với
hai cạnh.
Khi số đĩa được thêm vào, đồ thị biểu diễn trò chơi sẽ tạo thành một hình
Fractal, thảm Sierpinski. Rõ ràng rằng phần lớn các vị trí trong trò chơi sẽ
không bao giờ đạt được nếu sử dụng lời giải ngắn nhất. Thật vậy, nếu các vị
thầy tu trong truyền thuyết sử dụng lời giải dài nhất có thể (không trở lại vị trí
cũ nào) thì cần 643 1 lần chuyển, nhiều hơn 2310 năm.
3.2 Bài toán Tháp Hà Nội và đƣờng Hamilton
Đường Hamilton khép kín cho ba đĩa là:
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
37
Đồ thị chỉ ra rằng:
• Từ mỗi phân bố bất kì của các đĩa, tồn tại một con đường ngắn nhất
chuyển mọi đĩa từ một trong ba cọc sang cọc khác.
• Giữa mỗi cặp phân bố bất kì tồn tại một hoặc hai đường ngắn nhất khác
nhau.
• Từ mỗi phân bố bất kì của các đĩa, tồn tại một hoặc hai đường dài nhất
không tự cắt chuyển mọi đĩa tới một trong ba cọc.
• Giữa mọi cặp của các phân bố bất kì của các đĩa tồn tại một hoặc hai
đường dài nhất không tự cắt.
• Gọi
nN
là số các đường không tự cắt để chuyển tháp
n
đĩa từ cọc này
sang cọc khác. Khi ấy:
1 2N
;
2 3
1n n nN N N
. Thí dụ,
795
8 1.5656 10N
.
Đồ thị
nH
tương ứng với các chuyển động được phép trong bài toán
tháp Hà Nội. Hình trên chỉ ra một số đồ thị Hà Nội với
1,2,3,4n
. Đồ thị
Hà Nội có thể xây dựng bằng cách chọn các đỉnh làm các hệ số nhị thức lẻ
của tam giác Pascan được tính trên các số nguyên từ 0 đến 2 1n và vẽ các
đỉnh khi các hệ số là kề nhau theo đường chéo hoặc theo chiều ngang (xem
Pool, 1994, [15]).
Đồ thị
nH
có
3n
đỉnh và 3 3 1
2
n cạnh. Mỗi đồ thị Hà Nội có duy nhất
một đường Hamilton (tương ứng, mỗi đồ thị Hà Nội có chính xác hai đường
tròn Hamilton có hướng khác nhau).
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
38
§4 Giải bài toán Tháp Hà Nội trên máy tính
Code (mã) thể hiện thuật giải đệ qui bài toán Tháp Hà Nội:
def Hanoi(n, A, C, B):
if n == 1:
print 'Move the plate from', A, 'to', C
else:
Hanoi(n - 1, A, B, C)
print 'Move the plate from', A, 'to', C
Hanoi(n - 1, B, C, A)
Thuật giải đệ qui bài toán Tháp Hà Nội trên ngôn ngữ Pascal:
VAR n: Integer;
Procedure chuyen(sodia: Integer; CotNguon: Char; CotDich: Char; CotTG:
Char);
Begin
If sodia>0 then begin
chuyen(sodia-1, CotNguon, CotTG, CotDich);
Writeln(CotNguon,'->',CotDich); { Dia lon nhat hien tai }
chuyen(sodia-1, CotTG, CotDich, CotNguon)
End;
End;
BEGIN
Write('Hay nhap so dia: '); Readln(n);
chuyen(n,'A','C','B');//Thực hiện chuyển từ cột A sang cột C với cột B làm
trung gian
Readln;
END.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
39
Chƣơng 3
BÀI TOÁN THÁP HÀ NỘI VỚI BỐN CỌC
(Trò chơi Reve-The Reve’s Puzzle)
§1 Trò chơi Tháp Hà Nội với bốn cọc
1.1 Trò chơi Tháp Hà Nội với bốn cọc
Trong Chương 2 chúng ta đã giải bài toán Tháp Hà Nội với ba cọc và
n
đĩa. Nó có thể giải được dễ dàng theo thuật giải đệ qui. Hơn nữa, có thể biết
chính xác số lần chuyển tối ưu cho bài toán với
n
đĩa là 2 1n . Như vậy, một
bài toán với thuật giải đơn giản và tối ưu cũng có thể có độ phức tạp tính toán
lớn (thời gian mũ), do đó có thể không giải được trong thời gian thực tế.
Một mở rộng tự nhiên của trò chơi Tháp Hà Nội là trò chơi Tháp Hà Nội
với bốn hoặc nhiều cọc (bài toán Tháp Hà Nội tổng quát). Như là sự tiếp nối
của chương trước và chuẩn bị cho chương sau, chương này nghiên cứu bài
toán Tháp Hà Nội cho bốn cọc. Bài toán này lần đầu tiên được Dudeney
(1902) đặt ra và gọi tên là The Reve’s Puzzle (xem [7]). Gần đây, nhiều kết
quả thú vị cũng đã được phát hiện cho bài toán này, các kết quả này là cơ sở
để phát triển nghiên cứu bài toán Tháp Hà Nội tổng quát, vì vậy nó xứng đáng
được xem xét tỉ mỉ trong một chương riêng, mặc dù, để thuận tiện, nhiều kết
quả trong chương này cũng được trình bày cho bài toán nhiều cọc .
Bài toán 2 (Bài toán Tháp
Hà Nội với bốn cọc) Có bốn
cọc được đánh số
1P
,
2P
,
3P
,
4P
. Cọc
1P
được gọi là cọc
nguồn. Ban đầu cọc nguồn
chứa
n
đĩa có lỗ ở giữa và
kích thước to
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
40
nhỏ khác nhau được xếp theo thứ tự “đĩa to ở dưới, đĩa nhỏ ở trên” . Bài toán
đặt ra là phải chuyển tất cả
n
đĩa từ cọc nguồn sang một trong các cọc
2P
,
3P
,
4P
, sắp xếp cũng theo thứ tự “đĩa to ở dưới, đĩa nhỏ ở trên”. Mỗi lần chỉ được
chuyển một đĩa (trên cùng của cọc nào đó) từ cọc này sang cọc khác. Khi
chuyển có thể sử dụng tất cả các cọc để đặt tạm thời các đĩa. Cọc cuối cùng
chứa các đĩa theo thứ tự như trên cọc nguồn được gọi là cọc đích. Các cọc còn
lại được gọi là cọc trung gian.
Theo một số tài liệu, 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. Năm 1889 Ông đã xét bài
toán năm cọc và sắp xếp đĩa theo bốn màu khác nhau. Dudeney đã viết về bài
toán Tháp Hà Nội với bốn cọc từ năm 1902. Trong hai trang đầu tiên của
cuốn sách nổi tiếng của Ông The Canterbury Puzzle (xuất bản năm 1907 tại
London và năm 1908 tại New York), Ông xét trò chơi với số cọc là 4 và số
đĩa là 8, 10 hoặc 21, chỉ có khác là Ông đã thay các đĩa bằng các quân cờ
(xem [7]) và được Ông gọi là Reve's puzzle. 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. Giả sử ( 1)
2
k
k k
t
là số tam giác
thứ
k
và giả sử
4( )H n
là số lần chuyển tối thiểu cần thiết để chuyển xong
n
đĩa. Dudeney tuyên bố rằng
4 4 12 2 1
k
k kH t H t
,
4 1 1H
. Từ đây ta
có
4 3 5H
;
4 6 17H
,
4 10 49H
,… 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ụ như
8n
.
Bài toán tổng quát với
3p
cọc,
p
là số tự nhiên bất kì với số đĩa
n
bất kì
được B. M. Stewart đề xuất năm 1939 (xem [17]). Lời giải của bài toán này
đã được Stewart [18] và Frame [9] trình bày đồng thời trong năm 1941.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
41
Bài toán tháp Hà Nội với bốn cọc được nhiều tác giả quan tâm (xem tài liệu
đầy đủ trong [5]), 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 (xem [11]). Vì vậy
người ta thường gọi thuật toán của hai ông hoặc các thuật toán cải biên tương
tự là thuật toán Frame-Stewart. Thuật toán Stewart-Frame cho bài toán Tháp
Hà Nội tổng quát sẽ được nghiên cứu kĩ ở Chương 4. Dưới đây trình bày thuật
toán Frame-Stewart cho bài toán bốn cọc (do Stewart đề xuất 1941).
1.2 Thuật toán Frame-Stewart (1941) cho bài toán Tháp Hà Nội với bốn cọc
Bƣớc 0
Đánh số cọc là
1P
,
2P
,
3P
,
4P
. Mục đích của chúng ta là chuyển tất cả các
đĩa từ cọc
1P
sang cọc
4P
, với qui tắc là mỗi lần chỉ chuyển một đĩa, và đĩa
nhỏ không bao giờ nằm dưới đĩa lớn.
Bƣớc 1
Chuyển
l
đĩa nhỏ nhất (
0 l n
) từ cọc
1P
sang cọc
2P
, trong quá trình
chuyển có quyền sử dụng tất cả bốn cọc. Kí hiệu số lần chuyển tối ưu là
4( )S l
.
Bƣớc 2
Chuyển
n l
đĩa lớn nhất (còn lại) từ cọc
1P
sang cọc
4P
, không sử dụng
cọc
2P
(vì cọc
2P
đang chứa
l
đĩa nhỏ). Nói cách khác, chuyển
n l
đĩa này
bằng cách sử dụng phương pháp tối ưu giải bài toán ba cọc trong Chương 2, số lần
chuyển tối ưu
n l
đĩa từ cọc
1P
sang cọc
4P
, không sử dụng cọc
2P
là 2 1n l .
Bƣớc 3
Chuyển
l
đĩa nhỏ nhất từ cọc
2P
sang cọc
4P
, sử dụng tất cả bốn cọc.
Như vậy, gọi
4( )S n
là số lần chuyển tối ưu
n
đĩa trong bài toán Tháp Hà
Nội với bốn cọc theo thuật toán Frame-Stewart thì với mỗi
l
, số lần chuyển
tối ưu
n
đĩa từ cọc
1P
sang cọc
4P
phụ thuộc vào
l
và bằng
42 ( ) 2 1
n lS l
.
Số lần chuyển tối ưu
n
đĩa trong bài toán Tháp Hà Nội với bốn cọc theo thuật
toán Stewart là
4 4 4
0
( ) 2 ( ) 2 1 min 2 ( ) 2 1n i n l
l n
S n S i S l
.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
42
1.3 Thuật toán Frame-Stewart cho bài toán Tháp Hà Nội với nhiều cọc
Với
3p
, kí hiệu
( )pS n
số lần chuyển ít nhất giải bài toán Tháp Hà Nội
với
p
cọc và
n
đĩa theo thuật toán Frame-Stewart.
Thí dụ,
3( ) 2 1
nS n
và
4(5) 13S
.
Tương tự như trong bài toán bốn cọc, ta cũng có thuật toán Frame-
Stewart cho bài toán với số cọc bất kì như sau.
Nếu số cọc
3p
thì sử dụng thuật toán tối ưu cho bài toán Tháp Hà Nội
với ba cọc trong Chương 2.
Với
3p
và
0n
chọn số
0 i n
làm cực tiểu số lần chuyển các đĩa
theo qui tắc (thuật toán Frame-Stewart) sau.
Chuyển
l
đĩa nhỏ trên cùng từ cọc nguồn sang cọc 1 (
n l
đĩa dưới
cùng vẫn ở trên cọc nguồn). Trong quá trình chuyển sử dụng tất cả các cọc.
Điều này có thể làm được với số lần chuyển ít nhất được kí hiệu là
( )pS l
.
Chuyển
n l
đĩa dưới cùng từ cọc nguồn sang cọc đích mất
1( )pS n l
lần chuyển (vì cọc 1 đang được sử dụng chứa các đĩa nhỏ nên chỉ
còn sử dụng được
1p
cọc).
Chuyển
l
đĩa từ cọc 1 sang cọc đích. Trong quá trình chuyển sử dụng
tất cả các cọc. Để làm được điều này cần
( )pS l
lần chuyển.
Công thức truy hồi cho lời giải bài toán Tháp Hà Nội dựa trên thuật toán
Frame-Stewart là:
1
0
0 khi 0;
( ) 2 1 khi 3, 0;
min 2 ( ) ( ) khi 3, 0.
n
p
p p
l n
n
S n p n
S l S n l p n
(1.1)
Như vậy, Bài toán Tháp Hà Nội với nhiều cọc trở thành bài toán tối ưu
rời rạc: Tìm
1
0
( ) min 2 ( ) ( )p p p
l n
S n S l S n l
.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
43
Nhận xét 1.1
Một điều thú vị là ta có thể nhận được kết quả của bài toán Tháp Hà Nội
với ba cọc từ trường hợp hai cọc theo thuật toán Frame-Stewart như sau.
Xuất phát từ thực tế, theo logic, ta đặt (khi số cọc
2p
và số đĩa
2n
thì bài toán không giải được):
2(0) 0S
,
2(1) 1S
,
2( )S n
với mọi
1n
.
Với
3p
,
1n
ta chỉ có thể đặt
1l n
(để thành phần thứ hai
1 2( ) ( )pS n l S n l
là hữu hạn. Khi ấy công thức (1.1) trở thành:
3 3 2 3( ) 2 ( 1) (1) 2 ( 1) 1S n S n S S n
.
Đây chính là công thức truy hồi tính số làn chuyển tối ưu khi
3p
.
Như vậy, tổng cộng cần
12 ( ) ( )p pS l S n l
lần chuyển cho bài toán
p
cọc. 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 nói trên (với cách chọn
l
như trên) cho phép
tìm ra một (một số) giá trị
i
sao cho
1 1
1 1
( ) 2 ( ) ( ) min 2 ( ) ( )p p p p p
l n
S n S i S n i S l S n l
. (1.2)
Nói cách khác, các giá trị
i
thỏa mãn (1.2) là số bước chuyển tối ưu
trong lớp các thuật toán đề nghị.
Stewart và Frame cũng đã chứng minh rằng, nếu
n
là số tam giác
kn t
,
thì cách chọn tối ưu nhất cho
l
là
l k
, trong khi đó nếu
1k kt n t
thì cả
hai giá trị
1k
và
k
đều là cách chọn tối ưu cho
l
. Như vậy, Stewart và
Frame đã đề xuất các thuật toán hiển cho bài toán Tháp Hà Nội với bốn cọc.
Từ đây ta cũng có nhận xét 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.
§2 Tính số bƣớc chuyển tối ƣu trong trò chơi Tháp Hà Nội với bốn cọc
Như đã thấy trong mục trước, bài toán tìm số bước chuyển đĩa ít nhất
trong trò chơi tháp Hà Nội được đưa về bài toán tối ưu rời rạc. Trong mục này
chúng tôi trình bày các đánh giá bước chuyển tối ưu cho bài toán Tháp Hà
Nội theo [13].
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
44
2.1 Tính số bƣớc chuyển tối ƣu trong trò chơi Tháp Hà Nội với
p
cọc và
n
đĩa. Trƣờng hợp ( 1)
2
p p
n
.
Trước tiên ta xét các trường hợp đơn giản sau. Vì các nhận xét dưới đây
đúng cho số cọc
p
bất kì nên ta phát biểu cho bài toán với số cọc bất kì.
Nhắc lại rằng
( )pH n
là kí hiệu số bước chuyển tối thiểu cần thiết để
chuyển
n
đĩa từ cọc nguồn sang cọc đích trong bài toán tháp Hà Nội với
p
cọc và
( )pS n
là kí hiệu số bước chuyển tối thiểu cần thiết để chuyển
n
đĩa từ
cọc nguồn sang cọc đích trong bài toán tháp Hà Nội với
p
cọc theo thuật toán
Frame-Stewart. Ta có
Nhận xét 2.1
Dễ dàng thấy rằng
(2) 3PH
với mọi
3p
và
(3) 5PH
với mọi
4p
.Với
3p
và
1n p
thì
( ) 2 1pH n n
.
Chứng minh
Hiển nhiên vì
1n p
nên có thể chuyển mỗi đĩa từ số 1 đến số
n
từ
cọc
1P
sang mỗi cọc
2 1,..., nP P
tương ứng, mất
n
lần chuyển. Sau đó lại
chuyển các đĩa từ số
1n
đến số 1 (đĩa to trước) từ các cọc tương ứng
2,...,nP P
sang cọc
1nP
, mất
1n
lần chuyển. Như vậy, tổng cộng mất
2 1n
lần chuyển hay
( ) 2 1pH n n
.
Nhận xét 2.2
Với
3p
và
n p
thì
( ) 2 1pH n n
.
Chứng minh
Trước tiên xây dựng tháp gồm 2 đĩa (đĩa số 1 và đĩa số 2) trên cọc
nP
,
mất ba lần chuyển (xem §1 Chương 2). Sau đó lại chuyển các đĩa từ số 3 đến
số
n
(tổng cộng
2n
đĩa) từ cọc
1P
sang các cọc
2 1,..., nP P
tương ứng, mất
2n
lần chuyển. Sau đó chuyển
3n
đĩa từ số
1n
đến số 3 từ các cọc
tương ứng
2 2,...,nP P
sang cọc
1nP
, mất
3n
lần chuyển. Lại chuyển tháp
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
45
gồm 2 đĩa (đĩa số 1 và đĩa số 2) trên cọc
nP
sang cọc
1nP
, mất ba lần chuyển.
Như vậy, tổng cộng mất
3 2 3 3 2 1n n n
lần chuyển hay
( ) 2 1pH n n
.
Bây giờ ta xét trường hợp
p n
. Ta có
Nhận xét 2.3
Ta luôn có:
1)
( 1) ( )p pH n H n
với mọi
1n
,
3p
;
2)
1( ) ( )p pH n H n
với mọi
1n
,
3p
.
Ta có
Định lí 2.1
Với
3p
và ( 1)
2
p p
p n
thì
( ) 4 2 1pH n n p
.
Chứng minh
Xét các trường hợp sau đây.
Trƣờng hợp 1
2 3p n p
.
Đặt
1n p l
,
0 2l p
. Thực hiện thuật toán sau.
Bƣớc 1 Lần lượt chuyển
1p
đĩa nhỏ nhất từ cọc
1P
sang các cọc
2,..., pP P
tương ứng sao cho mỗi cọc có một đĩa và đĩa số 1 nằm trên cọc
2P
.
Còn lại
1n p l
đĩa nằm trên cọc
1P
. Đã sử dụng hết
p
cọc.
Bƣớc 2 Lần lượt chuyển
l
đĩa nhỏ nhất (đĩa số 1 đến đĩa số
l
) từ các cọc
1 2,...,lP P
(đĩa to nằm trên cọc
1lP
chuyển trước) sang cọc
2lP
. Như vậy, cọc
2lP
chứa
1l
đĩa nhỏ nhất. Các cọc
2 1,..., lP P
được giải phóng; Các đĩa số
2l
đến số
1p
(
2p l
đĩa) vẫn nằm trên các cọc
3,...,l pP P
tương ứng.
Bƣớc 3 Lần lượt chuyển
l
đĩa còn lại (đĩa số
p
đến đĩa số
1p l n
) từ cọc
1P
sang các cọc tự do
1 2,...,lP P
sao cho mỗi cọc có
một đĩa và đĩa lớn nhất (số
n
) nằm trên cọc
2P
. Cọc
1P
được giải phóng.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
46
Bƣớc 4 Lần lượt chuyển
1l
đĩa lớn (đĩa số
1n l p
đến đĩa số
1n
) từ các cọc
3 1,..., lP P
sang cọc
2P
. Như vậy, cọc
2P
chứa
l
đĩa lớn nhất.
Các cọc
3 1,..., lP P
được giải phóng.
Bƣớc 5 Lần lượt chuyển
2p l
đĩa tiếp theo (còn lại trên các cọc
3,...,l pP P
, đĩa số
1p
đến đĩa số
2l
) sang cọc
2P
. Như vậy, cọc
2P
chứa
2p
đĩa lớn nhất. Các cọc
3,...,l pP P
được giải phóng.
Bƣớc 6 Lần lượt chuyển
l
đĩa nhỏ nhất (đĩa số 1 đến đĩa số
l
) từ cọc
2lP
sang cọc
1 3 4 1, , ,..., lP P P P
tương ứng sao cho mỗi cọc có một đĩa và đĩa số
1 nằm trên cọc
1P
, đĩa số 2 nằm trên cọc
3P
,…, đĩa số
l
nằm trên cọc
1lP
.
Sau đó chuyển đĩa
1l
từ cọc
2lP
sang cọc
2P
và chuyển
l
đĩa nhỏ nhất từ
các cọc
1 4 3 1, ,..., , ,l lP P P P P
sang cọc
2P
.
Tổng cộng số lần chuyển mất là:
( ) 1 1 2 1 2 4 3
2 4 1 3 4 2 1.
pH n p l l l p l l l p l
p n p n p
Trƣờng hợp 2 1
2
p p
n
.
Thực hiện thuật toán sau.
Bƣớc 1 Lần lượt chuyển
2p
đĩa nhỏ nhất từ cọc
1P
sang các cọc
2 1,..., pP P
sao cho mỗi cọc có một đĩa, đĩa nhỏ nhất nằm trên cọc
2P
. Sau đó
chuyển đĩa số
1p
từ cọc
1P
sang cọc
pP
và lần lượt chuyển
2p
đĩa từ
các cọc
1 2,...,pP P
sang cọc
pP
. Mất tất cả
2 1 2 2 3p p p
lần
chuyển
1p
đĩa từ cọc
1P
sang cọc
pP
. Các cọc
2 1,..., pP P
được giải phóng
(các đĩa lớn từ số
p
trở đi vẫn nằm trên cọc
1P
, các đĩa nhỏ từ số 1 đến số
1p
nằm trên cọc
pP
).
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
47
Bƣớc 2 Lần lượt chuyển
3p
đĩa tiếp theo (các đĩa số
p
đến
2 4p
)
từ cọc
1P
sang các cọc
2 2,..., pP P
tương ứng sao cho mỗi cọc có một đĩa. Sau
đó chuyển đĩa số
2 3p
sang cọc
1pP
và lần lượt chuyển
3p
đĩa từ các
cọc
1 2,...,pP P
sang cọc
1pP
. Như vậy, để chuyển
2p
đĩa từ cọc
1P
sang
cọc
1pP
mất tất cả
3 1 3 2 5p p p
lần chuyển. Các cọc
2 2,..., pP P
được giải phóng.
Bƣớc 3 Lần lượt chuyển
4p
đĩa tiếp theo (đĩa số
2 2p
đến đĩa số
3 5p
) từ cọc
1P
sang các cọc
2 3,..., pP P
sao cho mỗi cọc có một đĩa. Sau đó
chuyển đĩa số
3 4p
sang cọc
2pP
và lần lượt chuyển
4p
đĩa từ các cọc
3 2,...,pP P
sang cọc
2pP
. Như vậy, mất tất cả
4 1 4 2 7p p p
lần để chuyển
3p
đĩa từ cọc
1P
sang cọc
2pP
. Các cọc
2 3,..., pP P
được giải
phóng.
Tương tự cho các bước tiếp theo.
Bƣớc cuối cùng (bƣớc thứ
1p
) Chuyển đĩa cuối cùng (đĩa thứ
n
) từ
cọc
1P
sang cọc
2P
. Như vậy, cọc
kP
,
2,3,...,k p
có
1k
đĩa, cọc
1P
trống.
Tổng cộng số lần chuyển
1p
đĩa từ cọc
1P
sang cọc
pP
,
2p
đĩa từ cọc
1P
sang cọc
1pP
,…, đến đĩa cuối cùng (thứ
n
) từ cọc
1P
sang cọc
2P
mất là:
2
1
2 3 1 1
2 3 2 5 ... 1 1
2
p
p p
p p p
.
Tổng số đĩa đã chuyển từ cọc
1P
sang các cọc
pP
,
1pP
,…,
3P
là:
1 1 1 1
1 2 ... 1
2 2
p p p p
p p n
.
Lại lần lượt chuyển
1n
các đĩa từ các cọc
3,..., pP P
sang cọc
2P
như sau.
Vì cọc
1P
trống, cọc
2P
chứa đĩa số
n
, cọc
3P
chứa hai đĩa số
1n
,
2n
nên chuyển đĩa số
2n
từ cọc
3P
sang cọc
1P
, đĩa số
1n
từ cọc
3P
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
48
sang cọc
2P
và lại chuyển đĩa số
2n
từ cọc
1P
sang cọc
2P
. Mất 3 lần
chuyển. Và được 3 đĩa to nhất trên cọc
2P
. Cọc
1P
và
3P
trống.
Vì cọc
1P
và
3P
trống, cọc
2P
chứa 3 đĩa to nhất
n
,
1n
,
2n
, cọc
4P
chứa ba đĩa số đĩa số
3, 4, 5n n n
nên chuyển đĩa số
5n
sang cọc
1P
,
4n
sang cọc
3P
và
3n
sang cọc
2P
, sau đó lại chuyển đĩa số
4n
từ cọc
3P
sang cọc
2P
và chuyển đĩa số
5n
từ cọc
1P
sang cọc
2P
. Mất 5 lần
chuyển. Và được thêm 3 đĩa (thành 1+2+3=6) to nhất trên cọc
2P
. Cọc
1P
,
3P
,
4P
trống.
Tương tự, đến bước cuối cùng ta có: Các cọc
1P
,
3P
,…,
1pP
trống, cọc
2P
chứa các đĩa từ có số từ
n
đến
p
, cọc
pP
chứa các đĩa có số từ
1p
đến
số 1. Chuyển các đĩa có số 1 đến
2p
sang các cọc
1P
,
3P
,…,
1pP
tương
ứng. Sau đó chuyển đĩa số
1p
từ cọc
pP
sang cọc
2P
. Lại chuyển các đĩa có
số
2p
đến số 1 từ các cọc
1pP
,…,
3P
,
1P
sang cọc
2P
. Mất
2 1 2 2 3p p p
lần chuyển. Tất cả các đĩa ở trên cọc
2P
. Công
việc hoàn thành.
Tổng số lần chuyển đĩa từ các cọc
3,..., pP P
sang cọc
2P
mất:
2
2 3 3 2
3 5 ... 2 3 2
2
p
p p
p p p
.
Vậy tổng số lần chuyển đĩa là:
2 21 2 2 4 1 2 1 2 1 4 2 1p p p p p p p p n p
.
Nhận xét 2.4
Ta cũng có thể viết số lần chuyển đĩa trên bằng
2 221 2 2 4 1 2 1 1p p p p p p
.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
49
Trƣờng hợp 3 1
2 3
2
p p
p n
.
Đặt 1
2
p p
i n
. Thực hiện thuật toán như trên, nhưng số lần
chuyển đĩa lúc này giảm đi
4i
và bằng
2 2 1
( ) 2 1 1 4 2 1 1 4 4 2 1
2
p
p p
S n p i p n n p
.
Định lí 2.1 chứng minh xong.
Như vậy, nếu 1
2
p p
n
thì ta có công thức hiển tính số bước chuyển
tối ưu giải bài toán Tháp Hà Nội. Trường hợp 1
2
p p
n
với số cọc
p
bất
kì sẽ được xem xét trong Chương 4. Dưới đây chúng ta xét trường hợp
4p
.
2.2 Tính số bƣớc chuyển tối ƣu trong trò chơi Tháp Hà Nội với bốn cọc
và
n
đĩa
Định lí 2.2
Giả sử
n
là số đĩa cố định và 1 1
2 2
x x x x
n
. Số bước chuyển
tối ưu theo thuật toán Frame-Stewart là
224( ) 2 2 2 1xS n n x x
. (2.1)
Chứng minh
Xét các trường hợp sau.
Trƣờng hợp 1 1
2
x x
n
(
n
là số tam giác)
Thuật toán Frame-Stewart chuyển
n
đĩa từ cọc
1P
sang cọc
4P
như sau:
Bước 1: Với
0 l n
chọn trước, chuyển
l
đĩa nhỏ nhất (trên cùng) từ
cọc
1P
sang cọc
4P
(sử dụng tất cả bốn cọc). Số lần chuyển tối ưu là
4( )S l
.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
50
Bước 2: Chuyển
n l
đĩa lớn nhất (dưới cùng) từ cọc
1P
sang cọc
2P
, sử
dụng ba cọc (vì cọc
4P
đang chứa
l
đĩa nhỏ nhất). Số lần chuyển tối ưu là
2 1n l .
Bước 3: Lại chuyển
l
đĩa nhỏ nhất (trên cùng) từ cọc
4P
sang cọc
2P
(sử dụng tất cả bốn cọc). Số lần chuyển tối ưu là
4( )S l
.
Như vậy, với mỗi
0 l n
chọn trước, số lần chuyển tối ưu là
4 4( ) 2 ( ) 2 1
n lS n S l
. (2.2)
Rõ ràng, vì cọc
3P
trống nên trong Bước 1, để chuyển
l
đĩa từ cọc
1P
sang cọc
4P
, ta có thể áp dụng thuật toán Frame-Stewart chuyển
j
đĩa nhỏ
nhất (trên cùng,
0 j l
) từ cọc
1P
sang cọc
3P
(sử dụng bốn cọc) và
l j
đĩa lớn hơn từ cọc
1P
sang cọc
4P
(sử dụng ba cọc mất 2 1l j lần chuyển),
sau đó lại chuyển
j
đĩa nhỏ nhất từ cọc
3P
sang cọc
4P
(sử dụng bốn cọc).
Như vậy, để chuyển
l
đĩa từ cọc
1P
sang cọc
4P
sẽ mất
42 ( ) 2 1
l jS j
bước chuyển. Do đó, với mỗi
l
và
j
chọn trước, cần
4 42 ( ) 2 1 2 2 ( ) 2 1 2 1n l l j n lS l S j
bước để chuyển
n
đĩa từ cọc
1P
sang cọc
2P
.
Sử dụng thuật toán Frame-Stewart và công thức (2.2) nhiều lần, chúng ta
nhận được công thức sau đây tính số bước chuyển tối ưu cho bài tóan tháp Hà
Nội với bốn cọc và
1
1 ... 1
2
x x
n x x
là số tam giác:
1 2 24( ) 2 1 2 2 1 2 2 1 ... 2 2 1 2.1 ...x x xS n
. (2.3)
Số đĩa cần thiết để chuyển ba đĩa nhỏ nhất từ cọc
1P
sang cọc trung gian
(
3P
hoặc
4P
) được thể hiện trong ngoặc trong cùng.
Mở ngoặc trong công thức (2.3) ta nhận được
1x
số hạng có tổng bằng
2x , và một số hạng bằng 12x . Các số hạng còn lại có tổng bằng
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
51
2 11 2 4 ... 2 2 1x x
.
Vậy, khi 1
2
x x
n
là số tam giác, ta có
1 14( ) 1 2 2 2 1 1 2 1x x x xS n x x
. (2.4)
Trƣờng hợp 2 1 1
2 2
x x x x
n
(
n
không phải là số tam giác)
Ta tính số
4( )S n
như sau.
Quan sát công thức (2.3) ta thấy, nếu thiếu một đĩa (nhỏ nhất), tức là
1
1
2
x x
n
thì trên cọc
1P
cho phép tiết kiệm 12m lần chuyển để đưa các
đĩa từ cọc
1P
sang cọc
2P
so với trường hợp
n
là số tam giác.
Nếu ta cần chuyển 1
2
x x
n
từ cọc
1P
sang cọc
2P
và 1
2
x x
n
thì số lần chuyển “tiết kiệm” được sẽ là
1 2
1
2 1 2 2
2
x xx x n x x n
.
Cuối cùng, ta nhận được
2 2 2 2
4
22 2 2
( ) 1 2 1 1 2 2 1 2 .2 1 1 2 2
2 4 4 2 1 2 2 2 1.
x x x x
x x
S n x x x n x x x n
x x x n n x x
Nhận xét rằng, khi 1
2
x x
n
thì hai công thức (2.3) và (2.4) trùng nhau và
trùng với công thức (2.1). Định lí chứng minh xong.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
52
Chƣơng 4
BÀI TOÁN THÁP HÀ NỘI TỔNG QUÁT
§1 Tính số
( )pS n
trong thuật toán Frame-Stewart cho trò chơi Tháp
Hà Nội tổng quát
Trong §2 Chương 3 chúng tôi đã trình bày kết quả của Novikov, 2007
[13] tính giá trị tối ưu
( )pS n
của bài toán tháp Hà Nội cho trường hợp bốn
cọc và cho một số trường hợp với số cọc bất kì. Trong § này chúng tôi trình
bày nghiên cứu của Rand (2009, [16]) về số lần chuyển tối ưu theo thuật toán
Frame-Stewart cho bài toán tháp Hà Nội với số cọc bất kì. Kết quả của Rand
là sự phát triển của hàng loạt các kết quả của các tác giả trước (S. Novikov,
2007; Petr, 2002; Maujumdar, 1996,…) và bổ sung cho kết quả của Novikov
trong chương trước.
1.1 Số chia tối ƣu
Ta cần kết quả bổ trợ sau trong các chứng minh định lí.
Nhận xét 2.1
Ta có công thức tính toán tổ hợp sau.
1 1
1
k k k
m m mC C C
.
trong đó
!
:
! !
k
m
m
C
k m k
;
: 0kmC
nếu
m k
;
,m k
.
Chứng minh
Theo định nghĩa ta có
1
1
1
! 1 !! !
! ! 1 ! 1 ! 1 ! 1 ! 1 ! !
1 !
.
1 ! 1 1 !
k k
m m
k
m
m k m m km m
C C
k m k k m k k m k m k
m
C
k m k
.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
53
Định nghĩa 2.1
Giả sử
:pD
là hàm số xác định bởi công thức
( ) ( ) ( 1)p p pD i S i S i
.
Như vậy,
( )pD i
miêu tả số chuyển động đòi hỏi phải thực hiện theo
thuật toán Stewart khi thêm một đĩa (từ
1i
đến
i
đĩa), khi số cọc vẫn là
p
.
Định lí 1.1
Giả sử
, ,n p x
,
1n
,
3p
. Khi ấy ta có đánh giá sau cho bài toán
Tháp Hà Nội với
p
cọc:
Với mọi
0x
,
( ) 2xpD n
2 2
3 2
p p
p x p xC n C
.
Điều này tương đương với: nếu ta kí hiệu
pD
là dãy
( )p iD i
thì dãy
pD
sẽ chứa
3
3
p
pC
phần tử có giá trị 02 , tiếp theo
3
3 1
p
pC
phần tử có giá trị
12 ,
3
3 2
p
pC
phần tử có giá trị 22 ,v.v.
Ví dụ 1.1
Với
5p
dãy
5D
là như sau:
3 3 1
3 0 3 1
5
0 1 2
0 1 1 1 2 2 2 2 2 2
phan tu gia tri 2 ; phan tu gia tri 2 ;...
1phan tu gia tri 2 ;3 phan tu gia tri 2 ;6 phan tu gia tri 2 ...
2 , 2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ...
1, 2,2,2,4,4,4,4,4,4,8,8,8,8,8,8,8,8,8,8,.
p p
p pC C
..
Chứng minh Định lí 1.1
Để chứng minh Định lí 1.1 ta sẽ sử dụng hai lần qui nạp theo số đĩa và
theo số cọc. Chứng minh gồm các bước sau.
Chứng minh Định lí 1.1 đúng cho mọi
n
nếu
3p
.
Chứng minh Định lí 1.1 đúng cho mọi
p
nếu
1n
.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
54
Giả sử Định lí 1.1 đúng với mọi
0p p
và
0n n
, khi ấy Định lí 1.1
đúng cho
0p p
và
0n n
.
Trƣờng hợp cơ bản 1
Định lí 1.1 đúng cho mọi
n
nếu
3p
.
Chứng minh
Chúng ta cần chỉ ra rằng
3( ) 2
xD n 1 11x xC n C
.
Vì
1 1
1x xC n C
1 !!
1! 1 ! 1! !
xx
n
x x
1x n x 1x n
,
nghĩa là ta phải chứng minh
1
3( ) 2
nD n
.
Vì
3( ) 2 1
nS n
nên
1 13 3 3( ) : ( ) ( 1) 2 1 2 1 2n n nD n S n S n
.
Trƣờng hợp cơ bản 2
Định lí 1.1 đúng cho mọi
p
nếu
1n
.
Chứng minh
Khẳng định của Định lí 1.1 dẫn đến
(1) 2xpD
2 2
3 21
p p
p x p xC C
.
Vì
2 2
3 21
p p
p x p xC C
nên
2
3 0
p
p xC
hay
3 2p x p
. Suy ra
0x
.
Vậy
(1) 1 (1) (0)p p pD S S
. Điều này hiển nhiên đúng vì
(1) 1pS
;
(0) 0pS
.
Bƣớc qui nạp Giả sử Định lí 1.1 đúng với mọi
0p p
và
0n n
, khi ấy Định
lí 1.1 đúng cho
0p p
và
0n n
.
Để chứng minh bước qui nạp, ta cần các định nghĩa sau.
Định nghĩa 1.2
Trong bài toán Tháp Hà Nội với
p
cọc, ta gọi số đĩa
n
là hoàn hảo ứng
với
p
, nếu có thể biểu diễn
n
dưới dạng
2
2
p
p xn C
cho một số
0x
nào đó.
Khi
p
cố định, để ngắn gọn, ta chỉ nói
n
là hoàn hảo.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
55
Định nghĩa 1.3
Trong bài toán Tháp Hà Nội với
p
cọc và
n
đĩa, ta gọi số
i
là số chia
tối ưu nếu
1( ) 2 ( ) ( )p p pS n S i S n i
.
Nhận xét rằng
i
là số chia tối ưu nếu và chỉ nếu:
Với mọi
l
mà
0 l n
thì
1 12 ( ) ( ) 2 ( ) ( )p p p pS i S n i S l S n l
, tức là
1 1
0
( ) 2 ( ) ( ) min 2 ( ) ( )p p p p p
l n
S n S i S n i S l S n l
.
Nói cách khác, số chia tối ưu
i
làm cực tiểu số lần chuyển đĩa theo thuật
toán Frame-Stewart.
Chứng minh bƣớc qui nạp
Giả sử Định lí 1.1 đúng với mọi số cọc nhỏ hơn
p
và mọi số đĩa nhỏ
hơn
n
, khi ấy Định lí 1.1 đúng cho
p
và
n
. Hơn nữa,
Ta sẽ xác định một đánh giá trên và đánh giá dưới cho số chia tối ưu
i
của
n
.
Trong khoảng đánh giá ấy, mọi
i
đều là những số chia tối ưu.
Sau đó, sử dụng thông tin này, ta có thể tính trực tiếp
( )pD n
cho số
n
liên
quan bằng cách sử dụng giả thiết qui nạp.
Bổ đề 1.1
Giả sử Định lí 1.1 đúng cho mọi số đĩa nhỏ hơn
n
. Khi ấy với
n
thỏa
mãn bất đẳng thức
2 2
3 2
p p
p x p xC n C
thì số chia tối ưu
i
nằm trong khoảng
2 2
4 3
p p
p x p xC i C
. (1.1)
Nhận xét rằng trong trường hợp cơ bản
1n
thì bất đẳng thức
2 2
3 21
p p
p x p xC C
thỏa mãn cho duy nhất
0x
. Bất đẳng thức (1.1) trở
thành
4 3
2 2
p p
p pC i C
nên
0i
, tức là khi
1n
không có (không cần) phép
chia tối ưu (chỉ cần một lần chuyển đĩa).
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
56
Chứng minh Bổ đề 1.1
Nếu
i
là số chia tối ưu thì theo định nghĩa, với mọi
l
thỏa mãn
0 l n
ta có
1 12 ( ) ( ) 2 ( ) ( )k k k kS i S n i S l S n l
.
Với
n
thỏa mãn bất đẳng thức
2 2
3 2
p p
p x p xC n C
, ta sẽ chứng minh rằng
nếu
i
nằm ngoài khoảng đánh giá (1.1), thì tồn tại số
l
sao cho
1 12 ( ) ( ) 2 ( ) ( )k k k kS l S n l S i S n i
, (1.2)
tức là nó không phải là số chia tối ưu.
Đầu tiên giả sử rằng,
2
4
p
p xi C
. Đoạn
241, pp xC
được chia bởi các số
2 2 2 2 2 2 2
1 5 41
1 ... ...p p p p p p pk x xkC C C C C C C
.
Như vậy,
2 2
2 2 1
p p
p k p k
C i C
với
0,1,..., 3k x
nào đó.
Ta sẽ chứng minh
1l i
thỏa mãn bất đẳng thức (1.2).
Vì
l n
(do
2
4
p
p xi C
nên
2 2
4 31 1 1
p p
x xl i C C n
) nên kết hợp
với bất đẳng thức
2 2
3 1 2 1
p p
p k p k
C l C
(do
2 2
2 2 1
p p
p p k
C i C
và
1l i
)
và chú ý rằng
3k x
, theo giả thiết qui nạp, ta suy ra
1 2( ) 2 2k xpD l
.
Do
2
4
p
p xi C
nên
2 2
4 41 1
p p
x xl i C C
. Vì
2
3
p
p xn C
nên sử
dụng Nhận xét 1.1 ta có
2 2 3
3 4 4
p p p
p x p x p xn l C C C
. Hơn nữa, do
1i
nên
2l
và
2
2 2
p
p xn l C
(do
2 2
3 2
p p
p x p xC n C
). Lập luận tương tự như trên,
chia khoảng
3 24 2,p pp x p xC C
bởi các điểm
3 3 2
33 1 3 1
...p p pp xp x p xC C C
hay
1 2 1 2 1 2 1 2
1 1
... ...
p p p p
x x x k x k
C C C C
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
57
thì
n l
nằm một trong các khoảng
1 2 1 2
1 2 1 1 2
p p
p k x p x k
C n l C
với
0,1,...k
thì theo qui nạp của định lí ta có
1( ) 2 2
x k x
pD n l
.
Bây giờ, nhắc lại rằng
( ) ( ) ( 1)p p pD k S k S k
và
1l i
, ta có
1 1 1
1 1
2
1 1
2 ( ) ( ) 2 ( ) ( 1) ( 1 ) ( )
2 ( ) 2 ( ) ( ) ( )
2 ( ) 2.2 ( ) 2 2 ( ) ( ).
p p p p p p
p p p p
x x
p p p p
S l S n l D l S l S n l D n l
S i D l S n i D n l
S i S n i S i S n i
Như vậy, nếu
2
4
p
p xi C
thì
i
không phải là số chia tối ưu.
Bây giờ giả sử
2
3
p
p xn i C
và chọn
1l i
(nhắc lại rằng ta đòi hỏi
i n
để
có thể sử dụng giả thiết qui nạp cho
i
và
l
. )
Bởi vì
2
3
p
p xi C
và
2
2
p x
pn C
nên ta có
2 2 3
2 3 3
p p p
p x p x p xn i C C C
và
3
31
p
p xn l n i C
.
Tương tự như chứng minh trường hợp trên, vì giả thiết qui nạp của Định lí 1.1
đúng với
2
3
p
p xn i C
nên ta suy ra rằng
( ) 2xpD i
.
Với
3
3
k x
kn l C
theo qui nạp ta cũng suy ra
1( ) 2
x
pD n l
. Do
1l i
nên
1 1 1
1 1
1 1
2 ( ) ( ) 2 ( 1) ( 1) ( 1 ) ( )
2 ( ) 2 ( ) ( ) ( )
2 ( ) 2.2 ( ) 2 2 ( ) ( ).
p p p p p p
p p p p
x x
p p p p
S l S n l S l D l S n l D n l
S i D i S n i D n l
S i S n i S i S n i
Như vậy,
i
không phải là số chia tối ưu. Bổ đề chứng minh xong.
Bổ đề 1.2
Giả sử Định lí 1.1 đúng cho mọi số đĩa nhỏ hơn
n
. Khi ấy với
n
thỏa mãn bất
đẳng thức
2
3
p
p xC
2
2
p
p xn C
, và với mọi số chia tối ưu
i
ta có
3 3
4 3
p p
p x p xC n i C
. (1.3)
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
58
Chứng minh
Tương tự như trong Bổ đề 1.1. Đầu tiên ta giả sử
3
4
p
p xn i C
. Khi ấy
3 2 3 2 2
4 3 4 4 3 1
p p p p p
x x x x x
i n C C C C C
.
Do đó theo giả thiết qui nạp của Định lí 1.1 ta có
1( ) 2xpD i
.
Đặt
1l i
thì
1 23
4 1 2 1
1
pp
x p x
n l n i C C
vì
3
4
p
p xn i
.
Theo giả thiết qui nạp của Định lí 1.1 ta lại có
1
1( ) 2
x
pD n l
. Khi ấy
1 1 1
1 1
1 1
1 1
2 ( ) ( ) 2 ( 1) ( 1) ( 1) ( )
2 ( ) 2 ( ) ( ) ( )
2 ( ) 2.2 ( ) 2 2 ( ) ( ).
p p p p p p
p p p p
x x
p p p p
S l S n l S l D l S n l D n l
S i D i S n i D n l
S i S n i S i S n i
Vậy
i
không thể là số chia tối ưu hay nếu
i
là số chia tối ưu thì
3
4
p
p xn i C
.
Bây giờ giả sử
1 23
3 1 3 1
pp
p x p x
n i C C
. Khi ấy lại theo giả thiết qui nạp
của Định lí 1.1 ta có
1
1( ) 2
x
pD n i
. Mặt khác,
2 13 2 3 3 p xp p p x p
x x xi n C C C C C
.
Do đó nếu đặt
1l i
thì
2 1
2 1
p x
p x
l C
. Lại theo giả thiết qui nạp của Định lí
1.1 ta có
1( ) 2xpD l
. Bây giờ ta có thể tính
1 1 1
1 1
1 1
1 1
2 ( ) ( ) 2 ( 1) ( ) ( 1) ( )
2 ( ) 2 ( ) ( ) ( )
2 ( ) 2.2 ( ) 2 2 ( ) ( ).
p p p p p p
p p p p
x x
p p p p
S l S n l S l D l S n l D n l
S i D l S n i D n l
S i S n i S i S n i
Vậy
i
không phải là số chia tối ưu. Do đó ta đi đến kết luận rằng nếu
i
là số
chia tối ưu thì
3
3
k
k xn i C
.
Kết hợp hai trường hợp ta đí đến kết luận của Bổ đề 1.1.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
59
Nhận xét 1.2
Nhận xét rằng với mọi số hoàn hảo
2
2
p
p xn C
, Bổ đề 1.1 nói rằng mọi số
chia tối ưu
i
phải thỏa mãn bất đẳng thức
2
3
p
p xi C
và Bổ đề 1.2 nói rằng
3
3
p
p xn i C
3 2 3 2
3
p p p p
x x x xi n C C C C
.
Do đó chúng ta đã chứng minh rằng từ Định lí 1.1 suy ra nếu
2
2
p
p xn C
thì số
chia tối ưu
3
3
p
p xi C
là duy nhất.
Nói cách khác, khi
n
là số hoàn hảo (
2
2
p
p xn C
) thì số chia tối ưu
i
cũng là số hoàn hảo (
3
3
p
p xi C
), và là duy nhất. Ta cũng dễ dàng tính được
i
.
Ta sẽ có các hệ quả từ nhận xét thú vị này ở cuối mục.
Bổ đề 1.3
Giả sử Định lí 1.1 đúng cho mọi số đĩa nhỏ hơn
n
. Khi ấy với
n
thỏa
mãn bất đẳng thức
2 2
3 2
p p
p x p xC n C
, nếu số nguyên
i
thỏa mãn điều kiện
phát biểu trong Bổ đề 1.1 và Bổ đề 1.2 (thỏa mãn các bất đẳng thức (1.1) và
(1.3)) thì
i
là số chia tối ưu.
Chứng minh
Ta sẽ chỉ ra rằng với mọi cách chọn
i
đồng thời thỏa mãn các bất đẳng
thức (1.1) và (1.3) thì biểu thức
12 ( ) ( )p pS i S n i
là không đổi.
Vì
2 2
3 2
p p
p x p xC n C
nên ta có thể đặt
2
3
p
p xn C a
, trong đó
3 2 2
30
p p p
x x xa C C C
.
Vì
i
thỏa mãn bất đẳng thức (1.1), tức là
2 2
4 3
p p
p x p xC i C
nên ta có thể
đặt
2
4
p
p xi C b
. Hơn nữa, ta có thể viết bất đẳng thức
2 2
4 3
p p
p x p xC i C
dưới
dạng
2 2
3 1 2 1
p p
p x p x
C i C
. Áp dụng giả thiết qui nạp của Định lí 1.1 ta có
2 2
3 1 2 1
p p
p x p x
C i C
1( ) 2xpD i
. Từ Định nghĩa của
( )pD i
và Bổ đề 1.1:
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
60
1 1
1 1
( ) 1 ( ) 1 2 2 ( 1) 2
3 ( 2) 2.2 ... 2 .
x x
p p p p p p
x x
p p p
S i S i D i S i S i D i
S i D i S i b b
(1.4)
Hoàn toàn tương tự, do
n i
thỏa mãn bất đẳng thức (1.3), tức là
3 3
4 3
p p
p x p xC n i C
nên ta có thể đặt
3
4
p
p xn i C c
. Hơn nữa, bất đẳng
thức
3 3
4 3
p p
p x p xC n i C
có thể viết dưới dạng
1 2 1 2
1 3 1 2
p p
p x p x
C n i C
.
Áp dụng giả thiết qui nạp của Định lí 1.1, ta có
1 2 1 2
1 3 1 2
p p
p x p x
C n i C
1( ) 2
x
pD n i
.
Theo Định nghĩa của
( )pD i
, Bổ đề 1.2 và theo giả thiết qui nạp của Định
lí 1.1:
1 1 1 1
1 1 1
1
( ) ( 1) ( 1) 1 2
2 ( 1) 2 2 2.2 ...
.2 .
x
p p p p
x x
p p p
x
p
S n i S n i D n i S n i
S n i D n i S n i
S n i c c
(1.5)
Do
2
4
p
p xi C b
và
3
4
p
p xn i C c
nên
2 3 24 4 3p p px x xn i n i C b C c C b c
.
Mà
2
3
p
p xn C a
nên
a b c
.
Do
2 2
3 2 1
p p
p x p x
n a C C
là số hoàn hảo (theo Định nghĩa 1.2) nên
theo Nhận xét 1.2, số
3 3
43 1
p p
p xp x
i C C
là số chia tối ưu duy nhất cho
n a
. Do đó theo Định nghĩa số chia tối ưu và Định nghĩa của
( )pD i
ta có:
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
61
1
1 1
1
1
1
1 1
( ) 2 ( ) ( )
2 ( 1) ( ) ( 1) ( 1)
2 ( 1) 2.2 ( 1) 2
2 ( 1) ( 1) ...
2 ( ) ( ) 2 ( ) ( ).
p p p
p p p p
x x
p p
p p
p p p p
S n a S i S n a i
S i D i S n a i D n a i
S i S n a i
S i S n a i
S i b S n a i b S i b S n c i
(1.6)
Từ (1.4), (1.5) và (1.6) ta có
11 12 ( ) ( ) 2 2 .2
( ) 2 .
x x
p p p p
x
p
S i S n i S i b b S n i c c
S n a a
(1.7)
Biểu thức trên không phụ thuộc vào cách chọn
i
(hay cách chọn
b
và
c
,
miễn là chúng thỏa mãn các bất đẳng thức (1.1), (1.3) và
a b c
).
Hơn nữa giá trị
12 ( ) ( )p pS i S n i
là nhỏ nhất (trong tất cả các số
12 ( ) ( )p pS l S n l
,
0 l n
), từ đó suy ra rằng mọi
i
đồng thời thỏa mãn
các bất đẳng thức (1.1) và (1.3) là số chia tối ưu.
Đẳng thức (1.7) cũng kết thúc chứng minh Định lí 1.1.
Từ Định lí 1.1 ta có
Hệ quả 1.1
Nếu
n
là một trong
k
số trong khoảng
1k kt n t
thì
1
4 4 4( ) ( ) ( 1) 2
kD n M n M n
.
1.2 Công thức tính
( )pS n
Mục 1.1 đã cung cấp cho ta khá nhiều thông tin về các giá trị của
( )pS n
,
do đó có thể tính giá trị của
( )pS n
theo
n
và
p
mà không cần dùng công
thức đệ qui.
Định lí 1.2
Với
3k
và
2 2
3 2
p p
p x p xC n C
với một
0x
nào đó, ta có
.
1
3 3
3 3
0
( ) 2 2
x
p i p x
p p x p x
i
S n C n C
.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
62
Chứng minh
Đây là hệ quả trực tiếp từ Định lí 1.1, bởi vì
2
2
2 2
3 3
1
1 0 1 1
1 1
2 2 3 3 3
2 3 3 3 3
0 0
( ) (0) ( ) 0 2 2
2 2 2 2 .
p
p i
p p
p i p i
Cn x n
i x
p p p
i i j C i C
x x
p p i p x p i p x
p i p i p x p i p x
i i
S n S D i
C C n C C n C
Hệ quả 1.2
Nếu
1k kt n t
thì
1 14
1
( ) 2 2
k
i k
k
i
S n i t n
.
Trƣờng hợp số hoàn hảo
Nhắc lại Nhận xét 1.2, nếu
n
là số hoàn hảo,
2
2
p
p xn C
thì tồn tại duy
nhất số chia tối ưu
2
3
p
p xi C
và do đó
2 2 3
2 3 3
p p p
p x p x p xn i C C C
. Như
vậy,
2 2
3 2 1
p p
p x p x
i C C
là số hoàn hảo cho bài toán với
p
cọc,
1 2
1 2
p
p x
n i C
là số hoàn hảo cho bài toán với
1p
cọc. Do đó mỗi
( )pS i
và
1( )pS n i
trong công thức truy hồi
1( ) 2 ( ) ( )p p pS n S i S n i
cũng là
hoàn hảo và dễ dàng tính được nếu sử dụng tam giác Pascal.
Sử dụng tam giác Pascal, ta dễ dàng tính được
( )pS n
cho mọi số hoàn
hảo
n
như sau. Nhắc lại rằng các số tham gia trong tam giác Pascal có công
thức là
1, 1, 1
1 khi 0
0 khi 0, 0
khi 0, 0
j
ij i
i j i j
j
P C i j
P P i j
trong đó
ijP
là số Pascal tại dòng thứ
i
và cột thứ
j
, chỉ số bắt đầu tính
từ 0.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
63
Đầu tiên xây dựng tam giác Pascal
P
với các cột được đánh số bên
ngoài theo 2, nghĩa là
ijP
chỉ được xác định khi
0i
,
2j
và
, 2ij i jP P
, do
đó
2 1iP
với mọi
0i
. Điều này cho phép chúng ta ánh xạ
x
và
p
qua số
hoàn hảo
p
xn C
như sau:
p
xp xP C n
.
Sau đó chúng ta xây dựng tam giác thứ hai
P
với cột ngoài rìa cũng như
vậy, nhưng thay vì các số Pascal
1, 1, 1ij i j i jP P P
ta đặt
1, 1, 12ij i j i jP P P
.
Khi ấy ta có thể ánh xạ
x
và
p
qua
1 1 12p p pxp p x p x p xP S C S C S C
.
Bây giờ, sử dụng
P
để tính
x
dựa trên
n
, và sử dụng
P
để tính
( )pS n
dựa trên
x
, ta có thể dễ dàng và thuận tiện tính được
( )pS n
cho mọi số đĩa là
số hoàn hảo và mọi số cọc
p
(xem Bảng dưới đây).
P
p
x
2
3 4 5 6 7 8
0 1
1 1 1
2 1 2 1
3 1 3 3 1
4 1 4 6 4 1
5 1 5 10 10 5 1
6 1 6 15 20 15 6 1
P
p
x
2
3 4 5 6 7 8
0 1
1 1 1
2 1 3 1
3 1 7 5 1
4 1 15 17 7 1
5 1 31 49 31 9 1
6 1 63 129 111 49 11 1
Để tìm
( )pS n
cho một số hoàn hảo
p
xn C
nào đó, đầu tiên ta nhìn vào
cột
p
trong
P . Khi đó ta có thể tìm được x bằng cách nhìn vào chỉ số của
dòng chứa
n
. Cuối cùng, nhìn sang
,x k
của bảng P để tính được
( )xp pP S n
.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
64
Ví dụ 1.2
Với
15n
Để tính
4(15)S
ta nhìn vào cột
4p
, thấy số 15, ứng với
6x
. Bảng
P
cho
6,4 129P
. Như vậy,
4(15) 129S
.
Số
15n
nằm trong bảng Pascal vì nó là số hoàn hảo:
4 4
6 415 xn C C
.
Ví dụ 1.3
Để tìm
5(10)S
ta chỉ cần nhìn trên bảng
P
, ứng với cột
5p
,
10P
sẽ là
5x
. Bảng
P
cho
5,5 31P
. Như vậy,
5(5) 31S
.
1.3 Tính trực tiếp số chia tối ƣu
i
Bài toán 1.1
Giả sử số cọc
p
cố định. Tính số chia tối ưu
i
theo số đĩa
n
.
Từ các Định lí 1.1, 1.2 và các hệ quả của nó, ta có thể giải quyết bài toán
này cho trường hợp bốn cọc.
Định lí 1.3
Cho bài toán bốn cọc, với mọi số đĩa
n
. Nếu
2 2
1 2x xC n C
thì
1i n x
là số chia tối ưu.
Chứng minh
Ta nhắc lại các Bổ đề 1.1 và 1.2: Nếu
2 2
3 2
p p
p x p xC n C
thì mọi số
i
thỏa mãn hai bất đẳng thức (1.1) và (1.3)
2 2
4 3
p p
p x p xC i C
và
3 3
4 3
p p
p x p xC n i C
sẽ là số chia tối ưu.
Với
4p
các bổ đề này có thể phát biểu lại như sau:
Nếu
2 2
1 2x xC n C
thì mọi số
i
thỏa mãn hai bất đẳng thức
2 2
1x xC i C
và
1 1
1x xC n i C
(1.8)
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
65
hay
2 2
1x xC i C
1 !!
2! 2 ! 2! 1 !
xx
i
x x
1 1
2 2
x x x x
i
(1.8a)
và
1 1
1x xC n i C
1x n i x
. (1.8b)
Ta có
2 2
1 2x xC n C
1 ! 2 !
2! 1 ! 2! !
x x
n
x x
1 1 2
2 2
x x x x
n
.
(1.9)
Vì
i
phải thỏa mãn (1.8b) nên
n i
chỉ có thể là:
n i x
hoặc
1n i x
hay
i n x
hoặc
1i n x
.
Chọn
1i n x
thì ta có đánh giá sau đây cho
i
:
(1.9)
1 1 2
1 1 1
2 2
x x x x
x n x x
2 22
2 2
x x x x
i
21
1
2 2
x x x x
i
.
.Do
i
nguyên nên 1 1
2 2
x x x x
i
. Chứng tỏ
i
thỏa mãn bất đẳng thức
(1.8a). Vậy theo Bổ đề 1.3,
1i n x
là số chia tối ưu.
Nhận xét 1.3
Nếu chọn
i n x
thì vì 1 1 2
2 2
x x x x
n
nên ta có đánh giá sau
đây cho
i
:
(1.9)
1 1 2
2 2
x x x x
x n x x
21 2
2 2
x x x x
i
.
Bất đẳng thức (1.8a) không thỏa mãn khi 2 2
2
x x
i
hay
2 2
2
x x
n x
2 1 ( 2)3 2
2 2
x xx x
n
.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
66
Vì vậy
i n x
có thể không phải là số chia tối ưu.
Bổ đề 1.4
Với mọi
,a b
,
0 a b
ta có
a ab
.
Bổ đề 1.5
Cho 1
( )
2
x x
f x
và 3
( ) 2
2
g y y
. Khi ấy
( ( ))g f x x
với mọi
x R
.
Chứng minh
Theo Bổ đề 1.5 ta có
3
( ( )) 2 ( ) 1 1 1 1
2
g f x f x x x x x
.
Mặt khác, do
x
nên
1 0x x
. Do đó theo bất đẳng thức Cauchy
ta có
1
1
2
x x
x x
3 1 3
1 1
2 2 2
x x x x
.
Suy ra
3
1 1
2
x x x
. Vậy
3
1 1
2
x x x x
.
Chứng tỏ
3
1 ( ( )) 1
2
x g f x x x x
hay
( ( ))g f x x
.
Bổ đề 1.6
Cho 3
( ) : 2
2
g y y
. Khi ấy
2 2
1( ) x xg y x C y C
.
Chứng minh
Ta có
2 2
1x xC y C
1 2 1
2 2
x x x x
y
.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
67
Trước tiên ta chứng minh rằng, 1 2
2
x x
y
suy ra
g y x
.
Thật vậy, do cả hai số
y
và 1 2
2
x x đều là những số nguyên nên
từ 1 2
2
x x
y
suy ra
2
2
3
1 2 3 4 2
1
2 2 2
x
x x x x
y
.
2
3
2
2
y x
3
2
2
y x
3
2
2
y x
(do
x
là số tự nhiên), hay
g y x
.
Bây giờ giả sử 1
( )
2
x x
y f x
. Vì 3
( ) 2
2
g y y
là hàm tăng
và theo Bổ đề 1.5 ta có
( ( ))g f x x
nên
( )y f x
suy ra
( ) ( ( ))g y g f x x
.
Kết hợp cả hai bất đẳng thức trên ta có
2 2
1( ) x xg y x C y C
Hệ quả 1.4
Trong bài toán Tháp Hà Nội với bốn cọc và với
n
đĩa bất kì, số chia tối
ưu là
1
2
2
i n n
.
Chứng minh
Xây dựng hàm
:g
sao cho
2 2
1( ) x xg y x C y C
. Khi ấy
2 2
1 2( ) 2 x xg y x C y C
.
Theo Định lí 1.3 ta có thể tìm được số
i
xác định bởi
3 11 2 1 2 1 2
2 2
i n x n g n n n n n
là số chia tối ưu.
Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên
68
§2 Đánh giá
( )pS n
Như ta đã biết, số lần chuyển đĩa cho bài toán ba cọc là
3( ) 2 1
nS n
,
nên sẽ tăng theo hàm mũ khi
n
tăng. Tuy nhiên, trong trường hợp số cọc
4p
, phân tích thuật toán Frame- Stewart, Stockmeyer 1994 [19] phát hiện
ra rằng, thật đáng ngạc nhiên, là độ phức tạp của thuật toán là dưới mũ (sub-
exponential), cỡ
2 nn
cho
4k
. Đánh giá dưới đã được Xiao Chen và
Jian Shen (2004) và Szegedy (1999) xét. Dưới đây chúng tôi trình bày kết
quả của Stockmeyer [19].
Bổ đề 2.1
Kí hiệu
x
là số nguyên gần số thực
x
nhất. Khi ấy
1k kt n t
Các file đính kèm theo tài liệu này:
- LV2010_SP_NguyenThiHongPhuong.pdf