Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 84 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
84
Dung lượng
2,86 MB
Nội dung
Trang 3 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ CHINH MÔ PHỎNGMỘTSỐTHUẬTTOÁNTRÊNĐỒTHỊLUẬN VĂN THẠC SĨ Hà Nội - 2011 Trang 4 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ CHINH MÔ PHỎNGMỘTSỐTHUẬTTOÁNTRÊNĐỒTHỊ Ngành: Công nghệ thông tin Chuyên ngành: Hệ thống thông tin Mã số: 60 48 05 LUẬN VĂN THẠC SĨ NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. HỒ CẨM HÀ Hà Nội - 2011 Trang 5 LỜI CAM ĐOAN Tôi xin cam đoan, kết quả luận văn hoàn toàn là kết quả của tự bản thân tôi tìm hiểu, nghiên cứu dưới sự hướng dẫn của TS. Hồ Cẩm Hà. Các tài liệu tham khảo được trích dẫn và chú thích đầy đủ. Học viên Nguyễn Thị Chinh Trang 6 LỜI CẢM ƠN Trước hết, tôi muốn gửi lời cảm đến các Thầy, Cô trong khoa Công nghệ thông tin- Trường Đại học Công nghệ - Đại học Quốc gia Hà nội đã truyền đạt các kiến thức quý báu cho tôi trong suốt thời gian học tập tại trường. Đặc biệt, tôi xin gửi lời cảm ơn sâu sắc tới cô giáo hướng dẫn TS Hồ Cẩm Hà, người đã tận tình chỉ bảo và hướng dẫn về mặt chuyên môn cho tôi trong suốt quá trình thực hiện luận văn này. Cũng qua đây, tôi xin gửi lời cảm ơn đến Ban Giám hiệu trường THPT Chuyên Đại học Sư phạm Hà Nội, nơi tôi đang công tác đã tạo mọi điều kiện thuận lợi cho tôi trong thời gian học tập cũng như trong suốt quá trình thực hiện luận văn tốt nghiệp. Cuối cùng, tôi xin cảm ơn gia đình, bạn bè, đồng nghiệp đã luôn ủng hộ, động viên tôi rất nhiều để tôi yên tâm nghiên cứu và hoàn thành luận văn. Trong suốt quá trình làm luận văn, bản thân tôi đã cố gắng tập trung tìm hiểu, nghiên cứu và tham khảo thêm nhiều tài liệu liên quan. Tuy nhiên, do thời gian hạn chế và bản thân còn chưa có nhiều kinh nghiệm trong nghiên cứu khoa học, chắc chắn bản luận văn vẫn còn nhiều thiếu sót. Tôi rất mong được nhận sự chỉ bảo của các Thầy Cô giáo và các góp ý của bạn bè, đồng nghiệp để luận văn được hoàn thiện hơn. Hà Nội, ngày 12 tháng 06 năm 2011 Nguyễn Thị Chinh Trang 7 MỤC LỤC LỜI CẢM ƠN 6 LỜI NÓI ĐẦU 10 Chương 1 MỘTSỐ KIẾN THỨC CƠ BẢN VỀ THUẬTTOÁN 12 1. Khái niệm bài toán Tin học 12 2. Khái niệm thuậttoán 12 3. Các tính chất của thuậttoán 13 4. Độ phức tạp và xác định độ phức tạp của thuậttoán 14 5. Chi phí thực hiện thuậttoán 18 6. Ba bài toántrên mô hình đồthị được đưa vào giảng dạy trong trường Trung học Phổ thông Chuyên 18 6.1. Mộtsố khái niệm cơ bản về đồthị 18 6.1.1. Khái niệm đồthị (Graph) 18 6.1.2. Các khái niệm cơ bản 19 6.2. Bài toán tìm kiếm trênđồthị 21 6.2.1. Phát biểu bài toán 21 6.2.2. Giới thiệu thuậttoán tìm kiếm DFS và BFS 22 6.2.3. Độ phức tạp tính toán của thuậttoán DFS và BFS 24 6.3. Bài toán tìm đường đi ngắn nhất trênđồthị có trọng số 24 6.3.1. Phát biểu bài toán 24 6.3.2. Giới thiệu thuậttoán Ford - Bellman 25 6.2.3. Giới thiệu thuậttoánthuậttoán Dijkstra 26 6.3.4. Độ phức tạp 28 6.4. Các thuậttoán tìm kiếm trên cây khung 28 6.4.1. Bài toán cây khung 28 6.4.2. Giới thiệu thuậttoán Prim 29 6.4.3. Giới thiệu thuậttoán Kruskal 30 6.4.5. Độ phức tạp 31 Trang 8 6.5. Bài toán tìm chu trình Hamilton qua tất cả các đỉnh của đồthị 32 6.5.1. Phát biểu bài toán 32 6.5.2. Giới thiệu thuậttoán tìm chu trình Hamilton: 33 Chương 2 MÔ PHỎNGTHUẬTTOÁN 34 1. Khái niệm và chức năng của mô phỏng 34 2. Lịch sử của mô phỏngthuậttoán 35 3. Hiệu quả của mô phỏngthuậttoán trong giảng dạy 37 4. Mộtsố yêu cầu đối với mô phỏngthuậttoán 41 4.1. Mô phỏng đúng theo thuậttoán 41 4.2. Cho phép thực hiện theo từng bước 41 4.3. Mô phỏngthuậttoán phải có tính động 41 4.4. Có thể thực thi với mọi bộ dữ liệu đầu vào 43 4.5. Có sự phân cấp người học 43 5. Quy trình mô phỏngthuậttoán 43 5.1. Nghiên cứu và phân tích giải thuật 43 5.2. Mô phỏng dữ liệu vào và kết quả đầu ra 44 5.3. Chia thuậttoán thành nhiều bước nhỏ rồi mô phỏng theo từng bước 45 5.4. Tổng hợp mô phỏng theo các bước 47 5.5. Sơđồ cấu trúc chung của hệ thống mô phỏng 47 6. Đề xuất lựa chọn công cụ để phát triển chương trình mô phỏngthuậttoán 48 6.1. Mộtsố hệ thống mô phỏngthuậttoán chung 49 6.2. Sử dụng công cụ mô phỏngthuậttoán riêng biệt 52 6.3. Xây dựng hệ thống từ đầu 53 Chương 3 PHÂN TÍCH THIẾT KẾ HỆ THỐNG MÔ PHỎNGMỘTSỐTHUẬTTOÁNTRÊNĐỒTHỊ 54 1. Mục đích 54 2. Những yêu cầu thực tế 54 3. Đề xuất cho hệ thống mới 55 4. Thiết kế hệ thống mô phỏngmộtsốthuậttoántrênđồthị 56 Trang 9 4.1. Lựa chọn công cụ lập trình 57 4.2. Chức năng mô phỏng của các thuậttoán được cài đặt 59 4.2.1 Mô phỏngthuậttoán tìm kiếm 59 4.2.2. Mô phỏngthuậttoán Dijkstra 61 4.2.3. Mô phỏngthuậttoán Ford – Bellman 63 4.2.4. Mô phỏngthuậttoán Prim 63 4.2.5. Mô phỏngthuậttoán Kruskal 65 4.2.6. Thuậttoán tìm chu trình Hamilton 66 5. Giới thiệu chương trình 66 5.1. Tổng quan về hệ thống 66 5.1.1. Các đối tượng xây dựng cấu trúc đồthị 67 5.1.2. Công cụ vẽ hình ảnh để mô phỏng 70 5.1.3.Chức năng chi tiết của các công cụ hỗ trợ cho quá trình mô phỏng 70 5.2. Giới thiệu các công cụ hỗ trợ mô phỏngdo người dùng cài đặt 71 Chương 4 KẾT LUẬN 80 1. Những kết quả đạt được 80 2. Hướng phát triển 81 DANH MỤC TÀI LIỆU THAM KHẢO 82 PHỤ LỤC 84 Trang 10 LỜI NÓI ĐẦU Cách đây gần ba thập kỉ (khoảng những năm 80 của thế kỉ XX), ở nhiều nước trên thế giới mô phỏngthuậttoán đã được sử dụng trong việc giảng dạy các môn Khoa học máy tính như một công cụ hữu hiệu để mô tả thuậttoánmột cách trực quan, khoa học. Không những vậy nó còn cho người học biết chi tiết từng bước hoạt động của thuậttoán cùng với cấu trúc dữ liệu đi kèm thông qua việc mô tả bằng đồ họa. Những năm gần đây, ở Việt Nam môn Tin học đã được đưa vào chương trình của học sinh trung học phổ thông như là một môn học chính thức. Tuy nhiên trên thực tế, mộtsố trường chuyên trên cả nước đã tuyển sinh học sinh chuyên Tin từ cuối những năm 80 của thế kỉ XX. Những học sinh này cần nắm chắc kiến thức cơ bản về Tin học như: các cấu trúc dữ liệu trừu tượng: stack, queue, cây, cây nhị phân, cây nhị phân tìm kiếm, các chiến lược thiết kế thuật toán: tham lam, quay lui, quy hoạch động… Trong đó, lý thuyết về đồthị và thuậttoántrênđồthị là một lĩnh vực rộng và phức tạp. Việc hiểu và cài đặt tốt các thuậttoánđó đòi hỏi thời gian và công sức rất lớn. Hiện nay, việc truyền đạt các thuậttoántrênđồthị cho học sinh chuyên Tin gặp rất nhiều khó khăn. Có nhiều rất nhiều lý do: Các thuậttoánđó khó hình dung, việc tổ chức dữ liệu cho nó cũng phức tạp, thời gian giảng dạy trên lớp có hạn, tài liệu tham khảo có thể tự đọc, tự học vẫn còn ít…. Trong khuôn khổ đề tài này, chúng tôi xây dựng một chương trình nhằm mô phỏng hoạt động của ba thuậttoán giải ba bài toán cơ bản trênđồthị theo phân phối chương trình của Bộ Giáo dục với hai mục đích: để học sinh có thể dễ dàng nắm bắt tư tưởng cũng như từng bước hoạt động cụ thể của các thuật toán, để giáo viên có thể làm cho bài giảng về các thuậttoán này trở nên dễ hiểu, dễ tiếp thu hơn. Nội dung luận văn được chia thành 3 chương: Trang 11 Chương I. Những kiến thức cơ bản về thuật toán. Ở chương này, chúng tôi trích nêu khái niệm về bài toán và thuật toán. Các tính chất của thuật toán, xác định độ phức tạp của thuật toán…Cuối cùng, chúng tôi giới thiệu ba thuậttoán quan trọng trênđồthị mà học sinh THPT sẽ được học. Chương II. Mô phỏngthuật toán. Chương này chúng tôi trình bày khái niệm mô phỏng, các chức năng của mô phỏng và các vấn đề liên quan như: lịch sử mô phỏng, nghiên cứu về hiệu quả của nó trong giảng dạy và mộtsố yêu cầu đối với việc mô phỏngthuậttoán nói chung. Chương III. Phân tích thiết kế hệ thống mô phỏngmộtsốthuậttoántrênđồ thị. Ở chương 3, chúng tôi trình bày về quá trình phân tích, thiết kế và xây dựng hệ thống mô phỏngtrên ba thuật toán: thuậttoán tìm kiếm (tìm kiếm theo chiều sâu và tìm kiếm theo chiều rộng), thuậttoán tìm đường đi ngắn nhất (thuật toán Dijsktra) và thuậttoán tìm cây khung cực tiểu trênđồthị vô hướng có trọng số (thuật toán Prim)… Trang 12 Chương 1 MỘTSỐ KIẾN THỨC CƠ BẢN VỀ THUẬTTOÁN 1. Khái niệm bài toán Tin học Trong phạm vi tin học, người ta quan niệm bài toán là một công việc nào đó mà con người muốn máy tính thực hiện. [xem 1] Khi dùng máy tính để giải bài toán, ta cần quan tâm tới 2 vấn đề: Dữ liệu cần được đưa vào máy tính (Input) là gì và cần lấy ra (Output) thông tin gì? Nói một cách khác, cho một bài toán là việc mô tả rõ Input và Output của bài toán. Vấn đề còn lại là: Làm thế nào để từ Input ta có được Output? 2. Khái niệm thuậttoán Khác với Toán học (các yêu cầu của bài toán thường là chứng minh sự tồn tại đáp án chứ không yêu cầu tìm một cách chi tiết để tìm ra đáp án đó), giải một bài toán Tin học là việc đi tìm một lời giải cụ thể, tường minh để đưa ra Output của bài toán dựa trên Input đã cho. Việc chỉ ra một cách tìm Output của bài toán được gọi là mộtthuật toán. Có nhiều cách phát biểu khái niệm về thuật toán. Dưới đây là cách phát biểu được chọn để đưa vào sách giáo khoa Tin học phổ thông: Khái niệm về thuật toán: thuậttoán là một dãy hữu hạn các thao tác được sắp xếp theo một trình tự nhất định để sau khi thực hiện dãy các thao tác đó, từ input ta có output cần tìm [xem 1]. Trong lĩnh vực máy tính, cụm từ “thuật toán” đôi khi người ta dùng bằng một từ khác: “giải thuật”. Ví dụ về mộtthuật toán: Nhập vào mộtsố nguyên dương N, kiểm tra sốđó có là số nguyên tố hay không? Lời giải: Input: Số nguyên dương N. Output: Có/không tương ứng với N có là nguyên tố hay không? [...]... là hai đỉnh của V Mộtsố hình ảnh của đồ thị: Đồthị vô hướng Đồthị có hướng 6.1.2 Các khái niệm cơ bản Có thể phân loại đồthị theo đặc tính và số lượng của tập các cạnh E: Cho đồthị G = (V, E) Ta có mộtsố khái niệm sau [xem 3- tập 1]: Đơn đồ thị: G được gọi là đơn đồthị nếu giữa hai đỉnh u, v của V có nhiều nhất là 1 cạnh trong E nối từ u tới v Đa đồ thị: G được gọi là đa đồthị nếu giữa hai đỉnh... chọn một thuậttoán chạy nhanh và sử dụng tài nguyên có sẵn một cách hiệu quả Như vậy dựa vào đâu để có thể kết luậnthuậttoán này “nhanh” hơn thuậttoán kia? Trang 14 Có một cách để biết được thuậttoán nào nhanh hơn bằng cách viết các chương trình bằng cùng một ngôn ngữ lập trình cho các thuậttoán rồi so sánh trên các bộ Input giống nhau trên cùng một hệ thống để kết luậnthuậttoán nào nhanh, thuật. .. hiện thuậttoán - Dễ cài đặt: thuậttoánđó liệu có chuyển được thành chương trình bằng một ngôn ngữ lập trình nào đó hay không Trước khi xây dựng thuậttoán cho một bài toán nào đó, trước tiên phải xác định được Input và Output là gì, thử trênmộtsố ví dụ cụ thể để định hướng cho việc xây dựng thuậttoán [xem 1] 4 Độ phức tạp và xác định độ phức tạp của thuật toánMộtthuậttoán chỉ có thể giải một. .. với đỉnh kết thúc gọi là chu trình tương tự ta có khái niệm chu trình đơn 6.2 Bài toán tìm kiếm trênđồthị 6.2.1 Phát biểu bài toán Cho đồthị G = (V, E) và s và t là hai đỉnh của đồthị Yêu cầu: Hãy chỉ ra một đường đi từ s đến t (nếu có) Ví dụ: Xét mộtđồthị vô hướng và mộtđồthị có hướng dưới đây: Trên cả hai đồ thị, (1, 2, 3, 4) là đường đi đơn độ dài 3 từ đỉnh 1 tới đỉnh 4 Bởi (1, 2) (2, 3)... đến được từ một đỉnh xuất phát nào đó? Vấn đề này đưa về một bài toán liệt kê mà yêu cầu của nó là không được bỏ sót hay lặp lại bất kỳ đỉnh nào Vì vậy, cần phải xây dựng những thuậttoán cho phép duyệt một cách hệ thống các đỉnh, những thuậttoán như vậy gọi là những thuậttoán tìm kiếm trênđồthị Trong lý thuyết đồ thị, người ta quan Trang 21 tâm đến hai thuậttoán cơ bản nhất: thuậttoán tìm kiếm... cây khung nhỏ nhất của đơn đồthị vô hướng có trọng số 6.4.2 Giới thiệu thuậttoán Prim Một trong hai thuậttoán quan trọng để giải bài toán tìm cây khung nhỏ nhất là thuậttoán Prim Thuậttoánđó có thể phát biểu hình thức như sau: Đơn đồthị vô hướng G = (V, E,w) Xét cây T trong G và một đỉnh v, gọi khoảng cách từ v tới T là trọng số nhỏ nhất trong số các cạnh nối v với một đỉnh nào đó trong T: d[v]... trọng số: Đồthị có trọng số là một bộ ba G = (V, E, w) trong đó, G = (V, E) là đồ thị, w là hàm được định nghĩa: w:E R e w(e) Bài toánđó phát biểu dưới dạng tổng quát như sau: Cho đồthị có trọng số G = (V, E,w) là đồthị không có chu trình âm Trang 24 Yêu cầu: Hãy tìm một đường đi ngắn nhất (tổng trọng số qua các đỉnh trên đường đi) từ đỉnh xuất phát s V đến đỉnh đích t V Nếu như đồthị có... thực hiện thuậttoán Đây là một công việc khá khó khăn để nắm bắt nếu một học sinh chỉ sử dụng hình vẽ và các xâu kí tự Mô phỏngthuậttoán có thể chỉ ra tất cả các thông tin và sự thay đổi đồng thời ở từng bước bằng đồ hoạ Ta có thể quan sát bằng hình vẽ dưới đây: Trang 34 Hình 1 Mô phỏngmột bước hoạt động của thuậttoán Bên cạnh việc giúp người dùng hiểu rõ thuật toán, mô phỏngthuậttoán cũng có... Với P(n) là một đa thức bậc k thì O(P(n)) = O(nk) Vì thế, mộtthuậttoán có độ phức tạp cấp đa thức, người ta thường ký hiệu là O(nk) d) Mộtthuậttoán có cấp là các hàm như 2n, n!, nn được gọi là một thuậttoán có độ phức tạp hàm mũ Những thuậttoán như vậy trên thực tế thường có tốc độ rất chậm Các thuậttoán có cấp là các hàm đa thức hoặc nhỏ hơn hàm đa thức thì thường nhanh hơn các thuậttoán hàm... O(g(n).f(n)) 4.4 Mộtsố tính chất Theo định nghĩa về độ phức tạp tính toán ta có mộtsố tính chất: a) Nếu một thuậttoán có độ phức tạp là hằng số, tức là thời gian thực hiện không phụ thuộc vào kích thước dữ liệu vào thì ta ký hiệu độ phức tạp tính toán của thuậttoánđó là O(1) b) Với mộtthuậttoán có độ phức tạp cấp logarit của f(n), người ta ký hiệu là O(logf(n)) mà không cần ghi cơ số của logarit . hệ thống mô phỏng một số thuật toán trên đồ thị 56 Trang 9 4.1. Lựa chọn công cụ lập trình 57 4.2. Chức năng mô phỏng của các thuật toán được cài đặt 59 4.2.1 Mô phỏng thuật toán tìm kiếm. 59 4.2.2. Mô phỏng thuật toán Dijkstra 61 4.2.3. Mô phỏng thuật toán Ford – Bellman 63 4.2.4. Mô phỏng thuật toán Prim 63 4.2.5. Mô phỏng thuật toán Kruskal 65 4.2.6. Thuật toán tìm chu trình. quả của nó trong giảng dạy và một số yêu cầu đối với việc mô phỏng thuật toán nói chung. Chương III. Phân tích thiết kế hệ thống mô phỏng một số thuật toán trên đồ thị. Ở chương 3, chúng tôi