Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 53 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
53
Dung lượng
1,74 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƢỜNG ĐẠI HỌC SƢ PHẠM HÀ NỘI 2 NGUYỄN THỊ CHIỀU LẬP TRÌNH MÔ PHỎNG MỘT SỐ THUẬT TOÁN TRÊN ĐỒ THỊ Chuyên ngành: Khoa học máy tính Mã số: 60 48 01 01 LUẬN VĂN THẠC SĨ MÁY TÍNH Ngƣời hƣớng dẫn khoa học: TS. Trần Minh Tƣớc Hà Nội, 2014 LỜI CẢM ƠN Nhân dịp hoàn thành khóa luận, tôi xin bày tỏ lòng biết ơn sâu sắc của mình tới TS. Trần Minh Tƣớc đã tận tình giúp đỡ tôi trong quá trình hoàn thành khóa luận này. Tôi xin chân thành cảm ơn Ban giám hiệu, phòng Sau đại học, trƣờng Đại học Sƣ phạm Hà Nội 2 cũng nhƣ toàn thể các thầy cô giáo trong trƣờng đã tạo điều kiện thuận lợi trong quá trình tôi học tập và nghiên cứu. Trong quá trình thực hiện công tác nghiên cứu không tránh khỏi những hạn chế và thiếu sót, tôi xin chân thành cảm ơn những ý kiến đóng góp của các thầy giáo, cô giáo và các bạn học viên. Hà Nội, tháng 12 năm 2014 Tác giả Nguyễn Thị Chiều 2 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. Trần Minh Tƣớc, khóa luận tốt nghiệp “LẬP TRÌNH MÔ PHỎNG MỘT SỐ THUẬT TOÁN TRÊN ĐỒ THỊ” đƣợc hoàn thành, không trùng với bất cứ khóa luận nào khác. Trong quá trình làm khóa luận, tôi đã kế thừa những thành tựu của các nhà khoa học với sự trân trọng và biết ơn. Hà Nội, tháng 12 năm 2014 Tác giả Nguyễn Thị Chiều 3 MỤC LỤC Trang DANH MỤC CÁC HÌNH 5 MỞ ĐẦU 7 Chƣơng 1. KIẾN THỨC CHUẨN BỊ 10 1.1 Tổng quan về thuật toán và mô phỏng thuật toán 10 1.1.1 Tổng quan về thuật toán 10 1.1.2 Mô phỏng thuật toán 11 1.2 Một số khái niệm cơ bản về đồ thị 13 1.2.1 Đồ thị 13 1.2.2 Biểu diễn đồ thị 15 1.3 Giới thiệu một số bài toán trên đồ thị 21 1.3.1 Bài toán tìm kiếm 21 1.3.2 Bài toán tìm luồng lớn nhất trong mạng vận tải 25 1.3.3 Bài toán tô màu đồ thị 33 Chƣơng 2. BIỂU DIỄN DỮ LIỆU VÀ THIẾT KẾ HỆ THỐNG 37 2.1 Biểu diễn dữ liệu 37 2.2 Phân tích và thiết kế hệ thống 37 2.2.1 Mục đích 37 2.2.2 Những yêu cầu thực tế 37 2.2.3 Đề xuất cho hệ thống mới 38 2.2.4 Thiết kế mô phỏng một số thuật toán trên đồ thị 38 2.3 Lựa chọn công cụ, ngôn ngữ lập trình 41 Chƣơng 3. CÀI ĐẶT CHƢƠNG TRÌNH 44 4 3.1 Hệ thống phân cấp mô-đun 44 3.2 Tạo giao diện ngƣời dùng 45 3.2.1 Mô phỏng thuật toán tìm kiếm DFS và BFS 46 3.2.2 Thuật toán tìm luồng cực đại Ford–Fulkerson 48 3.2.3 Thuật toán tô màu Welsh–Powell 48 3.3 Hƣớng dẫn sử dụng chƣơng trình 49 KẾT LUẬN 51 DANH MỤC CÁC TÀI LIỆU THAM KHẢO 52 5 DANH MỤC CÁC HÌNH 1.1 Biểu diễn đồ thị trên mặt phẳng 13 1.2 Biểu diễn đồ thị vô hƣớng 1 G bằng ma trận vuông 16 1.3 Biểu diễn đồ thị có hƣớng 2 G bằng ma trận vuông 16 1.4 Ví dụ đồ thị vô hƣớng 5 đỉnh 17 1.5 Đồ thị cài đặt trên mảng 18 1.6 Đồ thị cài đặt trên danh sách móc nối 18 1.7 Danh sách kề của mảng Adj gồm 12 phần tử 19 1.8 Danh sách móc nối của đồ thị 19 1.9 Đồ thị vô hƣớng 6 đỉnh, đỉnh xuất phát S=1 22 1.10 Minh họa ví dụ về thuật toán DFS dạng bảng 23 1.11 Minh họa ví dụ về thuật toán BFS dạng bảng 25 1.12 Tìm luồng cực đại trong mạng đỉnh phát S và đỉnh thu t 28 1.13 Mạng vận tải với lần lặp 1 28 1.14 Mạng vận tải với lần lặp 2 29 1.15 Mạng vận tải với lần lặp 3 30 1.16 Mạng vận tải với lần lặp 4 31 1.17 Mạng vận tải với lần lặp 5 32 1.18 Mạng vận tải sau khi kết thúc thuật toán 33 1.19 Đồ thị liên thông gồm 6 đỉnh chƣa tô màu 34 1.20 Đồ thị liên thông 6 đỉnh sau khi đã đƣợc tô màu 36 2.1 Quy trình phân tích và thiết kế các nhiệm vụ trƣớc khi mô phỏng 39 2.2 Mô-đun mô phỏng một số thuật toán trên đồ thị 39 6 2.3 Mô hình bài toán mô phỏng thuật toán 41 3.1 Mô-đun mô phỏng thuật toán DFS 44 3.2 Mô-đun mô phỏng thuật toán BFS 44 3.3 Mô-đun mô phỏng thuật toán Welsh–Powell 45 3.4 Giao diện chƣơng trình 45 3.5 Mô phỏng thuật toán BFS ở đồ thị có hƣớng liên thông 46 3.6 Mô phỏng thuật toán BFS ở đồ thị có hƣớng không liên thông 47 3.7 Mô phỏng thuật toán DFS ở đồ thị vô hƣớng liên thông 47 3.8 Mô phỏng thuật toán DFS ở đồ thị vô hƣớng không liên thông 47 3.9 Thuật toán Ford – Fulkerson với đỉnh nguồn 6, đỉnh đích 2 48 3.10 Thuật toán Welsh–Powell với đồ thị liên thông 49 3.11 Thuật toán Welsh–Powell với đồ thị không liên thông 49 7 MỞ ĐẦU 1. Lý do chọn đề tài 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 cơ sở và trung học phổ thông nhƣ là một môn học chính thức. Đối với khối học sinh chuyên Tin học và học sinh giỏi Tin học các vấn đề về đồ thị cũng đã đƣợc đề cập. Tuy nhiên, lý thuyết đồ thị và các thuật toán trên đồ thị vẫn là một vấn đề rộng và phức tạp. Việc hiểu và cài đặt tốt các thuật toán đó đòi hỏi thời gian và công sức rất lớn. Nhƣ một phần của quá trình học thuật toán, việc mô phỏng các thuật toán nhƣ một công cụ trợ giúp ngƣời học theo dõi chi tiết các bƣớc hoạt động của thuật toán và các thay đổi của cấu trúc dữ liệu trong suốt quá trình thực thi. Từ đó giúp ngƣời học tƣ duy thuật toán nhanh hơn và ngày càng yêu thích giải thuật. Với sự bùng nổ của công nghệ thông tin, thì việc mô phỏng thuật toán ngày càng trở nên hữu ích và trở thành giáo cụ trực quan trong hầu hết các lĩnh vực, nhất là trong môi trƣờng giáo dục nhƣ hiện nay. Trong phạm vi của luận văn tốt nghiệp thạc sĩ chuyên ngành khoa học máy tính, từ sự đề xuất hƣớng nghiên cứu và trực tiếp hƣớng dẫn của TS. Trần Minh Tƣớc, chúng tôi xác định nhiệm vụ của đề tài là nghiên cứu về một số thuật toán cơ bản trên đồ thị, sau đó sử dụng một ngôn ngữ lập trình để triển khai xây dựng chƣơng trình nhằm mô phỏng hoạt động của một số thuật toán trên đồ thị. Từ đó chúng tôi đặt tên luận văn là: “Lập trình mô phỏng một số thuật toán trên đồ thị”. Nội dung luận văn đƣợc chia thành 3 chƣơng: Chƣơng 1. Kiến thức chuẩn bị. Ở chƣơng này chúng tôi trình bày tổng quan về thuật toán và mô phỏng thuật toán, một số khái niệm cơ bản về đồ thị và giới thiệu một số bài toán trên đồ thị. 8 Chƣơng 2. Biểu diễn dữ liệu và thiết kế hệ thống. Chƣơng này, chúng tôi nói về cách biểu diễn dữ liệu của chƣơng trình, quá trình phân tích, thiết kế và xây dựng hệ thống mô phỏng các thuật toán trên. Chƣơng 3. Cài đặt chƣơng trình. Trong chƣơng này chúng tôi trình bày nhóm các thành phần chức năng theo từng cấp độ của chƣơng trình, tạo giao diện và hƣớng dẫn sử dụng chƣơng trình. Với đề tài này, chúng tôi hy vọng rằng các bài giảng về đồ thị sẽ trực quan, dễ hiểu hơn. Kết quả của đề tài cũng là sự thể hiện quá trình tập dƣợt nghiên cứu của tôi. 2. Mục đích nghiên cứu Mục đích chính của đề tài là: - Nghiên cứu về các thuật toán trên đồ thị. - Tìm hiểu về Phân tích và Thiết kế hệ thống, Kỹ thuật lập trình. - Sử dụng một ngôn ngữ lập trình để triển khai xây dựng chƣơng trình mô phỏng các thuật toán trên đồ thị. 3. Nhiệm vụ nghiên cứu Tìm hiểu các thuật toán trên đồ thị. Xây dựng chƣơng trình mô phỏng các thuật toán trên đồ thị. 4. Đối tƣợng và phạm vi nghiên cứu 4.1 Đối tƣợng nghiên cứu - Đồ thị hữu hạn. - Các kỹ thuật lập trình. 4.2 Phạm vi nghiên cứu - Tìm hiểu về các thuật toán trên đồ thị: Thuật toán duyệt đồ thị; thuật toán tìm luồng cực đại Ford–Fulkerson; thuật toán tô màu đồ thị Welsh–Powell . - Cài đặt chƣơng trình phần mềm mô phỏng các thuật toán trên. 9 5. Phƣơng pháp nghiên cứu - Nghiên cứu lí thuyết. - Triển khai cài đặt chƣơng trình: + Thiết kế các thuật toán trên đồ thị. Biểu diễn dữ liệu. + Viết chƣơng trình mô phỏng các thuật toán trên đồ thị. + Chạy thử nghiệm và lƣu trữ các kết quả đạt đƣợc, đánh giá lại kết quả. 6. Kết quả đạt đƣợc Xây dựng đƣợc một chƣơng trình mô phỏng quá trình thực hiện của các thuật toán nói trên. Góp phần giúp cho việc giảng dạy các thuật toán một cách dễ hiểu và trực quan nhất. [...]... dựa trên các chi phí về thời gian và không gian cần thiết để thực hiện thuật toán Trong phạm vi luận văn chúng tôi chỉ quan tâm đến việc mô phỏng thuật toán mà không đi sâu xem xét về các tiêu chí nêu trên 1.1.2 Mô phỏng thuật toán Mô phỏng thuật toán là quá trình mô tả cấu trúc dữ liệu, các thao tác của một chƣơng trình bằng đồ họa Mô phỏng thuật toán đƣợc thiết kế nhằm giúp ngƣời dùng hiểu thuật toán, ... Tổng quan về thuật toán và mô phỏng thuật toán 1.1.1 Tổng quan về thuật toán Khái niệm thuật toán Thuật toán là một khái niệm cơ bản của Toán học và Tin học Hiểu một cách đơn giản, thuật toán là một tập các hƣớng dẫn nhằm thực hiện một công việc nào đó 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... khoa học Trong suốt quá trình biểu diễn, ngƣời dùng có thể quan sát việc 12 thực thi thuật toán theo từng bƣớc để có thể biết chi tiết về thuật toán cũng nhƣ hiểu một cách tƣờng tận về thuật toán đó Yêu cầu đối với mô phỏng thuật toán Mô phỏng đúng theo thuật toán: Để mô phỏng một thuật toán nào đó, các bƣớc thực hiện chỉ dẫn trên đồ họa phải phản ánh đúng theo nội dung của thuật toán đã đƣa ra để đảm... những thuật toán cho phép duyệt một cách hệ thống các đỉnh, những thuật toán nhƣ vậy gọi là thuật toán tìm kiếm trên đồ thị Ta quan tâm đến hai thuật toán cơ bản nhất: thuật toán tìm kiếm theo chiều sâu và thuật toán tìm kiếm theo chiều rộng Giới thiệu thuật toán tìm kiếm DFS Tƣ tƣởng của thuật toán có thể trình bày nhƣ sau: Ta sẽ bắt đầu tìm kiếm từ một đỉnh v0 nào đó của đồ thị Sau đó chọn u là một. .. bởi một đường trong G Một đồ thị vô hƣớng gọi là liên thông nếu với mọi cặp đỉnh u, v ta có u đến đƣợc v Một đồ thị có hƣớng gọi là liên thông mạnh 1.2.2 Biểu diễn đồ thị Khi lập trình giải các bài toán đƣợc mô phỏng hoá bằng đồ thị, việc đầu tiên cần làm là tìm cấu trúc dữ liệu để biểu diễn đồ thị sao cho việc giải quyết bài toán đƣợc thuận tiện nhất Có rất nhiều phƣơng pháp biểu diễn đồ thị, ... giá thuật toán và gỡ lỗi khi cài đặt chƣơng trình Một chƣơng trình lập trình trên máy tính sẽ chứa các cấu trúc dữ liệu của thuật toán mà nó sẽ thực hiện Trong khi thực hiện chƣơng trình đó, giá trị thực của cấu trúc dữ liệu thay đổi dựa trên từng bƣớc hoạt động của thuật toán Mô phỏng thuật toán sử dụng đồ họa để biểu diễn sự thay đổi trạng thái của cấu trúc dữ liệu cho từng bƣớc hoạt động của nó một. .. kết quả trung gian và chƣơng trình đƣợc dùng để thực hiện thuật toán - Dễ cài đặt: thuật toá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ật toá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ên một số ví dụ cụ thể để định hƣớng cho việc xây dựng thuật toán Nói về thuật toán ngƣời ta thƣờng quan tâm... thuật toán này thì làm trên ma trận kề ngắn gọn hơn, đối với thuật toán kia có thể làm trên danh sách cạnh dễ dàng hơn v.v 21 1.3 Giới thiệu một số bài toán trên đồ thị 1.3.1 Bài toán tìm kiếm Một bài toán quan trọng trong lí thuyết đồ thị là bài toán duyệt tất cả các đỉnh có thể đế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... đảm bảo rằng ngƣời học học đúng thuật toán mình yêu cầu Cho phép thực hiện theo từng bước: Thông thƣờng, khi học một thuật toán phải dùng đến chƣơng trình mô phỏng để minh họa trong lúc học tập hoặc nghiên cứu thì thuật toán đó thƣờng không phải là thuật toán đơn giản Vì vậy, việc để cho ngƣời dùng có thể hiểu đƣợc thuật toán thông qua chƣơng trình mô phỏng thì chƣơng trình đó phải hết sức “mềm dẻo”:... phép chạy thuật toán theo từng bƣớc để họ có thể tiện theo dõi quá trình thay đổi dữ liệu cũng nhƣ kết quả của thuật toán sau mỗi bƣớc thực hiện Ngoài ra, chƣơng trình càng hiệu quả hơn nếu nó cho phép quan sát lại các bƣớc đã thực hiện Mô phỏng thuật toán phải có tính động: Vì công việc của mô phỏng là mô tả sự thay đổi về cấu trúc dữ liệu sau mỗi bƣớc thực hiện của thuật toán nên hình ảnh mô phỏng cấu . 2.2 Mô- đun mô phỏng một số thuật toán trên đồ thị 39 6 2.3 Mô hình bài toán mô phỏng thuật toán 41 3.1 Mô- đun mô phỏng thuật toán DFS 44 3.2 Mô- đun mô phỏng thuật toán BFS 44 3.3 Mô- đun. nghiên cứu về một số thuật toán cơ bản trên đồ thị, sau đó sử dụng một ngôn ngữ lập trình để triển khai xây dựng chƣơng trình nhằm mô phỏng hoạt động của một số thuật toán trên đồ thị. Từ đó. các thuật toán trên đồ thị: Thuật toán duyệt đồ thị; thuật toán tìm luồng cực đại Ford–Fulkerson; thuật toán tô màu đồ thị Welsh–Powell . - Cài đặt chƣơng trình phần mềm mô phỏng các thuật toán