1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thuật toán frame – stewart giải bài toán tháp hà nội tổng quát .pdf

82 959 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 82
Dung lượng 1,46 MB

Nội dung

Thuật toán frame – stewart giải bài toán tháp hà nội tổng quát .pdf

Trang 2

Người hướng dẫn khoa học: PGS TS TẠ DUY PHƢỢNG

THÁI NGUYÊN - 2010

Trang 3

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ố S np( ) trong thuật toán Frame-Stewart cho trò chơi Tháp Hà Nội tổng quát 52

Trang 4

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ì

Trang 5

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

Trang 7

đầ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 tête annamite…” (Tháp Hà Nội, một trò chơi trí tuệ của người Annam), nhưng

casse-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

Trang 8

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

Trang 9

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)

Trang 11

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:

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ữ

Trang 12

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 đó

Trang 13

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 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)

Trang 17

§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

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à 2n 1 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à

Trang 18

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

là số tam giác thứ k và giả sử M n là số lần chuyển tối thiểu ( )

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 n8

Bài toán tổng quát với p 3 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

Trang 19

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 S lp( ) 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

nhất), mất Sp1(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 S lp( )

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 2S lp( )Sp1(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

(một vài) giá trị i sao cho

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

Trang 20

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

Trang 21

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])

Trang 22

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

Trang 23

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

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

Trang 24

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

Trang 25

Bài toán với 4 đĩa: cần 15 lần chuyển (Hình 4)

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):

Trang 26

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ứ k 1 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ứ k 1 để được tháp với k 1 đĩ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ứ k 1 sau khi chuyển đĩa thứ k 1 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 n1 đĩ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

sang cọc B

Trang 27

Thuật giải đệ qui bài toán tháp Hà Nội có thể phát biểu nhƣ sau

Nếu n1 hoặc n2 thì bài toán giải được ngay

Giả sử đã biết cách giải bài toán với n1 đĩa Giải bài toán cho n đĩa như sau:

Chuyển n1 đĩ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 n1 đĩ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 n1 đĩ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 n1 đĩ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 n1 đĩa từ cọc B sang cọc C Ta có:

(1) 1

L  ; (2)L 3; ( )L nL n(  1) L(1)L n(  1) 2 (L n 1) 1 Theo qui nạp, ta dễ dàng chứng minh được L n( )2n 1

Một điều thú vị là dãy L n( )2n 1 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à

2 1 18 446 744 073703551615 giây50 tỉ năm

Trang 28

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à:  64 

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 Si  ak , i1, ,n là chỉ số của các đĩa cần phải chuyển tại bước thứ k Dãy Si  ak này được xây dựng theo thuật giải đệ qui đơn giản bắt đầu với S1  1 cho một đĩa và theo công thức truy hồi Sn Sn1, ,n Sn1

Bảng dưới đây chỉ ra cách xây dựng dãy Sn cho các giá trị n1,2,3,4

§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ụ,

Trang 29

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ố):

2010 =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à  00 2

Bước 1: Chuyển đĩa số 1 từ cọc A sang cọc trống B, kí hiệu là  01 2 Chữ số 1 cuối cùng biểu thị đĩa trên cùng đã được chuyển ( 01 2 110) Bước 2: Chuyển đĩa số 2 từ cọc A sang cọc trống C, kí hiệu là  10 2 Chữ số 1 thứ hai biểu thị đĩa thứ hai đã được chuyển ( 10 2 210) 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à  11 2 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 ,  11 2 310)

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à  000 2

Bước 1: Chuyển đĩa số 1 từ cọc A sang cọc trống C, kí hiệu là

 001 2 110

Chữ số 1 ở vị trí thứ nhất (từ bên phải) biểu thị đĩa trên cùng đã được chuyển

Trang 30

Bước 2: Chuyển đĩa số 2 từ cọc A sang cọc trống B, kí hiệu là  010 2 Chữ số 1 ở vị trí thứ hai biểu thị đĩa thứ hai đã được chuyển ( 10 2 210)

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à

 011 2( 011 2 310) Chữ số 1 ở vị trí thứ nhất (khác với số 0 trong  010 2 ở 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à

 100 2( 100 2 410) 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à

 101 2( 101 2 510) 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à

 110 2( 110 2 610) 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

2  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

Trang 31

Biểu thị vi trí ban đầu, khi tất cả bốn đĩa ở cọc A là số 00002 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à 00012 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

00102 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 00112 Cọc C trống Số 00102 ở bước trên trở thành số 00112, 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

01002 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 01012 Từ 01002 đổi thành 01012 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 01102

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 01112

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 10002 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ỏ

Trang 32

Bước 9: Đưa đĩa số 1 từ cọc C sang cọc B, kí hiệu bởi 10012 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 10102 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 10112 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 01102

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 01102

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 01102

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 01102

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

Trang 33

Giải bài toán Tháp Hà Nội với năm đĩa nhờ hệ đếm cơ số 2

2  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

Trang 34

22 10110 Đưa đĩa 2 từ cọc B lên trên đĩa 3 của cọc A

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

Trang 35

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

đượ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 0 012, 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: 000000002: Đĩ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 110110002: Đĩ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

Trang 36

Bước 8

2  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 n1 đĩ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:

Trang 37

Đồ 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

Trang 38

Đồ 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ị

từ biểu đồ cho n1 đĩ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ả

3n 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 64

3 1 lần chuyển, nhiều hơn 10 năm 23

3.2 Bài toán Tháp Hà Nội và đường Hamilton

Đường Hamilton khép kín cho ba đĩa là:

Trang 39

• Gọi Nn là số các đường không tự cắt để chuyển tháp n đĩa từ cọc này

8 1.5656 10

N  

Đồ thị Hn 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 n1,2,3,4 Đồ 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ẻ

đỉnh khi các hệ số là kề nhau theo đường chéo hoặc theo chiều ngang (xem Pool, 1994, [15])

Đồ thị Hn 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)

Trang 40

§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:

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

Ngày đăng: 13/11/2012, 17:04

HÌNH ẢNH LIÊN QUAN

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 - Thuật toán frame – stewart giải bài toán tháp hà nội tổng quát .pdf
r ê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 (Trang 9)
Bài toán với 1 đĩa: chỉ cầ n1 lần chuyển (Hình 1) - Thuật toán frame – stewart giải bài toán tháp hà nội tổng quát .pdf
i toán với 1 đĩa: chỉ cầ n1 lần chuyển (Hình 1) (Trang 23)
Bài toán với 2 đĩa: cầ n3 lần chuyển (Hình 2) Lần 1: Chuyển đĩa số 1 từ cọc A  sang cọc B  - Thuật toán frame – stewart giải bài toán tháp hà nội tổng quát .pdf
i toán với 2 đĩa: cầ n3 lần chuyển (Hình 2) Lần 1: Chuyển đĩa số 1 từ cọc A sang cọc B (Trang 24)
Bài toán với 4 đĩa: cần 15 lần chuyển (Hình 4) - Thuật toán frame – stewart giải bài toán tháp hà nội tổng quát .pdf
i toán với 4 đĩa: cần 15 lần chuyển (Hình 4) (Trang 25)
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 - Thuật toán frame – stewart giải bài toán tháp hà nội tổng quát .pdf
hi 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 (Trang 38)
số hoàn hảo và mọi số cọc p (xem Bảng dưới đây). - Thuật toán frame – stewart giải bài toán tháp hà nội tổng quát .pdf
s ố hoàn hảo và mọi số cọc p (xem Bảng dưới đây) (Trang 65)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w