Đề tài luận văn Mô phỏng thuật toán đệ quy nghiên cứu tổng quan về mô phỏng, đưa ra được một quy trình cho việc thiết kế mô phỏng một thuật toán và cách thức cài đặt quá trình mô phỏng nhằm giúp cho việc học và hiểu về ngôn ngữ Đệ quy tốt nhất; đồng thời nghiên cứu, phân tích những khó khăn khi học tập, giảng dạy các thuật toán cơ bản trong cấu trúc dữ liệu và một số giải thuật. Mời các bạn cùng tham khảo.
Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thông Tin_ĐHSPHN Luận văn tốt nghiệp_ Mơ thuật tốn đệ quy TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN * * * * Luận văn tốt nghiệp Đề tài: Mơ thuật tốn ĐỆ QUY Giáo viên hướng dẫn: PGS.TS Vũ Đình Hồ Sinh viên: Nguyễn Thị Hải Lớp A_ K54_ Khoa Công Nghệ Thông Tin Năm 2008 NĂM 2008 Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thơng Tin_ĐHSPHN Luận văn tốt nghiệp_ Mơ thuật tốn đệ quy MỤC LỤC: A Phần 1:Phần mở đầu Lý chọn đề tài Mục tiêu nhiệm vụ nghiên cứu đề tài Đối tượng phạm vi nghiên cứu Cấu trúc luận văn B Phần 2: Phần nội dung Mơ thuật tốn: 1.1 Khái niệm mơ thuật tốn 1.2 Lịch sử mơ 1.3 Tác dụng mơ thuật tốn 1.4 Kiến trúc hệ thống mô 1.5 Một số khó khăn thực mơ 1.6 Lựa chọn ngơn ngữ lập trình cài đặt mơ 1.7 u cầu đạt thực mô Đệ quy: 2.1 2.1.1 Vai trò định nghĩa đệ quy 2.1.2 Giải thuật đệ quy 2.1.3 Thủ tục đệ quy 2.1.4 Thiết kế thủ tục đệ quy 2.2 Đệ quy quay lui gì? 2.3 Cấu trúc đặc điểm đệ quy 2.4 2.5 Đệ quy gì? 2.3.1 Cấu trúc 2.3.2 Đặc điểm Ưu nhược điểm thực đệ quy 2.4.1 Ưu điểm 2.4.2 Nhược điểm Đệ quy nên dùng nào? Một số toán thường gặp Đệ quy: 3.1 Bài toán tháp Hà Nội 3.1.1 NĂM 2008 Nhận xét Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thông Tin_ĐHSPHN Luận văn tốt nghiệp_ Mơ thuật tốn đệ quy 3.1.2 Phân tích 3.1.3 Thuật giải 3.1.4 Giải thuật 3.1.5 Độ phức tạp thuật toán 3.2 Bài toán quân hậu 3.2.1 Bài toán 3.2.2 Phân tích 3.2.3 Thuật giải 3.2.4 Giải thuật 3.2.5 Nhận xét Khó khăn dạy tốn Đệ quy: 4.1 Khó khăn chung 4.2 Bài tốn tháp Hà Nội 4.3 Bài toán quân hậu C Phần 3: Phân tích thiết kế hệ thống cho tốn mơ I Lựa chọn ngơn ngữ C# Ngôn ngữ C# Đặc điểm ngôn ngữ C# Các phương thức hàm thư viện Các lớp xử lý đồ hoạ Các bước xây dựng chương trình đồ hoạ II Thiết kế thuật tốn mơ D Code giao diện chương trình Code chương trình Giao diện chương trình Sử dụng chương trình mơ E Kết luận F Tài liệu tham khảo G Nhận xét thầy cô NĂM 2008 Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thơng Tin_ĐHSPHN Luận văn tốt nghiệp_ Mơ thuật tốn đệ quy Phần 1: Phần mở đầu Lý chọn đề tài: Cấu trúc dự liệu chương trình bao gồm thuật tốn xếp, lựa chọn, đệ quy, ngăn xếp…Mỗi thuật tốn có độ khó riêng, địi hỏi khả hiểu dõ thuật tốn thật xác có liên tưởng thật phong phú để giúp nguời học hiểu thật dõ thuật tốn đó.Trong phần tơi nghiên cứu Đệ Quy để học muốn tìm hiểu thật Đệ Quy bạn phải hiểu cách chạy cách thực thi nào.Đã có nhiều ý kiến cho học Đệ Quy khó việc áp dụng hạn chế thường hay gây tràn nhớ Nhưng ngược trở lại lại có vài ứng dụng phổ biến vài toán mà có dùng Đệ quy làm Chính điều mà việc mơ thuật tốn trọng nhiều.Nhờ việc mô mà việc học ngôn ngữ hay thuật toán dễ dàng hơn.Giúp cho trình dạy học trở nên đơn giản nhiều.Chính chúng tơi định xây dựng thuật tốn, cụ thể mơ thuật tốn Đệ Quy Mục tiêu nhiệm vụ nghiên cứu đề tài Nghiên cứu tổng quan mô Đưa quy trình cho việc thiết kế mơ thuật toán cách thức cài đặt trình mơ Giúp cho việc học hiểu ngơn ngữ Đệ quy tốt Nghiên cứu, phân tích khó khăn học tập, giảng dạy thuật toán cấu trúc liệu số giải thuật Từ thực xây dựng chương trình mơ cho chúng - Ứng dụng chương trình mô giảng dạy để đánh giá tiến tục điều chỉnh.Đưa thuật giải ưu việt nhất, giúp cho trình hiểu tốt Đối tượng phạm vi nghiên cứu: Nghiên cứu ngôn ngữ lập trình C# Nghiên cứu Đệ Quy vấn đề liên quan Nghiên cứu toán điển hình Đệ Quy Cấu trúc khố luận Chia làm phần: Phần 1: Phần mở đầu: NĂM 2008 Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thông Tin_ĐHSPHN Luận văn tốt nghiệp_ Mơ thuật tốn đệ quy Giới thiệu qua đề tài cấu trúc chung đề tài Phần 2: Phần nội dung: Các lý thuyết mơ thuật tốn vấn đề liên quan đến Đệ quy Phần 3: Phân tích thiết kế hệ thống cho tốn mơ Đệ Quy Phần 4: Code chương trình giao diện Đưa code đưa giao diện mô sau chương trình chạy hồn thành Phần 5: Kết luận: Tổng kết lại phần đạt được, tự đánh giá Phần 5: Tài liệu tham khảo Phần 5: Lời nhận xét thầy cô Phần : Phần nội dung 1.1 Mơ thuật tốn: Khái niệm mơ thuật tốn: Mơ thuật tốn trình tách liệu, thao tác, ngữ nghĩa tạo mơ đồ họa cho q trình [Stasko 1990] (xem [23]) Mơ thuật tốn thiết kế để giúp người dùng hiểu thuật tốn, đánh giá chương trình sửa lỗi chương trình Một chương trình máy tính chứa cấu trúc liệu thuật tốn mà thực thi Trong q trình thực thi chương trình, giá trị sở liệu thay đổi Mơ thuật tốn sử dụng biểu diễn đồ họa để biểu diễn cấu trúc liệu thay đổi giá trị sở liệu trạng thái Thông qua đó, người sử dụng xem bước thực thi chương trình nhờ hiểu chi tiết thuật tốn Mơ thuật tốn dùng để đánh giá chương trình có cách cung cấp mơ cho thành phần hệ thống, nhờ kiểm tra hiệu hệ thống Bên cạnh việc giúp người sử dụng hiểu hệ thống, mô thuật tốn cịn dùng để giúp thực q trình dị lỗi dễ dàng Để sử dụng mơ thuật tốn q trình dị lỗi chương trình, người sử dụng thích vào trạng thái chương trình để tạo lệnh mơ phỏng, sau chúng đưa vào hệ thống mơ thuật tốn để tạo mơ Người sử dụng xem chương trình họ thực NĂM 2008 Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thông Tin_ĐHSPHN Luận văn tốt nghiệp_ Mô thuật toán đệ quy nào, giá trị liệu bước bước ảnh hưởng tới bước sau Nó giúp người sử dụng tìm tất lỗi xảy chương trình 1.2 Lich sử mơ thuật tốn Mơ thuật tốn xây dựng từ hai thập kỷ gần Nhưng chương trình mơ thuật tốn Ken Knowlton Bell Telephone Laboratories mô ngôn ngữ liên kết danh sách vào năm 1966 Mô thuật toán phát triển mạnh vào đầu năm 80 kỷ 20 Vào năm 1981, video (sorting out sorting) xây dựng Ronald Baecker đại học Toronto coi khởi điểm lĩnh vực mô thuật tốn Từ nhà giáo dục sử dụng mơ thuật tốn để trợ giúp q trình dạy học Giữa năm 80 đầu năm 90, hai hệ thống có ảnh hưởng mạnh đến sau phát triển có ý nghĩa lớn tất hệ thống sau Hai hệ thống BALSA-I (Brown ALgorithm Simulator and Animator) [Brown 1984] TANGO (Transition-based Animation GeneratiOn) [Stasko 1990] BALSA-I hệ thống mơ thuật tốn tiếng rộng khắp Nó phát triển Marc Brown Robert Sedgewick trường đại học Brown BALSA-I hệ thống mơ thuật tốn tương tác mà hỗ trợ đồng thời nhiều nhìn cấu trúc liệu thuật tốn hiển thị nhiều thuật tốn thực thi đồng thời Sự phát triển động thúc đẩy nhà nghiên cứu khác tham gia vào việc phát triển hệ thống mô thuật toán khác Một hệ thống khác TANGO, phát triển John Stasko trường đại học Brown Sự bật TANGO mô hình path-transition để thiết kế mơ framework cho hệ thống mơ thuật tốn Nó đưa khái niệm framework mà chấp nhận số hệ thống sau kiến trúc sở chúng Kiến trúc mô tả mục Từ hai hệ thống BALSA TANGO phát triển, hệ thống sau hai hệ thống đáng ý phát triển BALSA-I có hệ thống sau BALSA-II [Brown 1988] BALSA-II hệ thống mơ thuật tốn vùng-độc lập thao tác ảnh với nhiều nhìn cung cấp trình tạo điều khiển dễ dàng TANGO khác, có nhiều hệ thống sau XTANGO [Stasko 1992] hệ thống trực tiếp sau TANGO POLKA thiết kế để xây dựng mô đồng thời cho chương trình song NĂM 2008 Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thông Tin_ĐHSPHN Luận văn tốt nghiệp_ Mô thuật tốn đệ quy song Nó hệ thống mơ thuật tốn hướng đối tượng 2-D mở rộng thành hệ thống 3-D, POLKA 3-D POLKA 3-D cung cấp nhìn 3-D 3-D ngun thủy, ví dụ như: hình nón, hình cầu, hình lập phương số hình khác Người dùng khơng bị u cầu phải có hiểu biết trước đồ họa máy tính 3-D để sử dụng POLKA 3-D Samba cho phép thể mô tương tác mà đọc câu lệnh ASCII thực hành động mô tương ứng Có phiên Java Samba gọi JSamba (xem http://www.cc.gatech.due/gvu/softviz/parviz/ samba.html) Các hệ thống mô thuật toán khác bao gồm: Zeus, Leonardo, CATAI, Mocha Zeus [Brown 1991] phát triển trường đại học Brown với BALSA BALSAII, coi số hệ thống phần mềm có ảnh hưởng lớn đến Zeus thực thi mơi trường multi-threaded multi-processor, làm cho chương trình song song CATAI (xem http://wonderland.dia.unisa.it/catai/) hệ thống mơ chương trình C++ Nó tin tưởng vào cơng nghệ đối tượng phân tán cho phép vài người dùng chia sẻ mơ thơng qua trừu tượng hóa lớp học thực tế Truyền thông đồng hóa khách hàng mơ thuật tốn mô đảm bảo người phục vụ mô Java mà sử dụng công nghệ CORBA Mocha (xem http://www.cs.brown.edu/people/jib/Mocha.html) mơ hình phân tán với kiến trúc client-server nhằm tối ưu phân chia thành phần phần mềm hệ thống mô thuật tốn tiêu biểu Trong mơ hình Mocha, mã giao diện xuất tới máy người dùng, thuật toán thực server chạy máy nhà cung cấp Với việc phát triển công nghệ mới, tính phổ dụng mạng tồn cầu tiến hóa ngơn ngữ lập trình Java, người phát triển xây dựng hệ thống mô thuật tốn trực tuyến, có lợi hệ thống mở dễ tiếp cận Một số nhà phát triển hợp việc sử dụng đa phương tiện hệ thống họ Việc sử dụng hệ thống mơ thuật tốn khơng cịn bị bó hẹp lớp học truyền thống phịng thí nghiệm giảng dạy mà mở rộng để dạy từ xa Trong khoảng hai thập niên gần đây, số lớn hệ thống mô thuật toán đời phát triển mạnh mẽ Phần lớn hệ thống mơ thuật tốn đề cập mục phổ biến phức tạp hệ thống sử dụng thực tế Chúng phát triển sử dụng nhà chun mơn, với mục đích giáo dục nghiên cứu thực nghiệm họ Một số hệ thống có kiến trúc phức tạp NĂM 2008 Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thông Tin_ĐHSPHN Luận văn tốt nghiệp_ Mô thuật tốn đệ quy cần cơng nghệ đặc biệt để chạy Chúng ta khơng có tiện ích hệ thống để xây dựng hệ thống mơ thuật tốn đồ thị; thay vào đó, ước lượng hệ thống mơ hữu khác mà kích thước nhỏ có kiến trúc đơn giản 1.3 Tác dụng mơ thuật tốn Các hệ thống mơ thuật tốn sử dụng rộng rãi công cụ hỗ trợ giảng dạy ngành giáo dục khoa học máy tính Một số nghiên cứu thực nghiệm ước lượng hiệu chúng giáo dục kết nhận có thay đổi Cụ thể là: Brown (1984) sử dụng BALSA-I để dạy khóa giới thiệu lập trình khóa “ cấu trúc liệu giải thuật” Hệ thống sử dụng chương trình trực quan khóa giới thiệu, người mơ thuật tốn mức cao lớp cấu trúc liệu Ông ta báo cáo việc sử dụng hoạt cảnh mô để phụ thêm vào thuyết trình dẫn tới „những lợi ích chứng minh việc tăng tốc độ hiểu biết‟ qua thuyết trình truyền thống Stasko (1997) sử dụng Samba, chương trình mơ hệ thống XTango dạy khóa thuật tốn khoa học máy tính Những sinh viên yêu cầu sử dụng hệ thống có thêm vào mơ cho chương trình ấn định họ Các kết thu cho biết sinh viên thích mơ mơ làm tăng tính sáng tạo sinh viên Hơn nữa, hiểu biết sinh viên thuật toán tăng lên nhờ việc mơ Tuy nhiên, sử dụng thuật tốn việc dạy học lúc thành công Các nhà giáo dục làm thực nghiệm thu kết pha trộn Stasko et al (1993) thí nghiệm việc dạy hai nhóm sinh viên với hai cách thuyết trình khác Cả hai nhóm sinh viên nghiên cứu thuật tốn “ Pairing heap” (ghép đơi đống) Một nhóm học thuật tốn dựa vào mơ tả văn nhóm nhận tài liệu có thêm trợ giúp chương trình mơ thuật toán Mặc dầu kết nhóm thứ hai đạt nhiều điểm nhóm kia, khơng có điểm trội kết luận nhờ trợ giúp mô Tương tự, Byrne et al (1996) chủ đạo hai thí nghiệm mà kết lợi ích mơ khơng phải hiển nhiên Những kết pha trộn gây chán nản, đa số nhà giáo dục tin tưởng mô hỗ trợ việc học NĂM 2008 Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thơng Tin_ĐHSPHN Luận văn tốt nghiệp_ Mơ thuật tốn đệ quy Tuy nhiên, kết thí nghiệm bất lợi gợi ý yếu tố quan trọng khác việc sử dụng mơ thuật tốn Các kết thông báo để đạt hiệu mơ thuật tốn đầy đủ điều quan trọng mô sử dụng phối hợp với yếu tố khác Lawrence et al (1994) sử dụng hệ thống XTANGO POLKA để dạy thuật toán khung nhỏ Kruskal Trong số nhóm sinh viên tham dự thí nghiệm, kết sinh viên mà tham dự phiên thí nghiệm tương tác tốt đáng kể so với sinh viên mà tham dự phiên thí nghiệm bị động Các kết cho phép sinh viên điều khiển tương tác với mô tốt hơn, chẳng hạn, chương trình mơ cho phép sinh viên đưa vào tập liệu họ thực mơ tập liệu không dừng lại việc quan sát tập liệu mẫu Hơn nữa, nhiều nghiên cứu gần Kehoe et al (1999) cho thấy sử dụng mơ cơng cụ giáo dục Thí nghiệm thực thái độ khác từ thí nghiệm khác Những sinh viên chia thành hai nhóm hai nhóm học thuật tốn „binomial heap” (đống nhị thức) Một nhóm học thuật tốn tương tác với mơ nhóm cịn lại đọc hình dạng phẳng điểm khóa thao tác thuật tốn Sự khác thí nghiệm kịch tập nhà Những sinh viên đưa cho câu hỏi trước bắt đầu khóa học Trong suốt thời gian kiểm tra thử, sinh viên truy cập tới dạy thời gian để hoàn thành kiểm tra thử cho tương đối nhiều Các kết thí nghiệm cho thấy nhóm trang bị chương trình mơ thuật tốn thực kiểm tra thử tốt nhóm Các sinh viên nhóm có sử dụng mơ thuật tốn phản hồi mơ giúp đỡ họ hiểu thuật tốn tốt Báo cáo Kehoe et al (1999) trình diễn cách sử dụng mơ thuật tốn việc dạy để đạt giá trị sư phạm cao Nó thuyết trình mơ thuật tốn sử dụng tốt tình trạng học tương tác mô (như tập nhà) Cũng vậy, mơ thuật tốn có tính sư phạm sử dụng việc phối hợp với cách học khác giúp đỡ dẫn khác để giải thích làm thực thao tác thuật tốn Báo cáo nói với mơ thuật tốn người ta dễ dàng học thao tác theo thủ tục thuật tốn Ngồi làm cho việc học thuật tốn bớt đáng sợ làm cho thuật tốn dễ tiếp cận NĂM 2008 Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thông Tin_ĐHSPHN Luận văn tốt nghiệp_ Mơ thuật tốn đệ quy Stasko et al (1993) kết luận từ thí nghiệm họ số điều kiện mà mơ thuật tốn có lợi Một số điều kiện hỗ trợ mơ thuật tốn với dẫn thúc đẩy tồn diện Khi mơ thuật tốn đóng vai trị dẫn này, hình mơ phải bổ sung mô tả văn thao tác diễn Một điều kiện khác hệ thống mơ thuật tốn cần phải bao gồm chức năng: quay lại lặp lại bước thực thuật toán phép người dùng lưu xem lại thao tác quan trọng Một số giảng đòi hỏi trạng thái thực thuật toán cần phải ghi lại cung cấp lại Sự phản hồi sinh viên quý giá việc cải thiện chất lượng dẫn mô Mặc dù kết đưa từ nghiên cứu thực nghiệm khơng phải ln có lợi, khơng có nghĩa mơ thuật tốn khơng hiệu dạy học Hiện có nhiều nghiên cứu tiến hành thiết kế đánh giá mơ thuật tốn Hansen et al (1999) tin kết nghiên cứu thực nghiệm chưa tốt khơng phải mơ thuật tốn phương pháp dạy học khơng tốt, mà cách thức thực mô chưa tốt Họ phát triển hệ thống trực quan hóa giải thuật siêu phương tiện gọi HalVis (Hypermedia Algorithm Visualizations) Dựa vào framework chúng, họ thiết kế trực quan hóa giải thuật, họ hướng dẫn vài thí nghiệm thực nghiệm việc sử dụng hệ thống Tất kết thí nghiệm cho thấy trực quan hóa giải thuật đồ họa có hiệu so với phương pháp dạy truyền thống Những kết cho thấy để mô thuật tốn có hiệu có lợi cho người dùng, việc thiết kế cho thích hợp cách thức mô yếu tố quan trọng 1.4 Kiến trúc hệ thống mô Đa số hệ thống mơ thuật tốn có thư viện hỗ trợ thủ tục mô giao diện mô Vài hệ thống mơ địi hỏi phải đưa vào trực tiếp tay thông điệp gửi tới thủ tục mơ chương trình thực thuật tốn Những hệ thống mơ thuật tốn đời sớm như: BALSA and TAGO kiện – điều khiển (event-driven), nghĩa chúng có chương trình phát sinh kiện dạng thông điệp tới máy chủ thông điệp Máy chủ thông điệp chuyển thông điệp tới cảnh quan tương ứng Một cảnh quan cửa sổ thiết bị hình nơi người dùng nhìn đối tượng mơ Thông điệp bao gồm thông tin đối tượng mơ Sau cảnh quan nhận thơng điệp, tính tốn lại đối tượng kéo lại cảnh quan NĂM 2008 10 Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thông Tin_ĐHSPHN Luận văn tốt nghiệp_ Mô thuật tốn đệ quy Có thể coi "chiến thuật " kiểu "chia để trị" Bài toán tách thành toán nhỏ toán nhỏ lại giải với thuật chia để trị trước, xuất trường hợp suy biến Ta thể giải thuật tìm kiếm dạng thủ tục: Procedure TIMKIEM (TD,Tu) {TD coi đầu mối để truy nhập vào tự điển xét, Tu từ cần tìm} if Tự điển cịn trang then Tìm từ Tu trang else begin Mở tự điển vào trang Xác định xem nửa tự điển chứa từ Tu if Tu nằm nửa trước tự điển then call TIMKIEM (TD 1,Tu) else call TIMKIEM (TD 2,Tu) end; {TD TD đầu mối để truy nhập vào nửa trước nửa sau từ điển} Return Thủ tục gọi thủ tục đệ quy 2.1.4 Thiết kế giải thuật đệ quy: Khi toán xét liệu xử lý định nghĩa dạng đệ quy việc thiết kế giải thuật đệ quy tỏ thuận lợi Hầu phản ánh sát nội dung định nghĩa Các bạn thấy điều qua tốn sau: * Bài toán Dãy số FIBONACCI Dãy số Fibonacci bắt nguồn từ toán cổ việc sinh sản cặp thỏ Bài toán đặt sau: 1) Các thỏ không chết NĂM 2008 16 Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thông Tin_ĐHSPHN Luận văn tốt nghiệp_ Mơ thuật tốn đệ quy 2) Hai tháng sau đời cặp thỏ sinh cặp thỏ (một đực cái) 3) Khi sinh tháng chúng lại sinh cặp Giả sử cặp đời đến tháng thứ n có cặp? Ví dụ: n=6, ta thấy: Tháng thứ 1: cặp (cặp ban đầu) Tháng thứ 2: cặp (cặp ban đầu chưa đẻ) Tháng thứ 3: cặp (đã có thêm cặp con) Tháng thứ 4: cặp (cặp đầu đẻ thêm) Tháng thứ 5: cặp (cặp bắt đầu đẻ) Tháng thứ 6: cặp (cặp đẻ tiếp) Bây ta xét tới việc tính số cặp thỏ tháng thứ n: F(n) - Nếu cặp thỏ tháng thứ (n-1) sinh F(n) = 2(n-1) Nhưng Trong cặp thỏ tháng thứ (n-1) có cặp có tháng thứ (n-2) sinh tháng thứ n thơi Do đó: F(n) = F(n-2) + F(n-1) Vì tính F(n) theo: n2 Dãy số thể F(n) ứng với giá trị n= 1, 2, 3, có dạng: 1 13 21 34 55 gọi dãy số Fibonacci Dãy số Fibonacci cịn mơ hình nhiều tượng tự nhiên sử dụng nhiều tin học Sau thủ tục đệ quy thể giải thuật tính F(n): Function F(n) if n 2) coi (n-1) đĩa trên, đóng vai trị đĩa thứ xử lý tương tự trường hợp Nghĩa là: - Chuyển (n-1) đĩa từ cọc A sang cọc B - Chuyển đĩa thứ n cọc A sang cọc C - Chuyển (n-1) đĩa từ cọc B sang cọc C Như toán chia làm toán hướng giải toán Cụ thể với n đĩa kết chuyển đĩa ta gọi trường hợp suy biến 3.1.4 Giải thuật: Ta sử dụng thủ tục đệ quy:Với tốn u cầu hướng giải việc dùng giải thuật đệ quy hợp lý nhất.Ta có giải thuật đệ quy sau: Procedure dich_chuyen (n, A, B, C); 1- if n=1 then chuyển đĩa từ A sang C 2- else begin calldich_chuyen(n-1, A, C, B); calldich_chuyen(1, A, B, C); calldich_chuyen(n-1, B, A, C) end 3- return Ngoài ta giải phương pháp biểu diễn nhị phân: Các vị trí đĩa 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) dãy dãy tượng trưng cho dãy đĩa liền cọc, chữ số có thay đổi đĩa dời sang trái hay phải cọc (hay chuyển sang cọc ngồi phía đối diện) Chữ số đầu đại diện cho đĩa lớn chữ số có nghĩa đĩa lớn không dời khỏi cọc xuất phát ngược lại Đặt chữ số luân phiên bên chữ số bước chuyển cho phép biết di chuyển theo chiều hợp với chữ số bước chuyển nơi chữ số thay đổi theo chiều khơng hợp Do bước chuyển 00000000 có nghĩa đặt đĩa lớn lên cọc ban đầu, bước chuyển 11111111 có nghĩa đặt chúng lên cọc cuối NĂM 2008 21 Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thông Tin_ĐHSPHN Luận văn tốt nghiệp_ Mơ thuật tốn đệ quy cùng, bước chuyển 11011000 có hai đĩa lớn cọc đích, đĩa cọc xuất phát, hai đĩa cọc trung gian, ba đĩa cọc xuất phát, có thêm chữ số đại diện đĩa nhỏ Ta dễ dàng tính vị trí đĩa tám mươi đĩa sau số bước tiến, giới hạn đủ lớn để chứa Việc dùng phương pháp đệ quy cho trường hợp tám mươi đĩa khơng thực tế 3.1.5 Độ phức tạp thuật toán: Ta xét xem n đĩa số lần di chuyển đĩa bao nhiêu? Giả sử gọi dichuyen(n) số ta có: dichuyen(1) = 1; Khi n tăng lên (n >1) ta tính dichuyen(n) sau: Dichuyen(n) = dichuyen(n-1) + dichuyen(1) + dichuyen(n-1) Vậy ta xác định mối quan hệ truy hồi cách tính: Dichuyen(1) = Dichuyen(n) = 2* dichuyen(n -1) + 1, n >1 Vậy dichuyen(n) = 2n - độ đánh giá giải thuật toán tháp Hà Nội Ứng dụng: Dùng toán dạy ngơn ngữ lập trình hay nghiên cứu tâm lí cách giải vấn đề 3.2 3.2.1 Bài toán bàn cờ quân hậu Bài toán: Xét bàn cờ hình vng hàng cột Qn hậu quân cờ ăn quân nằm hàng, cột hay đường chéo NĂM 2008 22 Nguyễn Thị Hải_Lớp A_ Khoa Công Nghệ Thông Tin_ĐHSPHN Luận văn tốt nghiệp_ Mơ thuật tốn đệ quy Bài tốn đặt ra: Hãy xếp quân hậu bàn cờ cho khơng có qn hậu ăn qn hậu nào,có nghĩa hàng cột có qn hậu mà thơi 3.2.2 Phân tích: Ta khơng nên tìm lời giải cho tốn cách xét trường hợp với vị trí quân hậu bàn cờ lọc trường hợp chấp nhận được.Phương pháp thử bước khơng hay lại đưa tất cách xếp vị trí cho quân hậu Phương pháp gọi thuật toán đệ quy quay lui.Nó áp dụng cách giải toán quân hậu sau: Do cột có quân hậu nên lựa chọn quân hậu thứ j, ứng với cột j, đặt vào hàng để đảm bảo “an tồn” nghĩa không hàng, đường chéo với (j-1) quân hậu xếp trước Vậy để đến lời giải ta phải thử tất trường hợp xếp quân hậu cột Với vị trí ta lại phải giải tốn qn hậu với phần cịn lại bàn cờ, nghĩa ta “quay lui toán cũ” 3.2.3 Thuật giải: Ta dùng thủ tục TRY để minh hoạ cho giải pháp giải Cụ thể: Procedure TRY(j) B1:Khởi phát việc chọn vị trí cho quân hậu thứ j B2: repeat thực việc chọn If an toàn then begin đặt quân hậu; if j