Giải chi tiết chuyên đề tin học định hướng Khoa học máy tính 11 Kết nối mới bài 4 Bài toán tháp Hà Nội

Giải bài 4 Bài toán tháp Hà Nội sách Chuyên đề Tin học 11 định hướng Khoa học máy tính kết nối tri thức. Phần đáp án chuẩn, hướng dẫn giải chi tiết cho từng bài tập có trong chương trình học của sách giáo khoa. Hi vọng, các em học sinh hiểu và nắm vững kiến thức bài học.

Khởi động

Câu hỏi.  Năm 1883, tại một số tỉnh thành của Việt Nam và tại Pháp xuất hiện một trò chơi được quảng cáo với tên “Tháp Hà Nội” (La tour d’Hanoi). Trò chơi này được bán rộng rãi và theo một tờ quảng cáo vào thời gian đó là sẽ trao giải hàng triệu francs cho ai có thể giải được tất cả các mức từ thấp đến cao nhất là 64 đĩa. Trong tờ rơi đó cũng đưa ra con số 18446744073709551615 bước chuyển cho trường hợp 64 đĩa và khuyến cáo rằng sẽ cần hàng tỉ năm để giải được trò chơi này. Trò chơi như sau: có ba cái cọc (ví dụ cọc 1, 2, 3) và n cái đĩa được xếp tại cọc 1 theo thứ tự to dần từ trên xuống. Yêu cầu chuyển n đĩa này sang cọc 3 với điều kiện là được dùng cọc 2 làm trung gian, mỗi lần chỉ được phép chuyển 1 đĩa và không cho phép đặt đĩa to chồng lên đĩa nhỏ.

Em hãy suy nghĩ và thử giải trò chơi trên với n = 1,2.

Hướng dẫn trả lời:

Với n = 2, ta có hai cái đĩa, ta sẽ di chuyển đĩa lớn nhất từ cọc 1 sang cọc trung gian 2, sau đó di chuyển đĩa nhỏ từ cọc 1 sang cọc đích 3, và cuối cùng di chuyển đĩa lớn từ cọc 2 sang cọc đích 3

1. Mô tả bài toán tháp Hà Nội

Câu hỏi 1. Đọc, tìm hiểu bài toán Tháp Hà Nội và thực hiện giải trò chơi này với số lượng đĩa nhỏ (1, 2, 3). Em có nhận xét gì về lời giải bài toán với n = 1, 2, 3?

Hướng dẫn trả lời:

* Với n = 1, bài toán trở nên rất đơn giản, chỉ cần chuyển đĩa từ cột xuất phát sang cột đích là xong

* Với n = 1, bài toán trở nên rất đơn giản, chỉ cần chuyển đĩa từ cột xuất phát sang cột đích là xong

* Với n = 2, ta sẽ thực hiện theo các bước sau:

* Với n = 2, ta sẽ thực hiện theo các bước sau:

 

* Với n = 3, ta sẽ thực hiện theo các bước sau:

* Với n = 3, ta sẽ thực hiện theo các bước sau:

Câu hỏi 1. Mô tả lời giải bài toán với trường hợp n = 1, 2, 3 ở trên (không dùng hình vẽ mô tả)

Hướng dẫn trả lời:

* Với n = 1, bài toán trở nên rất đơn giản, chỉ cần chuyển đĩa từ cột xuất phát sang cột đích là xong.

* Với n = 2, ta sẽ thực hiện theo các bước sau:

Chuyển đĩa nhỏ từ cột xuất phát sang cột trung gian.

Chuyển đĩa lớn từ cột xuất phát sang cột đích.

Chuyển đĩa nhỏ từ cột trung gian sang cột đích.

* Với n = 3, ta sẽ thực hiện theo các bước sau:

Chuyển hai đĩa nhỏ từ cột xuất phát sang cột trung gian.

Chuyển đĩa lớn từ cột xuất phát sang cột đích.

Chuyển hai đĩa nhỏ từ cột trung gian sang cột đích.

Chuyển đĩa nhỏ từ cột xuất phát sang cột trung gian.

Chuyển đĩa lớn từ cột đích sang cột xuất phát.

Chuyển đĩa nhỏ từ cột trung gian sang cột đích.

Chuyển hai đĩa nhỏ từ cột xuất phát sang cột trung gian.

Chuyển đĩa lớn từ cột xuất phát sang cột đích.

Chuyển hai đĩa nhỏ từ cột trung gian sang cột đích.

Câu hỏi 2. Mô tả lời giải bài toán với n = 1, 2, 3 nếu yêu cầu là di chuyển các đĩa từ cọc 1 sang cọc 2 (cọc 3 là cọc trung gian).

Hướng dẫn trả lời:

* Giải trò chơi Tháp Hà Nội với n=1:

Di chuyển đĩa 1 từ cọc 1 sang cọc 2.

        * Giải trò chơi Tháp Hà Nội với n=2:

Di chuyển đĩa 1 từ cọc 1 sang cọc 3.

Di chuyển đĩa 2 từ cọc 1 sang cọc 2.

Di chuyển đĩa 1 từ cọc 3 sang cọc 2.

        * Giải trò chơi Tháp Hà Nội với n=3:

Di chuyển đĩa 1 từ cọc 1 sang cọc 2.

Di chuyển đĩa 2 từ cọc 1 sang cọc 3.

Di chuyển đĩa 1 từ cọc 2 sang cọc 3.

Di chuyển đĩa 3 từ cọc 1 sang cọc 2.

Di chuyển đĩa 1 từ cọc 3 sang cọc 1.

Di chuyển đĩa 2 từ cọc 3 sang cọc 2.

Di chuyển đĩa 1 từ cọc 1 sang cọc 2.

Nhận xét: Với n = 1, chỉ cần di chuyển một đĩa từ cọc 1 sang cọc 2. Với n = 2, ta thực hiện ba lần di chuyển. Với n = 3, ta thực hiện bảy lần di chuyển. Với mỗi tăng thêm một đĩa, số lần di chuyển tăng lên gấp đôi và cộng thêm một.

2. Ý tưởng giải bài toán tháp Hà Nội

Câu hỏi 1. Đọc, trao đổi để hiểu được ý tưởng thiết kế đệ quy cho lời giải bài toán Tháp Hà Nội.

Hướng dẫn trả lời:

Ý tưởng giải bài toán Tháp Hà Nội có n đĩa từ cọc 1 sang cọc 3 như sau:

Bước 1. Chuyển n - 1 đĩa từ cọc 1 sang cọc 2 lấy cọc 5 làm trung gian.

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

Bước 3. Chuyển n - 1 đĩa từ cọc 2 sang cọc 3 lấy cọc 1 làm trung gian.

Câu hỏi 2. Viết sơ đồ chi tiết giải bài toán Tháp Hà Nội cho trường hợp n = 4. Tính H(4).

Hướng dẫn trả lời:

1. Di chuyển 3 đĩa từ cọc 1 sang cọc 3:

1.1 Di chuyển 2 đĩa từ cọc 1 sang cọc 2:

- Di chuyển 1 đĩa từ cọc 1 sang cọc 3.

- Di chuyển 1 đĩa từ cọc 1 sang cọc 2.

- Di chuyển 1 đĩa từ cọc 3 sang cọc 2.

1.2. Di chuyển 1 đĩa từ cọc 1 sang cọc 3.

1.3. Di chuyển 2 đĩa từ cọc 2 sang cọc 3:

- Di chuyển 1 đĩa từ cọc 2 sang cọc 1.

- Di chuyển 1 đĩa từ cọc 2 sang cọc 3

- Di chuyển 1 đĩa từ cọc 1 sang cọc 3.

2. Di chuyển 1 đĩa từ cọc 1 sang cọc 2.

3. Di chuyển 3 đĩa từ cọc 3 sang cọc 2:

3.1 Di chuyển 2 đĩa từ cọc 3 sang cọc 1:

- Di chuyển 1 đĩa từ cọc 3 sang cọc 2. 3.1.2

- Di chuyển 1 đĩa từ cọc 3 sang cọc 1.

- Di chuyển 1 đĩa từ cọc 2 sang cọc 1.

3.2 Di chuyển 1 đĩa từ cọc 3 sang cọc 2.

3.3 Di chuyển 2 đĩa từ cọc 1 sang cọc 2:

- Di chuyển 1 đĩa từ cọc 1 sang cọc 3.

- Di chuyển 1 đĩa từ cọc 1 sang cọc 2.

- Di chuyển 1 đĩa từ cọc 3 sang cọc 2.

Vậy, tổng số bước để di chuyển 4 đĩa theo quy trình trên là:

- Di chuyển 3 đĩa từ cọc 1 sang cọc 2: 7 bước

- Di chuyển đĩa còn lại từ cọc 1 sang cọc 3: 1 bước

- Di chuyển 3 đĩa từ cọc 2 sang cọc 3: 7 bước

Vậy tổng số bước cần thiết để di chuyển 4 đĩa trong bài toán tháp Hà Nội là 15 bước.

3. Thiết lập chương trình giải bài toán Hà Nội

Câu hỏi 1. Gọi Hanoi(n, i, j, k) là bài toán yêu cầu chuyển n đĩa đang xếp ở cọc i sang cọc j lấy cọc k làm trung gian. Các đĩa được đánh số từ 1 đến n và xếp theo thứ tự từ trên xuống. Các điều kiện của việc chuyển như sau:

1. Các đĩa đánh số từ 1 đến n và có kích thước tăng dần.

2. Mỗi lần chỉ được phép chuyển một đĩa.3. Không được phép xếp đĩa to lên trên đĩa nhỏ.

Em hãy thiết kế thuật toán đệ quy tổng quát cho bài toán trên. Yêu cầu phải mô tả chi tiết từng bước chuyển.

Hướng dẫn trả lời:

Mô tả chi tiết từng bước chuyển như sau:

1. Khi n = 1:

Di chuyển đĩa từ cọc i sang cọc j.

2. Khi n > 1:

- Bước 1: Chuyển n - 1 đĩa từ cọc i sang cọc k:

Gọi lại thuật toán Hanoi(n-1, i, k, j) để chuyển n - 1 đĩa từ cọc i sang cọc k.

- Bước 2: Chuyển đĩa lớn nhất từ cọc i sang cọc j:

Di chuyển đĩa từ cọc i sang cọc j.

- Bước 3: Chuyển n - 1 đĩa từ cọc k sang cọc j:

Gọi lại thuật toán Hanoi(n-1, k, j, i) để chuyển n - 1 đĩa từ cọc k sang cọc j.

Câu hỏi 1. Tính các giá trị H(2), H(3), H(4), H(5) của bài toán Tháp Hà Nội.

Hướng dẫn trả lời:

Để tính các giá trị H(2), H(3), H(4), H(5) của bài toán Tháp Hà Nội, ta có thể sử dụng công thức như sau:

H(2) = 2

H(3) = 2 * H(2) + 1 = 2 * 2 + 1 = 5

H(4) = 2 * H(3) + 1 = 2 * 5 + 1 = 11

H(5) = 2 * H(4) + 1 = 2 * 11 + 1 = 23

Vậy H(2) = 2, H(3) = 5, H(4) = 11, H(5) = 23.

Câu hỏi 2.  Viết chương trình đệ quy để tính giá trị H(n) của bài toán Tháp Hà Nội.

Hướng dẫn trả lời:

Viết chương trình đệ quy để tính giá trị H(n) của bài toán Tháp Hà Nội

Luyện tập

Câu hỏi 1. Viết chương trình đệ quy để tính giá trị H(n) của bài toán Tháp Hà Nội.

Hướng dẫn trả lời:

Câu hỏi 1. Viết chương trình đệ quy để tính giá trị H(n) của bài toán Tháp Hà Nội.

Câu hỏi 1. Viết chương trình rút gọn của hàm Hanoi(n, i, j, k) như sau và kiểm tra kết quả.

  1. def Hanoi(n, i, j, k):
  2. if n>0:
  3. Hanoi(n-1, i, k, j)
  4. print(" Chuyển địa", n, " từ cọc", i, "sang cọc",j)
  5. Hanoi( n-1, k, j, i)

Hướng dẫn trả lời:

Chương trình viết đúng. Thử với n = 4, kết quả thu được như sau:

Chương trình viết đúng. Thử với n = 4, kết quả thu được như sau:

Vận dụng

 

Câu hỏi 1. Hãy chứng minh công thức H(n) = 2n-1bằng quy nạp toán học. Hãy tính H(64) và so sánh với con số các bước đã được đưa ra trong tờ quảng cáo của trò chơi vào năm 1883.

Hướng dẫn trả lời:

- Nếu chỉ có một đĩa (n=1), H(n) = 1.

- Nếu có n đĩa, để chuyển tất cả các đĩa từ tháp ban đầu sang tháp đích, ta phải thực hiện các bước sau:

Chuyển n-1 đĩa từ tháp ban đầu sang tháp trung gian.

Chuyển đĩa cuối cùng (đĩa lớn nhất) từ tháp ban đầu sang tháp đích.

Chuyển n-1 đĩa từ tháp trung gian sang tháp đích.

Số bước chuyển tất cả các đĩa là H(n) = 2 * H(n-1) + 1.

- Ta sẽ chứng minh công thức này bằng phương pháp quy nạp toán học:

Bước 1: Giả sử công thức đúng với n-1, tức là H(n-1) = 2^(n-1) - 1

Bước 2: Chứng minh công thức đúng với n, tức là H(n) = 2^n - 1

Ta có:

H(n) = 2 * H(n-1) + 1 (theo công thức đề bài)

= 2 * (2^(n-1) - 1) + 1 (theo giả sử ở bước 1)

= 2^n - 2 + 1

= 2^n - 1

Vậy ta đã chứng minh được công thức đúng với mọi n.

Để tính H(64), ta áp dụng công thức đã chứng minh:

H(64) = 2^64 - 1

= 18446744073709551615

Vậy H(64) = 18446744073709551615 trùng với con số ở trên bài báo

Câu hỏi 2. Giả sử cần lưu dãy các bước chuyển của bài toán Tháp Hà Nội vào một danh sách để có thể sử dụng lại về sau. Mỗi bước chuyển dạng k: i -> j sẽ được lưu trong một bộ ba số (k, i, j). Viết chương trình giải bài toán Tháp Hà Nội tổng quát Hanoi(n, i, j, k) chuyển n đĩa từ cọc i sang cọc j lấy cọc k làm trung gian với yêu cầu lưu tất cả các bước chuyển vào một danh sách (list). Như vậy, hàm Hanoi(n, i, j, k) sẽ trả về một danh sách bao gồm các bộ ba số dạng như đã mô tả ở trên.

Hướng dẫn trả lời:

Để giải bài toán Tháp Hà Nội và lưu các bước chuyển vào một danh sách, ta có thể sử dụng thuật toán đệ quy. Trong mỗi lần đệ quy, ta sẽ chuyển n-1 đĩa từ cọc ban đầu sang cọc trung gian, sau đó chuyển đĩa lớn nhất từ cọc ban đầu sang cọc đích và cuối cùng chuyển n-1 đĩa từ cọc trung gian sang cọc đích.

Chương trình

Ví dụ, để chuyển 3 đĩa từ cọc A sang cọc C lấy cọc B làm trung gian, ta có thể gọi hàm Hanoi(3, 'A', 'C', 'B') và kết quả trả về sẽ là danh sách các bước chuyển [(1, 'A', 'C'), (2, 'A', 'B'), (1, 'C', 'B'), (3, 'A', 'C'), (1, 'B', 'A'), (2, 'B', 'C'), (1, 'A', 'C')].

Tìm kiếm google: Giải chuyên đề tin học KHMT 11 KNTT bài 4 Bài toán tháp Hà Nội, giải chuyên đề tin học định hướng Khoa học máy tính 11 kết nối tri thức bài 4 Bài toán tháp Hà Nội, giải chuyên đề tin học KHMT 11 KNTT bài 4 Bài toán tháp Hà Nội

Xem thêm các môn học

Giải chuyên đề khoa học máy tính 11 kết nối tri thức


Đia chỉ: Tòa nhà TH Office, 90 Khuất Duy Tiến, Thanh Xuân, Hà Nội
Điện thoại hỗ trợ: Fidutech - click vào đây
Chúng tôi trên Yotube
Cùng hệ thống: baivan.net - Kenhgiaovien.com - tech12h.com