Giải thuật bằng biểu diễn nhị phân Các vị trí đĩa có thể xác định được trực tiếp từ biểu diễn nhị phân của số thứ tự di chuyển cơ số 2 với một chữ số cho mỗi đĩa trong đó các dãy 1 và cá[r]
(1)Bài toán tháp cổ Hà Nội Bài toán tháp Hà Nội (tiếng Anh gọi là Tower of Hanoi hay Towers of Hanoi) xuất phát từ trò chơi đố Tháp Hà Nội Mục đích bài toán là thực yêu cầu trò chơi Dạng bài toán thông dụng là: "Người chơi cho ba cái cọc và số đĩa có kích thước khác có thể cho vào các cọc này Ban đầu xếp các đĩa theo trật tự kích thước vào cọc cho đĩa nhỏ nằm trên cùng, tức là tạo dạng hình nón Người chơi phải di chuyển toàn số đĩa sang cọc khác, tuân theo các quy tắc sau: * lần di chuyển đĩa * đĩa có thể đặt lên đĩa lớn (không thiết hai đĩa này phải có kích thước liền kề, tức là đĩa nhỏ có thể nằm trên đĩa lớn nhất)" Bài toán này có lời giải chính xác Tuy nhiên các mở rộng cho trường hợp có nhiều ba cọc chưa giải cặn kẽ Thuật giải đệ quy * đặt tên các cọc là A, B, C tên này có thể chuyển các bước khác * gọi n là tổng số đĩa * đánh số đĩa từ (nhỏ nhất, trên cùng) đến n (lớn nhất, cùng) Để chuyển n đĩa từ cọc A sang cọc B thì cần: chuyển n-1 đĩa từ A sang C Chỉ còn lại đĩa #n trên cọc A chuyển đĩa #n từ A sang B chuyển n-1 đĩa từ C sang B cho chúng nằm trên đĩa #n Phương pháp trên gọi là thuật giải đệ quy: để tiến hành bước và 3, áp dụng lại thuật giải cho n-1 Toàn quá trình là số hữu hạn các bước, vì đến lúc nào đó thuật giải áp dụng cho n = Bước này đơn giản là chuyển đĩa từ cọc A sang cọc B Giải thuật biểu diễn nhị phân Các vị trí đĩa có thể xác định trực tiếp từ biểu diễn nhị phân số thứ tự di chuyển (cơ số với chữ số cho đĩa) đó các dãy và các dãy tượng trưng cho các dãy các đĩa liền trên cùng cọc, và chữ số có thay đổi thì đĩa dời sang trái hay phải cọc (hay chuyển sang cọc ngoài cùng phía đối diện) Chữ số đầu đại diện cho đĩa lớn và là chữ số thì có nghĩa là đĩa lớn không dời khỏi cọc xuất phát và ngược lại Đặt các chữ số và luân phiên bên các chữ số bước chuyển cho phép biết di chuyển theo chiều nó hợp với chữ số bước chuyển nơi chữ số thay đổi và theo chiều nó không hợp Do đó bước chuyển 00000000 có nghĩa là đặt đĩa lớn lên cọc ban đầu, bước chuyển 11111111 có nghĩa là đặt chúng lên cọc cuối cùng, và bước chuyển 11011000 có hai đĩa lớn trên cọc đích, đĩa trên cọc xuất phát, hai đĩa cọc trung gian, và ba đĩa trên cọc xuất phát, có thêm bao nhiêu chữ số đại diện các đĩa nhỏ Ta có thể dễ dàng tính các vị trí các đĩa tám mươi đĩa sau số các bước tiến, giới hạn đủ lớn để chứa nó Việc dùng phương pháp đệ quy cho trường hợp tám mươi đĩa này có thể không thực tế Ứng dụng Lop12.net (2) Tháp Hà Nội là bài toán thường dùng để dạy lập trình Một phiên hình bài toán này lập trình chương trình soạn thảo emacs, có thể truy cập cách gõ M-x hanoi Ngoài có thuật giải mẫu viết ngôn ngữ Prolog Bài toán Tháp Hà Nội thường dùng nghiên cứu tâm lý cách giải vấn đề Cũng có biến thể khác bài toán này gọi là Tháp Luân Đôn dùng chuẩn đoán và điều trị thần kinh tâm lý các chức thực hành Trường hợp bốn cọc trở lên Mặc dù thuật giải tương đối đơn giản, bài toán với n đĩa cần ít 2n-1 lần di chuyển Tuy nhiên với số lượng đĩa nhiều thì chưa biết cần ít bao nhiêu lần di chuyển để giải bài toán Do việc áp dụng bước tiến dãy (tiếng Anh sequential advancement) để xác định vị trí số lượng lớn các đĩa trên ba cọc sau số lớn tuỳ ý các bước tiến là không thực tế Lời giải tối ưu cho bài toán Tháp Hà Nội với bốn cọc hay nhiều còn là bài toán mở Đây là ví dụ tiêu biểu cho thấy bài toán đơn giản, có thể giải có thể trở thành khó nhiều cách nới lỏng số ràng buộc nó Mặc dù không biết chính xác cần bao nhiêu lần di chuyển, có thể có vài kết tiệm cận Có "lời giải coi tối ưu" có thể áp dụng cách đệ quy để tìm lời giải–xem giải thích vài biến thể bài toán bốn cọc bài khảo sát Paul Stockmeyer (tiếng Anh) Mặc dù với số đĩa nhỏ thử nghiệm trên máy tính thì "lời giải coi tối ưu" này là thực tối ưu, nó chưa có chứng minh tổng quát để coi là thực tối ưu Tuy nhiên, kết nghiên cứu năm 2004 (tiếng Anh) đã cho thấy lời giải coi tối ưu phải nằm cùng độ lớn với lời giải tối ưu Lop12.net (3)