Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 90 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
90
Dung lượng
2,72 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ CHINH MƠ PHỎNG MỘT SỐ THUẬT TỐN TRÊN ĐỒ THỊ LUẬN VĂN THẠC SĨ Hà Nội - 2011 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN THỊ CHINH MÔ PHỎNG MỘT SỐ THUẬT TỐN TRÊN ĐỒ THỊ Ngành: Cơng nghệ thơng tin Chun 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 LỜI CAM ĐOAN Tơi xin cam đoan, kết luận văn hồn tồn kết tự thân tơi tìm hiểu, nghiên cứu hướng dẫn TS Hồ Cẩm Hà Các tài liệu tham khảo trích dẫn thích đầy đủ Học viên Nguyễn Thị Chinh Trang LỜI CẢM ƠN Trước hết, muốn gửi lời cảm đến Thầy, Cô 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 kiến thức quý báu cho suốt thời gian học tập trường Đặc biệt, 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 bảo hướng dẫn mặt chun mơn cho tơi suốt q trình thực luận văn Cũng qua đây, 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 công tác tạo điều kiện thuận lợi cho thời gian học tập suốt trình thực 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 ủng hộ, động viên nhiều để yên tâm nghiên cứu hoàn thành luận văn Trong suốt q trình làm luận văn, thân tơi cố gắng tập trung tìm hiểu, nghiên cứu tham khảo thêm nhiều tài liệu liên quan Tuy nhiên, thời gian hạn chế thân cịn chưa có nhiều kinh nghiệm nghiên cứu khoa học, chắn luận văn cịn nhiều thiếu sót Tơi mong nhận bảo Thầy Cô giáo góp ý bạn bè, đồng nghiệp để luận văn hoàn thiện Hà Nội, ngày 12 tháng 06 năm 2011 Nguyễn Thị Chinh Trang MỤC LỤC LỜI CẢM ƠN LỜI NÓI ĐẦU Chương MỘT SỐ KIẾN THỨC CƠ BẢN VỀ THUẬT TOÁN 10 Khái niệm toán Tin học 10 Khái niệm thuật toán 10 Các tính chất thuật tốn .11 Độ phức tạp xác định độ phức tạp thuật toán 12 Chi phí thực thuật toán .16 Ba tốn mơ hình đồ thị đưa vào giảng dạy trường Trung học Phổ thông Chuyên 16 6.1 Một số khái niệm đồ thị 16 6.1.1 Khái niệm đồ thị (Graph) 16 6.1.2 Các khái niệm 17 6.2 Bài tốn tìm kiếm đồ thị .19 6.2.1 Phát biểu toán 19 6.2.2 Giới thiệu thuật tốn tìm kiếm DFS BFS 20 6.2.3 Độ phức tạp tính toán thuật toán DFS BFS .22 6.3 Bài tốn tìm đường ngắn đồ thị có trọng số .22 6.3.1 Phát biểu toán 22 6.3.2 Giới thiệu thuật toán Ford - Bellman 23 6.2.3 Giới thiệu thuật toán thuật toán Dijkstra .24 6.3.4 Độ phức tạp 26 6.4 Các thuật tốn tìm kiếm khung 26 6.4.1 Bài toán khung 26 6.4.2 Giới thiệu thuật toán Prim 27 6.4.3 Giới thiệu thuật toán Kruskal 28 6.4.5 Độ phức tạp 29 Trang 6.5.Bài tốn tìm chu trình Hamilton q 6.5.1 Phát biểu toán 6.5.2 Giới thiệu thuật tốn tìm chu trình Hamilton: Chương MƠ PHỎNG THUẬT TỐN 1.Khái niệm chức mô 2.Lịch sử mơ thuật tốn 3.Hiệu mơ thuật tốn giảng dạy 4.Một số yêu cầu mô thuật tốn 4.1.Mơ theo thuật toán 4.2.Cho phép thực theo bướ 4.3.Mơ thuật tốn phải có tính 4.4.Có thể thực thi với liệu 4.5.Có phân cấp người học 5.Quy trình mơ thuật toán 5.1.Nghiên cứu phân tích giải thuậ 5.2.Mơ liệu vào kết 5.3.Chia thuật toán thành nhiều bước 5.4.Tổng hợp mô theo bướ 5.5.Sơ đồ cấu trúc chung hệ thốn 6.Đề xuất lựa chọn công cụ để phát triển chương trình mơ t 6.1.Một số hệ thống mô thuật 6.2.Sử dụng công cụ mô thuật 6.3.Xây dựng hệ thống từ đầu Chương PHÂN TÍCH THIẾT KẾ HỆ THỐNG MƠ PHỎNG MỘT SỐ THUẬT TOÁN TRÊN ĐỒ THỊ 1.Mục đích 2.Những yêu cầu thực tế 3.Đề xuất cho hệ thống 4.Thiết kế hệ thống mơ số thuật tốn đồ thị Trang 4.1 Lựa chọn công cụ lập trình 55 4.2 Chức mơ thuật tốn cài đặt 57 4.2.1 Mô thuật tốn tìm kiếm .57 4.2.2 Mơ thuật tốn Dijkstra .59 4.2.3 Mơ thuật tốn Ford – Bellman 61 4.2.4 Mô thuật toán Prim 61 4.2.5 Mơ thuật tốn Kruskal 63 4.2.6 Thuật tốn tìm chu trình Hamilton 64 Giới thiệu chương trình 64 5.1 Tổng quan hệ thống 64 5.1.1 Các đối tượng xây dựng cấu trúc đồ thị 65 5.1.2 Công cụ vẽ hình ảnh để mơ 68 5.1.3.Chức chi tiết công cụ hỗ trợ cho q trình mơ 68 5.2 Giới thiệu công cụ hỗ trợ mô người dùng cài đặt 69 Chương KẾT LUẬN 78 Những kết đạt .78 Hướng phát triển 79 DANH MỤC TÀI LIỆU THAM KHẢO 80 PHỤ LỤC 82 Trang LỜI NÓI ĐẦU Cách gần ba thập kỉ (khoảng năm 80 kỉ XX), nhiều nước giới mô thuật toán sử dụng việc giảng dạy mơn Khoa học máy tính cơng cụ hữu hiệu để mơ tả thuật tốn cách trực quan, khoa học Khơng cịn cho người học biết chi tiết bước hoạt động thuật tốn với cấu trúc liệu kèm thơng qua việc mô tả đồ họa Những năm gần đây, Việt Nam môn Tin học đưa vào chương trình học sinh trung học phổ thơng làmôṭmôn hocc̣ chinh́ thức Tuy nhiên thưcc̣ tế, môṭsốtrường chuyên cảnước đa ̃tuyển sinh hocc̣ sinh chuyên Tin từ cuối năm 80 kỉ XX Những hocc̣ sinh cần nắm kiến thức Tin học như: cấu trúc liệu trừu tượng : stack, queue, cây, nhi phâṇ , nhi phâṇ tim̀ kiếm , chiến lược thiết kế thuật toán: tham lam, quay lui, quy hoacḥ đơngc̣… Trong đó, lý thuyết đồthi vạ̀ thṭtốn đồ thị lĩnh vực rộng phức tạp Viêcc̣ hiểu vàcài đăṭtốt thuật tốn địi hỏi thời gian vàcơng sức lớn Hiện nay, việc truyền đạt thuật toán đồ thị cho học sinh chuyên Tin gặp nhiều khó khăn Có nhiều nhiều lý do: Các thuật tốn khó hình dung, việc tổ chức liệu cho phức tạp, thời gian giảng dạy lớp có hạn, tài liệu tham khảo tự đọc, tự học cịn ít… Trong khn khổ đề tài này, chúng tơi xây dựng chương trình nhằm mơ hoạt động ba thuật toán giải ba toán đồ thị theo phân phối chương trình Bộ Giáo dục với hai mục đích: để học sinh dễ dàng nắm bắt tư tưởng bước hoạt động cụ thể thuật tốn, để giáo viên làm cho giảng thuật toán trở nên dễ hiểu, dễ tiếp thu Nội dung luận văn đươcc̣ chia thành chương: Trang Chương I Những kiến thức thuật tốn Ở chương này, chúng tơi trích nêu khái niệm toán thuật toán Các tính chất thuật tốn, xác định độ phức tạp thuật tốn…Cuối cùng, chúng tơi giới thiệu ba thuật toán quan trọng đồ thị mà học sinh THPT học Chương II Mơ thuật tốn Chương chúng tơi trình bày khái niệm mơ phỏng, chức mô vấn đề liên quan như: lịch sử mô phỏng, nghiên cứu hiệu giảng dạy số yêu cầu việc mơ thuật tốn nói chung Chương III Phân tích thiết kế hệ thống mơ số thuật toán đồ thị Ở chương 3, chúng tơi trình bày q trình phân tích, thiết kế xây dựng hệ thống mô ba thuật tốn: thuật tốn tìm kiếm (tìm kiếm theo chiều sâu tìm kiếm theo chiều rộng), thuật tốn tìm đường ngắn (thuật toán Dijsktra) thuật toán tìm khung cực tiểu đồ thị vơ hướng có trọng số (thuật tốn Prim)… Trang Chương MỘT SỐ KIẾN THỨC CƠ BẢN VỀ THUẬT TOÁN Khái niệm toán Tin học Trong phạm vi tin học, người ta quan niệm tốn cơng việc mà người muốn máy tính thực [xem 1] Khi dùng máy tính để giải toán, ta cần quan tâm tới vấn đề: Dữ liệu cần đưa vào máy tính (Input) cần lấy (Output) thơng tin gì? Nói cách khác, cho tốn việc mơ tả rõ Input Output tốn Vấn đề cịn lại là: Làm để từ Input ta có Output? Khái niệm thuật toán Khác với Toán học (các yêu cầu toán thường chứng minh tồn đáp án không yêu cầu tìm cách chi tiết để tìm đáp án đó), giải tốn Tin học việc tìm lời giải cụ thể, tường minh để đưa Output toán dựa Input cho Việc cách tìm Output tốn gọi thuật tốn Có nhiều cách phát biểu khái niệm thuật toán Dưới cách phát biểu chọn để đưa vào sách giáo khoa Tin học phổ thơng: Khái niệm thuật tốn: thuật toán dãy hữu hạn thao tác xếp theo trình tự định để sau thực dãy 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 tốn” đơi người ta dùng từ khác: “giải thuật” Ví dụ thuật toán: Nhập vào số nguyên dương N, kiểm tra số có số nguyên tố hay khơng? Lời giải: Input: Số ngun dương N Output: Có/khơng tương ứng với N có ngun tố hay khơng? Trang 10 Trang 72 Dijkstra mô phỏng: Module: GraphTool.Dijk tra.DijktraFor m Chuyển mơ hình đồ thị mà người dùng chuẩn bị cho Module Model.Dijkstra thực thuật toán Dijkstra thực thi thuật toán: GraphTool.Mo del.Dijkstra Trả lại bước thuật toán thực liệu đầu vào để chương trình mơ bắt đầu làm việc Chức năng: công cụ chức chúng mơ hình cài đặt Cơng cụ sử dụng module: private HashSet _vertexGone = new HashSet(); private HashSet _vertexGo = new HashSet(); private Dictionary _trace = new Dictionary(); private Dictionary _distance = new Dictionary(); private BagStep _steps = new BagStep(); public Graph Graph { get; set; } public string VertexKeyStart { get; set; } public string VertexKeyEnd { get; set; } public BagStep GetBagStep() Các chƣơng trình chức chúng: public void UpdateVertexValue(Dictionary d) { Thủ tục foreach (string key in d.Keys) { _d.Add(key, d[key]); public void Execute() } } public Dictionary public void Initialize(); GetDistanceInfomation() { return _d; } private void UpdateEdgeGo(Vertex u) StepEnd : Step public class { private IList _edgesInShotestPath = new List(); Trang 73 public void UpdateEdgeInfosInShotestPath(Dictionary trace, before) string keyEnd, string keyStart) { private void UpdateInfoAtStepEnd() Trang 74 private void AddVertextToVertexGone(Vertex gone) private void AddStepStart() private void AddStepStart12(string key) private void AddStepUpdateVertexValue() private void AddStepUpdateVertexValueStep11() private private key) private private void AddStepUpdateVertexValueStep12() void AddStepChooseVertexMin(string void AddStepAddVertex() void AddStepEnd() public class StepStart : Step { public string VertexStart { get; set; } private Dictionary _d = new Dictionary(); string key = keyEnd; while (key != keyStart && key != string.Empty) { _edgesInShotestPath.Add(trace[key] + ">" + key); key = trace[key]; } if (key == string.Empty) _edgesInShotestPath = new List(); } public IList EdgesInShotestPath() { return _edgesInShotestPath; } } //step public class StepUpdateVertexValue : Step { private Dictionary _d = new Dictionary(); public void UpdateVertexValue(Dictionary d) {foreach (string key in d.Keys) { _d.Add(key, d[key]); } } public Dictionary GetDistanceInfomation() { return _d; } } //step public class StepChooseVertexMin : Step { public string Min { get; set; } } //step3 public class StepAddVertex : Step { private IList _gones = new List(); public IList GetAddedVertex() { return _gones; } } Trang 75 7.3.3 Prim Với thuật toán Prim – thuật toán tìm khung nhỏ nhất, đồ thị lựa chọn một: đồ thị vơ hướng có trọng số người dùng cần lựa chọn đỉnh xuất phát Từ đỉnh xuất phát đó, chương trình mơ thực trình tự thuật tốn Prim để kết nạp dần đỉnh vào khung Thuật toán dừng dựng thành khung đồ thị cho khơng liên thơng (khơng có nghiệm) Cũng giống Dijkstra, chương trình mơ thực Chương trình con: Prim mơ phỏng: Module: GraphTool.Prim.PrimForm Prim thực thi thuật tốn: GraphTool.Model.Prim Kiến trúc: Prim mơ phỏng: Module: GraphTool.Pri m.PrimForm Chuyển mơ hình đồ thị mà người dùng chuẩn bị cho Module Model.Prim thực thuật toán Prim thực thi thuật toán: GraphTool.Mo del.Prim Trả lại bước thuật toán thực liệu đầu vào để chương trình mơ bắt đầu làm việc Chức năng: công cụ chức chúng mơ hình cài đặt public void Exe public void Ini Trang 76 private void UpdateEdgeGo(Vertex u) private void UpdateTrace(string after, string before) private void UpdateInfoAtStepEnd() private void AddVertextToVertexGone(Vertex gone) private void AddStepStartPrim() private void AddStepStartPrim(string key) private void AddStepUpdateVertexValuePrim() private void AddStepUpdateVertexValueStep11Prim() private void AddStepUpdateVertexValueStep12Prim() private void AddStepChooseVertexMinPrim(string key) private void AddStepAddVertexPrim() private void AddStepEndPrim() Trang 77 Chương KẾT LUẬN Những kết đạt Trải qua trình làm việc nghiêm túc, bước đầu thu số kết sau: - Những kiến thức tổng quan, tính chất thuật toán, lịch sử phát triển hệ thống mô phỏng; số ưu điểm tồn hệ thống mô tại; - Đề xuất giải pháp xây dựng mơ hình mơ mới, có hệ thống thuật tốn phức tạp Đây chương trình phù hợp với công việc giảng dạy giáo viên việc tự học, tự tìm hiểu kiến thức học sinh - Xây dựng chương trình mơ cụ thể số thuật toán đồ thị gồm: - Thuật tốn tìm kiếm theo chiều sâu DFS - Thuật tốn tìm kiếm theo chiều rộng BFS - Thuật tốn tìm đường ngắn – thuật toán Ford - Bellman - Thuật tốn tìm đường ngắn – thuật tốn Dijkstra - Thuật tốn tìm khung nhỏ đồ thị vơ hướng có trọng số - thuật tốn Prim - Thuật tốn tìm khung nhỏ đồ thị vơ hướng có trọng số thuật tốn Kruskal - Thuật tốn tìm chu trình Hamilton qua tất đỉnh đồ thị Trang 78 2.Hướng phát triển - Triển khai chương trình tới học sinh để ghi nhận tiến mặt hiểu chất cách thức hoạt động thuật toán - Có thể sử dụng module cài đặt để tiếp tục mơ thuật tốn nâng cao đồ thị: luồng, cặp ghép đồ thị… Trang 79 DANH MỤC TÀI LIỆU THAM KHẢO Tài liệu Tiếng Việt Hồ Sĩ Đàm (chủ biên) – Sách giáo khoa Tin học 10, NXB Giáo dục, trang… Lê Minh Hoàng - Bài giảng chuyên đề Hồ Sĩ Đàm (chủ biên) – Tài liệu giáo khoa chuyên Tin (bộ tập) Thomas H Cormen Charles E Leiserson Ronald Rivest – Giáo trình thuật tốn - Nhà xuất thống kê TS Nguyễn Xuân My(chủ biên) – Một số vấn đề chọn lọc Tin học (T1+T2) - Nhà xuất giáo dục Tài liệu Tiếng Anh Kehoe C., Stasko J., Taylor A., Rethinking the evaluation of algorithm nimations as learning aids: an observational study, Technical Report GIT-GVU-99-10, March, 1999 Stasko, 1990, Tango: A Framework and System for Algorithm Animation IEEE Computer, 23(9): pp27-39 Brown, 1988 Algorithm Animation The MIT Press, Cambridge, MA, 1988 [Brown, 1992] Brown, M Zeus: A system for algorithm animation and multi-view editing (Research Report No.75) DEC Systems Research Center, Palo Alto, CA 10 Brown, 1993 The 1992 SRC Algorithm Animation Festival In Proceedings of the 1993 IEEE Symposium on Visual Languages: 116123, 1993 11 Byrne, M D, Catrambone, R and Stasko, J T.(1996) Do algorithm animations aid learning? Graphics, Visualization, and Usability Center, Georgia Institute of Technology, Atlanta, GA, Technical Report GITGVU -96-18, August 1996 Trang web: 12 13 14 http://www.cs.hope.edu/algamin/cc http://www.cs.edu/~zeil/algae.html http://www.cc.gatech.edu/gvu/softviz/algoanim/xtango.html Trang 80 15 16 17 http://www.csse.monash.edu.au/ http://www.csharp-station.com/Tutorial.aspx http://msdn.microsoft.com/en-us/library/aa288436(v=vs.71).aspx Trang 81 PHỤ LỤC Công đoạn chuẩn bị cho file kịch void arrayExample () { System.out.println(“begin”); String[] a1 = {“4”, “453434”, "HELLO WORLD!", "01010 10101"}; System.out.println(“array a1 50 50 4 453434 “+”\"HELLO WORLD!\" ”+”\"01010 10101\" “+”horz black transparent”); //ANNOTATIONS String[] a2 = {"THIS", "IS", "AN", "ARRAY"}; System.out.println(“array a2 150 100 “+”\"THIS\" ”+”\"IS\" “+”\"AN\" “”\"ARRAY\" “+ ”vert black transparent”); System.out.println(“end”); //ANNOTATIONS //ANNOTATIONS for multiple commands System.out.println(“begin”); System.out.println(“changeParam a1[0] bkgrd red”); System.out.println(“changeParam a2[0] bkgrd red”); System.out.println(“end”); for ( int i =0; i