Tải bản đầy đủ (.doc) (44 trang)

Luận Văn Thạc sĩ Bài Toán Tháp hà Nội với các Đĩa Màu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (877.53 KB, 44 trang )

MỤC LỤC
Trang
Mục lục ........................................................................................................................
Mở đầu ........................................................................................................................
Chương 1 Bài toán Tháp Hà Nội với nhiều cọc ...........................................
1.1 Bài toán tháp Hà Nội cổ điển .....................................................................
1.2 Bài toán tháp Hà Nội với nhiều cọc ...........................................................
Chương 2 Trò chơi Tháp Hà Nội với các đĩa màu ......................................
2.1 Các biến thể của trò chơi tháp Hà Nội ....................................................
2.2 Một số thí dụ trị chơi tháp Hà Nội với đĩa màu ...................................
2.2.1 Bài toán 1 .........................................................................................................
2.2.2 Bài tốn 2 .........................................................................................................
2.2.3 Bài tốn 3 .........................................................................................................
2.3 Trị chơi tháp Hà Nội đen trắng ................................................................
2.3.1 Trò chơi Tháp Hà Nội đen trắng: Phiên bản 1 ........................................
2.3.2 Trò chơi Tháp Hà Nội đen trắng: Phiên bản 2 ........................................
2.3.3 Trò chơi Tháp Hà Nội đen trắng: Phiên bản 3 .........................................
2.3.4 Trò chơi Tháp Hà Nội đen trắng: Phiên bản 4 .........................................
Kết luận .......................................................................................................................
Tài liệu tham khảo .................................................................................................

1

1
2
4
4
7
11
11
12


12
13
13
22
23
27
33
38
42
43


MỞ ĐẦU
Trị chơi (Bài tốn) Tháp Hà Nội được nhà toán học người Pháp Edouard
Lucas phát minh và phổ biến rộng rãi ở Paris năm 1883, là một bài toán nổi
tiếng thế giới, hiện nay đang được nghiên cứu bởi rất nhiều nhà tố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 tốn học như một ví dụ điển hình về
thuật tốn đệ qui và lập trình căn bản, nhưng hình như chưa được chú ý
nghiên cứu và phổ biến rộng rãi ở Việt Nam.
Mặc dù trị chơi Tháp Hà Nội có mặt trên khá nhiều trang WEB và giáo trình
tiếng Việt, số lượng bài viết tiếng Việt giới thiệu về trò chơi và bài tốn Tháp
Hà Nội trên các tạp chí là rất ít và cịn rất sơ lược, hình như chưa có bài
nghiên cứu tiếng Việt nào về bài tốn Tháp Hà Nội, trong khi đó chỉ tính riêng
số bài báo trên thế giới nghiên cứu về bài toán Tháp Hà Nội trong lĩnh vực
Tốn-Tin học đã có đến gần 500 bài với khoảng 250 bài với đầu đề có cụm từ
The Tower of Hanoi, đăng trên hơn 100 tạp chí khoa học uy tín. Đó là chưa kể
đến những bài viết về sử dụng bài toán Tháp Hà Nội trong khoa học giáo dục
và y học.
Bài toán Tháp Hà Nội thú vị đến mức nó đã được dùng làm đề tài của một số

luận án Tiến sĩ và luận văn cao học ở nước ngoài (Trung Quốc, Mỹ, Đức,…).
Hai hội thảo khoa học quốc tế đã được tổ chức tại Slovenia (2005) và Paris
2009. Đã có hai cuốn sách chuyên khảo đầu tiên ([4] và [8]) về Bài toán Tháp
Hà Nội.
Bài tố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à Tố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 tốn,....
Bài tốn Tháp Hà Nội gợi ý cho nhiều nghiên cứu trong khoa học máy tính và
tốn học.
2


Sau hơn một thế kỉ, trò chơi Tháp Hà Nội đã được tổng qt hóa (trị chơi
Tháp Hà Nội với nhiều cọc, trò chơi Tháp Hà Nội song song,…) và đã có
nhiều cải biên (trị chơi Tháp Hà Nội xoay vòng, trò chơi Tháp Hà Nội với
các đĩa màu,...). Những tổng quát hóa và cải biên này dẫn đến những vấn đề
tốn học thú vị, thậm chí dẫn tới nhiều bài tốn hiện nay chưa có lời giải.
Luận văn Bài tốn Tháp Hà Nội với các đĩa màu có mục đích trình bày bài tốn
Tháp Hà Nội cải biên, trong đó mỗi cọc đĩa được gán cho một màu nhất định.
Luận văn gồm phần mở đầu, hai Chương và phần tài liệu tham khảo.
Chương 1. Bài toán Tháp Hà Nội với nhiều cọc.
Chương 2. Trò chơi Tháp Hà Nội với các đĩa màu.
Luận văn được hoàn thành dưới sự hướng dẫn tận tình của PGS.TS. Tạ Duy
Phượng. Em xin bầy tỏ lòng biết ơn sâu sắc nhất đối với Thầy.
Em xin cảm ơn các Thầy Cô của trường Đại học Khoa Học - Đại học Thái
Nguyên và Viện Toán học đã tận tình giảng dạy em trong suốt quá trình học
cao học.
Em xin cảm ơn khoa Toán - Tin trường Đại học Khoa học - Đại học Thái
Nguyên, đã quan tâm giúp đỡ, tạo điều kiện thuận lợi cho em thực hiện kế

hoạch học tập của mình.
Tơi xin chân thành cảm ơn Sở Giáo dục và Đào tạo tỉnh Tuyên Quang, trường
Trung học Phổ thơng Hịa Phú, Chiêm Hóa, Tun Quang, đã tạo điều kiện và
giúp đỡ tôi trong thời gian học Cao học.
Xin cảm ơn người thân, đồng nghiệp, bạn bè đã cổ vũ động viên tôi trong suốt
quá trình làm luận văn.
Thái Ngun, 20.11.2015
Vũ Hồng Đạo

3


Chương 1
BÀI TOÁN THÁP HÀ NỘI VỚI NHIỀU CỌC
Nhằm làm sáng tỏ các bài toán xét trong Chương 2, Chương 1 trình bày sơ
lược bài tốn tháp Hà Nội cổ điển và bài tốn mở rộng của nó là bài toán tháp
Hà Nội với nhiều cọc.
1.1 Bài toán tháp Hà Nội cổ điển
Năm 1883 nhà toán học người Pháp Édouard Lucas (1842–1891) đã phát
minh và truyền bá trò chơi tháp Hà Nội.
Trị chơi (Bài tốn) tháp Hà Nội cổ điển (the Hanoi Tower - TH) được phát
biểu như sau: Có ba cọc thẳng đứng được gắn trên một đế nằm ngang. Cho n
đĩa trịn có lỗ ở giữa và đường kính khác nhau. Lúc đầu các đĩa được lồng vào
một cọc theo thứ tự từ lớn đến nhỏ, từ thấp lên cao, tạo nên một tòa tháp. Trò
chơi đòi hỏi di chuyển các đĩa, bằng cách đặt chúng vào cọc bên cạnh, mỗi
lần chuyển một đĩa, theo các qui tắc sau.
I. Mỗi lần chỉ được chuyển một đĩa trên cùng từ một trong ba cọc.
II. Sau mỗi lần chuyển, các đĩa đều nằm trên một trong ba cọc, theo thứ tự từ
lớn đến nhỏ, từ thấp đến cao.
III. Đĩa trên cùng của một trong ba cọc được đặt vào cọc trống hoặc đặt lên

một trong hai cọc khác, nếu đĩa này nhỏ hơn các đĩa của cọc đó.
Qui tắc sau đây được gọi là Qui tắc thiêng liêng (devine rule):
Không được đặt đĩa lên trên đĩa có đường kính nhỏ hơn.
Một phân bố bất kì của n đĩa trên ba cọc được gọi là một trạng thái (state) hay
một cấu hình (configuration). Một trạng thái (một cấu hình) được gọi là chính
qui (regular) hay hợp lệ nếu khơng có đĩa nào nằm trên đĩa nhỏ hơn.
Một trạng thái được gọi là hồn hảo (perfect) nếu nó là chính qui và tất cả các
đĩa đều nằm trên một cọc.
4


Hình 1 là ví dụ các trạng thái (với số đĩa n = 8 ).

Thuật toán giải bài toán tháp Hà Nội cổ điển
Bước 1: Chuyển đĩa số 1 từ cọc A sang cọc C;
Bước 2: Chuyển đĩa số 2 sang cọc B;
Bước 3: Chuyển đĩa số 1 từ cọc C sang cọc B.
Khi ấy đĩa số 1 nằm trên đĩa số 2.
Như vậy, ta đang có hai đĩa nằm trên cọc B, cọc C hiện thời còn trống.
Bước 4: Chuyển đĩa số 3 từ cọc A sang cọc C.
Lặp lại ba bước trên để giải bài toán cho hai đĩa: chuyển đĩa số 1 và đĩa số 2
cho nằm lên trên đĩa số 3 trên cọc C.
Tiếp tục làm như vậy cho bốn, năm,… đĩa.
Mỗi lần dựng xong tháp từ đĩa thứ k đến đĩa thứ nhất (trên cọc B hoặc cọc
C, một trong hai cọc đó trống), ta chuyển đĩa thứ 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 từ cọc B (hoặc cọc
C) 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 với k đĩa thì ta cũng dễ dàng xây dựng được tháp với k + 1 đĩa
sau khi chuyển đĩa thứ k + 1 sang cọc trống.


5


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. Tồn bộ q trình cần
một số hữu hạn các bước, vì vậy đến một lúc nào đó thuật giải sẽ được áp
dụng cho n = 1. Bước này chỉ đơn giản là chuyển một đĩa duy nhất từ cọc A
sang cọc C.
Kí hiệu L ( n ) là số lần chuyển đĩa tối ưu trong bài toán tháp Hà Nội với n đĩa
và ba cọc. Khi ấy, để chuyển n đĩa từ cọc A sang cọc C, trước tiên ta phải
chuyển 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.
Định lí 1 (Theorem 2.1, [2], p. 73-74) Số bước chuyển tối ưu trong bài toán
tháp Hà Nội với ba cọc và n đĩa là
L(n) = 2n − 1.
Chứng minh Ta có:
L ( 1) = 1,  L ( 2 ) = 3,  L ( n ) = L ( n − 1) + L ( 1) + L ( n − 1) = 2 L ( n − 1) + 1
Theo qui nạp, ta có

L(n + 1) = 2 L(n) + 1 = 2.(2 n − 1) + 1 = 2 n+1 − 1.
n
Vậy công thức L(n) = 2 − 1 được chứng minh với mọi n.

6


1.2 Bài toán tháp Hà Nội với nhiều cọc
Một mở rộng tự nhiên của bài toán
Tháp Hà Nội với ba cọc là Bài toán

Tháp Hà Nội với bốn (hoặc nhiều) cọc.
Chính tác giả của bài tốn Tháp Hà
Nội, E. Lucas cũng là người đầu tiên
xét bài toán với nhiều cọc vào năm
1899, xem [5].
Năm 1902-1903

Henry

Bài toán Tháp Hà Nội với bốn cọc

Ernest

Dudeney đã viết hai bài báo về bài
toán Tháp Hà Nội với bốn cọc. Trong
hai trang đầu tiên của cuốn sách nổi
tiếng The Canterbury Puzzles and
Other Curious Problems xuất bản tại
London năm 1907 và tại New York
năm 1908 (xem [1]), Ơng đã viết về
bài tốn này trị chơi tháp Hà Nội với
bốn cọc (dưới dạng các quân cờ) và
số đĩa là 8, 10 hoặc 21 và gọi là The
Reve's puzzle-câu đố của Reve).
Trong phần lời giải (trang 131-132), Dudeney đã khẳng định (không chứng
minh) rằng số lần chuyển cần thiết tương ứng với 8, 10 hoặc 21 đĩa là 33, 49
hoặc 321. Hơn nữa, Ơng cịn xét trường hợp với số đĩa là số tam giác, tức là
các số tk =

k ( k + 1)

k ( k + 1)
, k = 1,2,... Giả sử tk =
là số tam giác thứ k và
2
2

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ố mà không chứng minh rằng

7


M 4 ( tk ) = 2M 4 ( tk −1 ) + 2k − 1, M 4 ( 1) = 1.

Từ đây ta có
M 4 ( 3) = 5 ; M 4 ( 6 ) = 17 , M 4 ( 10 ) = 49 ,…
Tuy nhiên Dudeney không cho một thuật tố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 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 [9]). Lời giải độc lập của bài toán này đã được B. M.
Stewart [10] và J. S. Frame [3] cùng trình bày trong tạp chí này năm 1941.
Các thuật tốn của Stewart và Frame cùng với một số thuật toán cải biên khác
đã được chứng minh là tương đương theo nghĩa số lần chuyển đĩa là bằng
nhau (xem [11]). Vì vậy người ta thường gọi chung thuật tốn của hai Ơng
hoặc các thuật toán tương đương là thuật toán Frame- Stewart.
Giả sử n là số đĩa nằm trên cọc 0 và p là số cọc được đánh số từ 0 đến p − 1 .
Để giải bài toán tháp Hà Nội với p cọc, ta thực hiện các bước sau.
Bước 1. Với số l , 1 ≤ l ≤ n , chuyển l đĩa trên cùng từ cọc 0 tới cọc 3, mất

S p (l ) lần chuyển. Được phép sử dụng tất cả các cọc trong khi chuyển.
Bước 2. Giữ nguyên cọc 3 chứa l đĩa trên cùng. Chuyển n − l đĩa từ cọc 0 tới
cọc đích, sử dụng n − 1 cọc cịn lại (vì cọc 3 đang được dùng để chứa l đĩa
nhỏ nhất), mất S p −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 3 tới cọc đích, mất S p (l )
lần chuyển nữa. Được phép sử dụng tất cả các đĩa.
Như vậy, tổng cộng cần 2 S p (l ) + S p −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.

8


Thuật toán Frame-Stewart với cách chọn l như trên cho phép tìm ra một (một
vài) giá trị i sao cho
2S p (i ) + S p −1 (n − i ) = min { 2 S p (l ) + S p −1 (n − l )} .
1≤l ≤ n

Nói cách khác, các giá trị i thỏa mãn công thức trên là số bước tối ưu cần
thiết trong lớp các thuật toán đề nghị.
B. M. Stewart và J. S. Frame cũng đã chứng minh rằng, nếu n là số tam giác
n = tk , thì cách chọn tối ưu nhất cho l là l = k , trong khi đó nếu tk −1 < n < tk

thì cả hai giá trị k − 1 và k đều là cách chọn tối ưu cho l . Như vậy, B. M.
Stewart và J. S. Frame đã đề xuất thuật toán giải cho bài tốn Tháp Hà Nội
với số cọc bất kì. Thuật toán này trùng với lời giải của H. E. Dudeney trong
các trường hợp riêng nêu trên. Ta cũng lưu ý rằng, khác với trường hợp bài
toán với ba cọc, lời giải cho bài tốn với bốn cọc có thể là không duy nhất.
Hơn nữa, như ta đã biết, số lần chuyển đĩa cho bài toán ba cọc là
S3 (n) = 2 n − 1 , nên S3 (n) sẽ tăng theo hàm mũ. Tuy nhiên, trong trường hợp
số cọc p ≥ 4 , phân tích thuật tốn Frame- Stewart, Stockmeyer 1994 [11] phát

hiện ra rằng, độ phức tạp của thuật toán là dưới mũ (sub-exponential), cỡ

( ) cho k = 4.

Θ n2

n

Như vậy, ý tưởng cơ bản của thuật toán Frame-Stewart cho bài toán bốn cọc
là sử dụng chiến lược chia để trị (hay dùng trong các thuật toán tin học). Cụ
thể như sau: Chia n đĩa thành hai phần, phần trên gồm l đĩa có kích thước
nhỏ, phần dưới chứa n − l đĩa có kích thước lớn. Chuyển l đĩa trên cùng từ
cọc thứ nhất sang cọc thứ tư bằng cách giải bài toán ba cọc với l đĩa nhỏ.
Tiếp tục giải bài ba cọc với n − l đĩa lớn. Sau đó lại giải bài tốn ba cọc với l
đĩa để chuyển l đĩa về cọc đã chứa n − l đĩa lớn và bài toán đã giải xong.
Tuy nhiên, Otto Dunkel [2], tổng biên tập của tạp chí The Americal Mathematical
Montly khi cho đăng hai lời giải của Frame và Stewart đã chỉ ra rằng: Chứng minh
tính tối ưu của Frame và Stewart chỉ áp dụng được cho các thuật toán của một
9


lược đồ chung mô tả bởi Frame và Stewart mà thơi. Nói cách khác, Frame và
Stewart mới chỉ chứng minh được rằng: trong số tất cả các giá trị có thể của l
(theo thuật tốn của hai Ơng) phải có ít nhất một giá trị i làm cực tiểu số lần
chuyển. Hai ơng chưa chứng minh rằng mọi thuật tốn tối ưu bắt buộc phải có
dạng trên. Và điều này cho tới nay vẫn chưa chứng minh được. Vì vậy lời giải của
Frame và Stewart cần phải coi một cách đúng đắn là lời giải giả định là tối ưu
(presumed optimal solution), chứ chưa chứng minh được là lời giải tối ưu. Từ
1941 đến nay, rất nhiều người khác đã nghiên cứu thuật toán này. Gần đây một số
tác giả đề nghị một số thuật toán hồi qui tương đương với thuật tốn Frame

-Stewart (xem [14]). Nhưng tính tối ưu của thuật toán vẫn chưa được chứng minh.
Đây là một ví dụ tiêu biểu cho thấy: từ một bài tốn đơn giản, có thể giải
được, nhưng bằng cách nới lỏng một số ràng buộc của nó (tăng thêm số cọc),
thì lại trở thành khó hơn rất nhiều, do xuất hiện những vấn đề mới (sự tồn tại,
tính duy nhất, tính tối ưu của nghiệm).
Việc chưa chứng minh được tính tối ưu của thuật toán Frame –Stewart cho bài
toán với bốn hoặc nhiều cọc là tối ưu không suy ra rằng khơng tồn tại thuật
tố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 tốn Frame-Stewart và các cải biên của nó cũng đã cho lời
giải được giả định là tối ưu (presumed-optimal solution), cho phép lập trình
giải bài tốn tháp Hà Nội với số cọc bất kì. Tính tối ưu của thuật tốn FrameStewart đã được kiểm tra trên máy tính cho số đĩa nhỏ hơn 30.
Định lí 2

([12]) Số bước chuyển giả định là tối ưu trong thuật toán Frame

Stewart cho bài toán bốn cọc là
R (n) = (l − 1)2l − (
trong đó l là số tự nhiên gần

l (l − 1)
− n)2l −1 + 1,
2

2n nhất.

10


Chương 2

TRÒ CHƠI THÁP HÀ NỘI VỚI ĐĨA MÀU
2.1 Các biến thể của trò chơi tháp Hà Nội
Trò chơi tháp Hà Nội có rất nhiều biến thể. Trong [5], trang 303, E. Lucas, tác
giả của trò chơi tháp Hà Nội, đã nhận xét như sau: Le nombre des problèms
que l’on peut se poser sur la nouvelle Tour d’Hanoi est incalculable (Số bài
tốn có thể tạo ra trị chơi tháp Hà Nội mới là khơng tính được).
Mọi biến thể của trị chơi Tháp Hà Nội đều chứa các cọc và các đĩa, các đĩa
được đặt trên các cọc. Các qui tắc chung sau đây phải được thỏa mãn:
1) Các cọc là có thể phân biệt được (distinguishable);
2) Các đĩa là có thể phân biệt được;
3) Đĩa luôn nằm trên cọc trong suốt thời gian chơi, ngoại trừ khi chuyển
động;
4) Một hoặc nhiều đĩa chỉ có thể chuyển động từ đỉnh của cọc đĩa.
5) Trò chơi: Cho một phân bố ban đầu của các đĩa trên các cọc (trạng thái ban
đầu) và một phân bố cuối của các đĩa trên các cọc (trạng thái cuối). Hãy tìm
cách chuyển các đĩa từ trạng thái ban đầu sang trạng thái cuối theo những qui
tắc nhất định với số lần chuyển đĩa ít nhất.
Ngồi những qui tắc trên, có thể cịn có một số hạn chế hoặc qui định khác
nữa, chúng cung cấp một số vơ cùng lớn các biến thể khác nhau. Thí dụ:
1) Số cọc có thể là bất kì (như ta thường gặp);
2) Các cọc có thể được sắp thứ tự theo chiều cao, nghĩa là, theo số đĩa mà
chúng có thể chứa;
3) Các đĩa có thể được phân biệt và ưu tiên theo bán kính hoặc màu;
4) Có thể chấp nhận một số trạng thái khơng chính qui (irregular state).
5) Nhiều hơn một đĩa trên đỉnh có thể chuyển động đồng thời;
6) Có thể thêm một số hạn chế hoặc qui tắc phụ đặt lên chuyển động, mà
thậm chí qui tắc thiêng liêng bị bỏ qua;
7) Và cuối cùng, là tổ hợp của các qui tắc trên.

11



2.2 Một số thí dụ trị chơi tháp Hà Nội với đĩa màu
2.2.1 Bài toán 1
Một điều thú vị là chính Lucas, tác giả của trị chơi tháp Hà Nội, cũng đã xem
xét một số biến thể của trò chơi này. Trong [5], Ơng đã xét trị chơi tháp Hà
Nội với năm cọc và bốn nhóm đĩa với các màu khác nhau. Mỗi cọc có thể
chứa tất cả các đĩa. Mỗi nhóm đĩa gồm bốn đĩa và 16 đĩa có các kích thước
đơi một khác nhau. Nhóm có màu c ∈ { 1,2,3,4} chứa bốn đĩa d ∈ { 1,2,...,16}
với c = 1 + ( 16 − d ) mod 4. Nghĩa là:
Màu c = 1 ứng với các đĩa mang số d = 4,8,12,16.
Màu c = 2 ứng với các đĩa mang số d = 3,7,11,15.
Màu c = 3 ứng với các đĩa mang số d = 2,6,10,14.
Màu c = 4 ứng với các đĩa mang số d = 1,5,9,13.

Hình 2.1: Trạng thái ban đầu của trị chơi với bốn cọc đĩa màu (của Lucas)
Hình 2.1 (Hình vẽ trên trang đầu của bài báo của E. Lucas) chỉ ra trạng thái
ban đầu của trò chơi. Nhiệm vụ được đặt ra là đưa các đĩa về bốn cọc, mỗi
cọc chứa đủ bốn màu khác nhau. Nhiệm vụ này có thể được hoàn thành nhờ
sử dụng cọc giữa tuân theo qui tắc thiêng liêng ([5], Quatriem Problem-Bài
toán số 4).
2.2.2 Bài toán 2
12


Trò chơi gồm ba cọc được đánh số 0,1,2 và 8 đĩa. Cọc 1 chứa bốn đĩa màu (thí
dụ, màu đỏ, được kí hiệu là c = 1 ) gồm các đĩa được đánh số 2,4,6,8. Cọc 2
chứa 4 đĩa màu (thí dụ, màu xanh, được kí hiệu là c = 2 ), gồm các đĩa được
đánh số 1,3,5,7. Kích thước của các đĩa tăng dần từ 1 đến 8. Nhiệm vụ của trò
chơi là đưa tất cả các đĩa về cọc 0 theo quy tắc thiêng liêng (đĩa nhỏ hơn nằm

trên đĩa lớn hơn, Hình 2.2).

Hình 2.2: Trạng thái ban đầu và kết thúc của trường hợp Bài toán 2.
2.2.3 Bài tốn 3
Trị chơi gồm bốn cọc 0,1,2,3 và 12 đĩa. Cọc 1 chứa 4 đĩa mầu c = 1 gồm các
đĩa mang số 3,6,9,12. Cọc 2 chứa 4 đĩa mầu c = 2 gồm các đĩa màu được
đánh số 2,5,8,11. Cọc 3 chứa 4 đĩa mầu c = 3 gồm các đĩa mang số 1,4,7,10.
Kích thước của các đĩa tăng dần từ 1 đến 12. Nhiệm vụ của trò chơi là hợp
nhất hai màu c = 1 và c = 2 vào cọc 0 và cọc 3 với chồng đĩa mầu c=3 vẫn cố
định. Được phép di chuyển các đĩa màu c = 3 và sử dụng cọc 3 trong quá
trình thực hiện nhiệm vụ. Khi chơi phải tuân theo quy tắc thiêng liêng.
Giải pháp tối ưu cho bài toán này là 39 lần chuyển đĩa.
Thật vậy, giả sử cọc 1 chứa 4 đĩa màu đỏ kí hiệu là Đ3, Đ6, Đ9, Đ12. Cọc 2
chứa 4 đĩa mầu vàng kí hiệu là V2, V5, V8, V11 và cọc 3 chứa 4 đĩa mầu
xanh kí hiệu là X1, X4, X7, X10.

13


Qui trình chuyển đĩa như sau:
Bước 1: Chuyển đĩa Đ3 từ cọc 1 sang cọc 0.

Bước 2: Chuyển đĩa V2 từ cọc 2 sang cọc 0.

Bước 3: Chuyển đĩa X1 từ cọc 3 sang cọc 0.

Bước 4: Chuyển đĩa X4 từ cọc 3 sang cọc 2.

14



Bước 5: Chuyển đĩa Đ6 từ cọc 1 sang cọc 3.

Bước 6: Chuyển đĩa X4 từ cọc 2 sang cọc 1

Bước 7: Chuyển đĩa V5 từ cọc 2 sang cọc 3.

Bước 8: Chuyển đĩa X1 từ cọc 0 sang cọc 2.

Bước 9: Chuyển đĩa X4 từ cọc 1 sang cọc 3.

15


Bước 10: Chuyển đĩa V2 từ cọc 0 sang cọc 1.

Bước 11: Chuyển đĩa Đ3 từ cọc 0 sang cọc 3.

Bước 12: Chuyển đĩa V2 từ cọc 1 sang cọc 3.

Bước 13: Chuyển đĩa X1 từ cọc 2 sang cọc 3.

Bước 14: Chuyển đĩa V8 từ cọc 2 sang cọc 0.

16


Bước 15: Chuyển đĩa Đ9 từ cọc 1 sang cọc 2.

Bước 16: Chuyển đĩa V8 từ cọc 0 sang cọc 2.


Bước 17: Chuyển đĩa Đ12 từ cọc 1 sang cọc 0.

Bước 18: Chuyển đĩa V8 từ cọc 2 sang cọc 0.

Bước 19: Chuyển đĩa Đ9 từ cọc 2 sang cọc 1.

17


Bước 20: Chuyển đĩa V8 từ cọc 0 sang cọc 1.

Bước 21: Chuyển đĩa V11 từ cọc 2 sang cọc 0.

Bước 22: Chuyển đĩa V8 từ cọc 1 sang cọc 2.

Bước 23: Chuyển đĩa Đ9 từ cọc 1 sang cọc 0.

Bước 24: Chuyển đĩa V8 từ cọc 2 sang cọc 0.

18


Bước 25: Chuyển đĩa X1 từ cọc 3 sang cọc 0.

Bước 26: Chuyển đĩa V2 từ cọc 3 sang cọc 1.

Bước 27: Chuyển đĩa Đ3 từ cọc 3 sang cọc 2.

Bước 28: Chuyển đĩa V2 từ cọc 1 sang cọc 2.


Bước 29: Chuyển đĩa X1 từ cọc 0 sang cọc 2.

19


Bước 30: Chuyển đĩa X4 từ cọc 3 sang cọc 0.

Bước 31: Chuyển đĩa V5 từ cọc 3 sang cọc 1.

Bước 32: Chuyển đĩa X4 từ cọc 0 sang cọc 1.

Bước 33: Chuyển đĩa Đ6 từ cọc 3 sang cọc 0.

Bước 34: Chuyển đĩa X4 từ cọc 1 sang cọc 3.

20


Bước 35: Chuyển đĩa V5 từ cọc 1 sang cọc 0.

Bước 36: Chuyển đĩa X1 từ cọc 2 sang cọc 3.

Bước 37: Chuyển đĩa V2 từ cọc2 sang cọc 1.

Bước 38: Chuyển đĩa Đ3 từ cọc 2 sang cọc 0.

Bước 39: Chuyển đĩa V2 từ cọc 1 sang cọc 0.

Hình 2.3: Giải pháp các bước di chuyển tối ưu cho Bài toán 3


21


Hình 2.4: Tất cả các giải pháp cho Bài tốn 3 chuyển trạng thái ban đầu (ba
cọc 1, 2, 3, mỗi cọc bốn đĩa. Cọc 0 trống).
Màu sắc của một đoạn thẳng ứng với màu của đĩa di chuyển.
Nhận xét ([4], trang 91) Nếu trạng thái kết thúc là các đĩa ở cọc 1 mầu c = 1
vẫn cố định, hai mầu c = 2 và c = 3 được kết hợp vào cọc 0. Số lần di chuyển
tối ưu trong trường hợp này là 32. Đối với trường hợp kết thúc các đĩa ở cọc 2
mầu c = 2 vẫn cố định, mầu c = 1 và c = 3 được kết hợp vào cọc 0 thì số di
chuyển là 37 lần.
Số lần tối thiểu của di chuyển cần thiết để nối tiếp hai màu sắc bằng cách sử
dụng tất cả 5 cọc là khoảng từ 31 lần di chuyển với các đĩa tương đối nhỏ cố
định, và 23 lần di chuyển cho những đĩa tương đối lớn nhất cố định.
2.3 Trò chơi tháp Hà Nội đen trắng
Năm 2010, Stockmeyer và F. Lunnon trong [12] đã đưa ra một phiên bản của
bài toán tháp Hà Nội với đĩa màu, được gọi là Tháp Hà Nội đen trắng (the
Black and White Hanoi Tower-BWTH).
Dưới đây sẽ trình bày các thuật tốn giải bốn phiên bản của bài toán BWTH.
Các thuật toán này sử dụng một thuật toán chung giải tháp Hà Nội cổ điển
(mà ở đây là phương pháp Hanoi) như là một chương trình con.
Giả code (pseudo-code) của thuật tốn giải bài toán tháp Hà Nội cổ điển được
viết như sau.
procedure Hanoi (bottom, top, stack, from, via, to)
if (top<=bottom)
Hanoi (bottom-1, top, stack, from, to, via);

22



Move (bottom, stack, from, to);
Hanoi (bottom-1, top, stack, via, from, to);
Thuật toán Hanoi chuyển một chồng đĩa (được đánh số từ dưới lên trên theo
thứ tự nhỏ dần, nghĩa là đĩa số 1 luôn là đĩa nhỏ nhất trong bài toán tháp Hà
Nội cổ điển). Cọc via là cọc trung gian. Đĩa đánh số bé hơn là top, đĩa trong
một chồng được chuyển từ một cọc này (kí hiệu là from) sang cọc khác (kí
hiệu là to).
Bước chuyển Move (disk, stack, from, to) nghĩa là: di chuyển một đĩa trong
một chồng đĩa từ một cọc này (kí hiệu là from) sang cọc khác (kí hiệu là to).
2.3.1 Trị chơi tháp Hà Nội đen trắng: Phiên bản 1
Bài toán: BWTH gồm bốn cọc đánh số từ 0 đến 3. Tháp 0 với n đĩa trắng lúc
đầu nằm trên cọc 0 và tháp 1 với n đĩa đen lúc đầu nằm trên cọc 2. Mỗi tập
đĩa chứa các đĩa với đường kính khác nhau và hai tập đĩa là đồng nhất, ngoại
trừ màu của chúng. Các qui tắc chơi như trong bài toán tháp Hà Nội cổ điển,
ngoại trừ qui tắc thiêng liêng (the divine rule) được bổ sung thêm: “không
được đặt đĩa màu này lên đĩa màu khác có cùng kích thước”.
Mục đích của trị chơi là chuyển tháp đĩa trắng về cọc 2 và tháp các đĩa đen về
cọc 0. Hình 2.5 chỉ ra một cấu hình ban đầu với n = 5, và một cấu hình hợp lệ
khác của trị chơi. Cấu hình này thỏa mãn qui tắc thiêng liêng mở rộng là
“mỗi cọc chỉ được phép chứa một đĩa có kích thước đã cho”. Do đó tại một
thời điểm mỗi cọc khơng được phép chứa q n đĩa.

Hình 2.5: Cấu hình ban đầu và một cấu hình hợp lệ

23


Một thuật toán hiển nhiên là sử dụng thuật toán Tháp Hà Nội cho ba cọc, ta sẽ
chuyển tháp 0 (các đĩa trắng) về cọc 1, bằng cách sử dụng cọc 3 làm cọc trung

gian. Khi ấy theo Định lí 1 trong chương 1, cần 2n − 1 lần chuyển. Tương tự,
chuyển tháp 1 (các đĩa đen) về cọc 0 nhờ sử dụng cọc 3 làm cọc trung gian.
Lại mất 2n − 1 lần chuyển nữa. Sau đó chuyển tháp các đĩa trắng từ cọc 1 về
cọc 2 (sử dụng cọc 3 làm cọc trung gian). Như vậy, số bước chuyển không
n
vượt quá 3 ( 2 − 1) .

Tuy nhiên, Stockmeyer và F. Lunnon trong [12] đã đưa ra thuật toán giải tối
ưu bài toán BWTH với số bước chuyển ít hơn. Ta có
Định lí 3 [12] Số bước chuyển tối ưu giải bài toán BWTH với n đĩa trắng và
n đĩa đen là 2n+1 − 1 bước.
Các bước thực hiện:
Dưới đây trình bày thuật tốn tối ưu cho số lần di chuyển cần thiết trong
Phiên bản 1, sử dụng nguyên lý quy nạp "đĩa nhỏ" do Stockmeyer và F.
Lunnon đề xuất (small disk induction principle, xem [12]).
Giả sử chúng ta có một thuật tốn cho hai đống đĩa, mỗi đống gồm n − 1 đĩa,
và cần tìm một thuật toán giải bài toán cho hai đống, mỗi đống gồm n đĩa.
Nếu đã biết thuật toán cho n − 1. Khi ấy ta có thể áp dụng thuật tốn này để
tìm ra số lần di chuyển với 2(n − 1) đĩa lớn (các đĩa được đánh số 2 đến n ở
mỗi đống). Xen vào đó là các di chuyển của các đĩa nhỏ nhất (hai đĩa số 1)
khi cần.
Nhận xét rằng, trong lời giải tối ưu, cần phải ít nhất một lần chuyển đĩa nhỏ
nhất giữa hai lần chuyển các đĩa lớn. Thật vậy, khi chuyển các đĩa lớn thì hai
đĩa nhỏ nhất phải nằm trên hai cọc khác nhau trong bốn cọc. Do đó, nếu
khơng chuyển đĩa nhỏ, ta chỉ có thể chuyển qua chuyển lại các đĩa lớn trên hai
cọc cịn lại. Nhưng như vậy thì thuật tốn không tối ưu.

24



Vì lần chuyển đầu tiên và lần cuối cùng phải chuyển đĩa nhỏ nhất. Mà giữa
hai lần chuyển đĩa lớn phải có ít nhất một lần chuyển đĩa nhỏ, nên tổng số lần
chuyển đĩa nhỏ nhất phải nhiều hơn tổng số lần chuyển các đĩa lớn ít nhất là 1
lần chuyển.
Gọi M 1 (n) là số lần chuyển tối ưu của thuật tốn cho Phiên bản 1. Khi đó
phải mất ít nhất là M 1 ( n − 1) lần chuyển các đĩa lớn, vì nếu bỏ hai đĩa nhỏ
nhất thì số lần chuyển các đĩa lớn tạo thành một thuật tốn cho trị chơi với
đống đĩa có số lượng đĩa là n − 1 . Hơn nữa, như đã phân tích ở trên, thì các
đĩa nhỏ nhất phải di chuyển ít nhất là M 1 (n − 1) + 1 lần chuyển. Vậy tổng số
lần chuyển n đĩa ( n ≥ 2 ) ít nhất 2M 1 (n − 1) + 1. Vì M 1 ( 1) = 3 nên theo qui
nạp ta có thể chứng minh
M 1 (n) ≥ 2n+1 − 1 .
Như thế, thuật toán của Stockmeyer và F. Lunnon [12] cho thấy, số lần di
chuyển tối ưu cho Phiên bản 1 là 2n+1 − 1 bước, nhỏ hơn số lần di chuyển (
3(2 n − 1) bước), nếu áp dụng thuật toán tháp Hà Nội cho ba cọc cổ điển.
Thuật toán của Phiên bản 1
Thuật toán procedure Free như là một thuật toán tối ưu để di chuyển cho
Phiên bản 1, trong đó n là số lượng đĩa trong mỗi đống đĩa. Ở đây n là số
dương.
procedure Free (n)
Hanoi (n-1, 1, 0, 0, 3, 1);
Move (n, 0, 0, 3);
Hanoi (n, 1, 1, 2, 3, 0);
Move (n, 0, 3, 2);
Hanoi (n-1, 1, 0, 1, 3, 2)
Giải thích thuật toán procedure Free (n)
25



×