Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 38 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
38
Dung lượng
0,98 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM THÀNH PHỐ HỒ CHÍ MINH KHOA CƠNG NGHỆ THƠNG TIN ĐỒ ÁN MÔN HỌC MÔ TẢ TRỰC QUAN VÀ DEMO CÁC THUẬT TOÁN DIJKSTRA VÀ PRIM Học phần: THÀNH PHỐ HỒ CHÍ MINH, THÁNG NĂM 2023 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM THÀNH PHỐ HỒ CHÍ MINH KHOA CƠNG NGHỆ THƠNG TIN ĐỒ ÁN MÔN HỌC MÔ TẢ TRỰC QUAN VÀ DEMO CÁC THUẬT TOÁN DIJKSTRA VÀ PRIM Học phần: Giáo viên hướng dẫn: TS.Nguyễn Viết Hưng, GV Nguyễn Phương Nam Sinh viên thực hiện: Nguyễn Hồng Long – 45.01.104.130 Phạm Nguyễn Đăng Khoa – 48.01.103.036 Bùi Nguyễn Thanh Bình – 47.01.103.030 Nguyễn Trần Yến Nhi – 47.01.103.076 THÀNH PHỐ HỒ CHÍ MINH, THÁNG NĂM 2023 MỤC LỤC NHIỆM VỤ THÀNH VIÊN NHÓM DANH MỤC HÌNH ẢNH MỞ ĐẦU Lý chọn đề tài Mục tiêu nhiệm vụ nghiên cứu Đối tượng phạm vi nghiên cứu Phương pháp nghiên cứu Kết cấu đề tài CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 10 Những kiến thức sở thuật toán 10 1.1.1 Khái niệm thuật toán 10 1.1.2 Các đặc trưng thuật toán 10 1.1.3 Độ phức tạp thuật tốn 10 Tổng quan mơ thuật tốn 11 1.2 1.2.1 Khái niệm mơ thuật tốn 11 1.2.2 Ứng dụng mơ thuật tốn 11 1.2.3 Một số yêu cầu mô thuật toán 12 1.3 Tổng quan đồ thị 13 1.3.1 Định nghĩa đồ thị 13 1.3.2 Phân loại đồ thị 13 1.3.3 Cây khung khung nhỏ 14 1.3.4 Các phương pháp biểu diễn đồ thị 14 CHƯƠNG 2: THUẬT TOÁN DIJKSTRA VÀ THUẬT TOÁN PRIM 2.1 Thuật toán Prim 21 21 2.1.1 Giới thiệu thuật toán Prim 21 2.1.2 Mơ tả thuật tốn Prim 21 2.1.3 Các bước giải thuật Prim 21 2.2 Thuật toán Dijkstra 23 2.2.1 Giới thiệu thuật toán Djkstra 23 2.2.2 Mơ tả thuật tốn Djkstra 24 2.2.3 Các bước giải thuật Djkstra 25 CHƯƠNG 3: HỆ THỐNG MÔ PHỎNG THUẬT TỐN 28 3.1 Các chức 28 3.2 Cài đặt thuật tốn 29 3.3 Mơ thuật toán 33 KẾT LUẬN 41 TÀI LIỆU THAM KHẢO 42 NHIỆM VỤ THÀNH VIÊN NHÓM STT Họ tên MSSV Nhiệm vụ Tự đánh giá Nguyễn Hồng 45.01.104.130 Viết Word, PowerPoint 100% Long Xây dựng source code Prim, Dijkstra Phạm Nguyễn 48.01.103.036 Đăng Khoa Xây dựng source code 100% Prim, Dijkstra thuyết trình + Demo Bùi Nguyễn 47.01.103.030 Viết Word, Powerpoint, Thanh Bình 100% xây dựng source code Prim, Dijkstra Nguyễn Trần Yến 47.01.103.076 Nhi Xây dựng source code Prim, Dijkstra, thuyết trình + Demo 100% DANH MỤC HÌNH ẢNH Hình 1.1 Ma trận kề vơ hướng Hình 1.2 Ma trận kề có hướng Hình 1.3 Ma trận trọng số vô hướng Hình 1.4 Ma trận số có hướng Hình 1.5 Ma trận liên thuộc vô hướng Hình 1.6 Ma trận liên thuộc có hướng Hình 1.7 Ma trận bậc Hình 2.1 Nhà khoa học máy tính Edsger Dijkstra Hình 3.1 Giao diện Hình 3.2 Giao diện Hình 3.3 Bước đầu mơ thuật tốn Hình 3.4 Insert node Hình 3.5 Liên kết đỉnh Hình 3.6 Kết sau thực Insert link Hình 3.6 Đồ thị mô Hình 3.7 Thực tìm đường ngắn Hình 3.9 Kết chạy thuật toán Prim Hình 3.10 Kết chạy thuật toán Dijkstra 15 16 17 17 18 19 20 24 28 31 33 34 35 36 37 38 39 40 MỞ ĐẦU Trong thời đại ngày việc mà học tảng khác điều phổ biến, khơng cịn cách học thơng thường trước phương pháp học khác nhiều tảng để minh họa trực quan người học hiểu rõ vấn đề đặt học Thấu hiểu vấn đề việc chúng em tìm phương pháp cách thức để diễn đạt vấn đề cách tạo ứng dụng sử dụng máy tính điều cần làm chúng em người sinh viên khoa công nghệ thông tin Với kiến thức học từ môn lý thuyết đồ thị, truyền đạt kiến thức tính ứng dụng mơn lý thuyết đồ thị vào sống song song với kiến thức học từ chuyên ngành Từ tất điều đó, chúng em trở nên thích thúc, hăng say ham học hỏi tìm tịi hình dung diễn đạt thuật toán lý thuyết đồ thị nhiều phương pháp khác để hiểu rõ thuật toán Lý chọn đề tài Đề tài mô tả trực quan demo thử thuật toán Dijkstra Prim tạo ứng dụng có minh họa trực quan thuật tốn, có vai trị giúp cho người học dễ dàng hình dung tiếp thu kiến thức phương pháp ứng dụng công nghệ thông tin vào giáo dục Trong thời đại công nghiệp hóa, đại hóa ngày nay, muốn giáo dục có bước tiến mới, để việc dạy học theo kịp sống, cần phải chắn phải có phương pháp dạy học, có phương pháp ứng dụng cơng nghệ thơng tin vào giáo dục sử dụng thiết bị để hỗ trợ tảng từ tạo tư sáng tạo khác nhau, có kỹ thực hành, tạo hứng thú học tập Ban đầu nghĩ khơng phù hợp đa phần người sử dụng cách minh họa thuật toán cách vẽ giấy chạy thuật tốn cơng thức (hay cịn gọi giải tay) Nhưng nhận việc sử dụng phương pháp cũ thời gian dẫn đến cách làm sai, đáp án sai Vì chúng em định phải áp dụng kiến thức học chuyên ngành cơng nghệ thơng tin để ứng dụng vào mơn học Như vậy, việc chúng em minh họa trực quan demo thử thuật toán Djikstra Prim lựa chọn vô hợp lý bối cảnh ngày nay, bắt kịp xu hướng đại giáo dục từ mở đường việc dạy học Mục tiêu nhiệm vụ nghiên cứu 2.1 Mục tiêu nghiên cứu Giúp cho người học dựa kiến thức lý thuyết học từ hiểu sâu xem cách minh họa trực quan máy tính 2.2 Nhiệm vụ nghiên cứu Hệ thống hóa lên thuật toán, làm rõ cách thuật toán sử dụng, tiếp cận với người dùng nhanh Phân tích đánh giá chất lượng phần mềm hỗ trợ, biết ưu điểm hạn chế sử dụng phương pháp minh họa trực quan phần mềm Đối tượng phạm vi nghiên cứu 3.1 Đối tượng nghiên cứu Thuật toán Dijkstra thuật toán Prim môn Lý thuyết đồ thị 3.2 Phạm vi nghiên cứu Tìm hiểu thuật tốn Dijstra thuật tốn Prim Phương pháp nghiên cứu Việc nghiên cứu đề tài mô tả trực quan demo thuật toán Dijkstra Prim sử dụng phương pháp sau: - Phương pháp phân tích tổng hợp - Phương pháp quy nạp diễn giải Kết cấu đề tài Chương 1: Cơ sở lý thuyết Chương 2: Thuật toán DijKstra thuật tốn Prim Chương 3: Hệ thống mơ thuật toán CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Những kiến thức sở thuật toán 1.1.1 Khái niệm thuật toán Thuật toán hệ thống chặt chẽ rõ ràng quy tắc nhằm xác định dãy thao tác cấu trúc liệu cho: với liệu vào, sau số hữu hạn bước thực thao tác ra, ta đạt mục tiêu định 1.1.2 Các đặc trưng thuật tốn - Tính đơn định: Ở bước thuật toán, thao tác phải rõ ràng, không gây nên nhập nhằng, lộn xộn, đa nghĩa Thực bước thuật tốn với liệu vào cho kết - Tính dừng: Thuật tốn khơng rơi vào q trình vơ hạn, phải dừng lại cho kết sau số hữu hạn bước - Tính đúng: Sau thực tất bước thuật toán theo trình định, ta phải đạt kết mong muốn với liệu đầu vào Kết kiểm chứng u cầu tốn - Tính phổ dụng: Thuật tốn phải dễ sửa đổi để thích ứng với tốn lớp tốn làm việc liệu khác - Tính khả thi: Kích thước liệu phải đủ nhỏ, thuật tốn phải máy tính thực thời gian cho phép, thuật toán phải dễ hiểu dễ cài đặt 1.1.3 Độ phức tạp thuật toán Cho f g hai hàm xác định dương với n Hàm f(n) gọi O(g(n)) tồn số c > giá trị n0 cho: f(n) = n0 Ngĩa xét giá trị n >= n0 hàm f(n) bị chặn số nhân với g(n) Khi đó, f(n) thời gian thực giải thuật ta nói giải thuật có cấp g(n) (hay độ phức tạp tính tốn O(g(n)) 10 ngắn từ j tới k Vì tìm đường ngắn công thức đệ quy sau: d = (d +d) Thuật toán Djkstra phù hợp cho việc tìm đường ngắn từ nút i tới tất nút khác Bắt đầu cách thiết lập d = d = i j Sau thiết lập d l j nút k cn ca i Sau tìm nút j có d bé Tiếp lấy nút j vừa chọn để khai triển khoảng cách nút khác, nghĩa cách thiết lập d (d, d+l) Tại giai đoạn trình, giá trị d giá trị ước lượng có đường ngắn từ i tới k thực độ dài đường ngắn tìm thời điểm Xem d nhãn nút k Quá trình sử dụng nút để triển khai nhãn cho nút khác gọi trình quét nút Thực tương tự, tiếp tục tìm nút chưa quét có nhãn bé qt Chú ý rằng, giả thiết tất l dương nút khơng thể dán cho nút khác nhãn bé nhãn nút Vì vậy, nút qt việc qt lại thiết khơng xảy Nếu nhãn nút thay đổi nhãn phải quét lại 24 2.2.3 Các bước giải thuật Djkstra Bước 1: bắt đầu với nút A ta có đường Đầu tiên từ A đến B với độ dài từ A đến C với độ dài Vì vậy, viết danh sách kế bên với đỉnh truy cập đỉnh (B, C) trọng số để đến Sau đó, nói trước – chọn đường từ A ← C Bước 2: Khi truy cập vào đỉnh C, ta thấy có đường khác nhau: Con đường C đến B Con đường thứ hai C đến D Con đường thứ ba C đến E 25 Vì vậy, ghi vào danh sách hai đỉnh chọn đường ngắn C đến B Bước 3: Bây B, ta có đường: B đến D B đến E Và B quay lại C Ta chọn đường ngắn B đến D cập nhật vào danh sách trọng số đường từ A đến đỉnh khác Bước 4: Như ta thấy khơng có đường từ D đến E Trong trường hợp đó, ta quay lại đỉnh trước để kiểm tra đường ngắn Bây có đường với độ dài đến E đường đến C 26 Trong trường hợp này, chọn đường thích Ta thấy phương án đường từ A đến E có trọng số đường ngắn ghi danh sách Cuối cùng, ta có tất đường mà sử dụng CHƯƠNG 3: HỆ THỐNG MƠ PHỎNG THUẬT TỐN 3.1 Các chức Khi mở chạy chương trình hình xuất hình bên dưới: 27 Hình 3.1 Giao diện Giải thích chức giao diện Name: tên điểm X, Y: tọa độ điểm Insert node: nút để chèn điểm vào sau điền đủ Name, X, Y Cost: trọng số đường (từ điểm bắt đầu đến điểm kết thúc) To: điểm cuối From: điểm đầu 28 Insert link: nút dùng để nối hai điểm lại với điền đủ cost, to from Modify: muốn di chuyển điểm ta tích vào ô modify không muốn tắt Calculate: nút để tìm đường ngắn 3.2 Cài đặt thuật toán Node: Gồm tọa độ x,y, số node đỉnh Khi thuật tốn thực thi nhãn đưa vào cho node Link (lớp thể cạnh đồ thị - dùng lưu trữ vẽ đồ thị): Mỗi cạnh xác định gồm node đầu, node cuối, trọng số cạnh 29 30 From: dùng để tạo giao diện hệ thống, chứa hàm vẽ đồ thị (cụ thể vẽ node, link, đồng thời thể đồ thị lên Panel) hàm thuật tốn Hình 3.2 Giao diện 31 Cài đặt thuật toán Prim: Cài đặt thuật toán Dijkstra: 32 3.3 Mơ thuật tốn Đầu tiên ta điền tên điểm a vào ô Nam tọa độ vào X Y Hình 3.3 Bước đầu mô thuật tốn Sau điền đủ thơng tin ta nhấn nút Insert node để insert điểm vào Hình 3.4 Insert node 33 Sau insert hết tất điểm bước ta nối điển lại với Hình 3.5 Liên kết đỉnh Ở hình ta nối từ điểm b sang điểm c với trọng số Sau điền đầy đủ thông tin ta nhấn nút Insert link để nối Hình 3.6 Kết sau thực Insert link 34 Và đồ thị mà ta muốn vẽ Hình 3.7 Đồ thị mô Sau hoàn thành đồ thị ta ấn nút calculate để tìm đường ngắn Hình 3.8 Thực tìm đường ngắn 35 Giải thích chạy theo thuật toán Prim: ta đỉnh C ta chọn đỉnh D lấy cạnh CD cạnh CD nhỏ cạnh CB, từ đỉnh D ta chọn đỉnh U lấy cạnh DU cạnh DU nhỏ cạnh CB DB, ta từ đỉnh U chọn đỉnh B cạnh UB UB nhỏ cạnh CB, DB UA, ta chọn đỉnh A cạnh BA cạnh BA nhỏ cạnh CB, DB, UA Dựa vào kết chạy thuật tốn Prim ta có kết sau: Hình 3.9 Kết chạy thuật toán Prim Giải thích chạy theo thuật tốn Dijkstra a b c d u (, -) (, -) (, -) (, -) * (1, a)* (, -) (, -) (6, a) * * (9, b) (5, b) (5, b)* 36 * * (9, b) (5,b)* * * * (9, b)* * * Dựa vào kết chạy thuật toán Dijkstra ta có kết sau: Hình 3.10 Kết chạy thuật tốn Dijkstra KẾT LUẬN Để góp phần giúp cho người học dễ tiếp thu, hiểu sâu thuật toán, tạo niềm hứng thú học tập, có nhìn trực quan thuật tốn Dijkstra Prim, kết hợp với việc dạy học phương pháp giáo dục Điều điều cần thiết thời điểm bây giờ, vừa bắt kịp xu hướng thời đại, vừa nâng cao hiệu hiệu suất người học Điều đáng cần phải quan tâm trọng việc tạo ứng dụng phản hồi người học chất lượng ứng dụng tảng để có sản phẩm tốt hớn, bước 37 đệm để tạo nhiều ứng dụng phục vụ cho nhiều khía cạnh khác không giáo dục TÀI LIỆU THAM KHẢO Terrence Aluda Understanding Dijkstra’s Shortest Path Algorithm in Network Routing using Python, 18/04/2023, từ Prim’s Minimum Spanning Tree(MST) Greedy Algo -5, 21/04/2023, từ Biểu diễn đồ thị, 18/04/2023, từ 38