1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Minh hoa trực quan bằng giao diện đồ họa hai thuật toán lý thuyết đồ thị ford bellman và prim

13 169 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 0,99 MB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM TP HỒ CHÍ MINH KHOA CNTT Tiểu Luận Đề Tài Nhóm: ĐỀ TÀI MINH HOA TRỰC QUAN BẰNG GIAO DIỆN ĐỒ HỌA HAI THUẬT TOÁN LÝ THUYẾT ĐỒ THỊ FORD-BELLMAN VÀ PRIM Học phần: 2111COMP170101 – Lý thuyết đồ thị ứng dụng Học kỳ I Năm học 2021-2022 Giảng viên hướng dẫn: Lương Trần Ngọc Khiết Họ tên: Phạm Đức Tài MSSV :44.01.104.186 Các thành viên nhóm: Họ tên MSSV Lê Anh Kha 46.01.104.074 Trần Thanh Bình 46.01.104.014 Đinh Trần Thanh Tú 46.01.104.205 Trương Thế Nhật 46.01.104.129 Phạm Đức Tài 44.01.104.186 MỤC LỤC: NỘI DUNG .2 CHƯƠNG GIỚI THIỆU THUẬT TOÁN PRIM 1.1 Sự đời thuật toán Prim 1.2.Mơ tả thuật tốn CHƯƠNG 2: GIỚI THIỆU THUẬT TOÁN FORD-BELLMAN 2.1.Sự đời thuật toán ford-bellman 2.2 Mơ tả thuật tốn 2.5.Đánh giá thuật toán CHƯƠNG NỘI DUNG THỰC HÀNH 3.1.Gi iảthích cách ho tạ đ ộ ng c ủ a ứ ng d ng ụ gi iảthu tậPrim bằằng Windows Form: 3.2.Thuật toán Forbell: BẢNG PHÂN CÔNG CÔNG VIỆC TÀI LIỆU THAM KHẢO NỘI DUNG CHƯƠNG GIỚI THIỆU THUẬT TOÁN PRIM Bài tốn tối ưu tốn mn thưở ngành tin học có ứng dụng rộng rãi đa dạng Các toán tối ưu thường xuất ngành kinh tế kĩ thuật lý mà giới có nhiều thuật tốn để giải tốn tối ưu Một số kể đến thuật toán Prim 1.1 Bài toán khung nhỏ Bài toán khung (cây bao trùm) nhỏ đồ thị số toán tối ưu đồ thị tìm ứng dụng nhiều lĩnh vực khác đời sống Để minh họa cho ứng dụng đó, tham khảo ba mơ hình thực tế tiêu biểu tốn: • Bài tốn xây dựng hệ thống cable: Giả sử muốn xây dựng hệ thống cable điện thoại nối n điểm mạng viễn thông cho điểm mạng có đường truyền tin tới điểm khác Biết chi phí xây dựng hệ thống cable từ điểm i đến điểm j c[i,j] Hãy tìm cách xây dựng hệ thống mạng cable cho chi phí nhỏ • Bài tốn xây dựng hệ thống đường sắt: Giả sử ta muốn xây dựng hệthống đường sắt nối n thành phố cho hành khách từ mộtthành phố đến thành phố lại Mặt khác trênquan điểm kinh tế đòi hỏi chi phí xây dựng hệ thống đường phải nhỏ nhất.Rõ ràng đồ thị mà đỉnh thành phố cạnh tuyến đường sắtnối thành phố tương ứng với phương án xây dựng tối ưu phải Vìvây, tốn đặt dẫn tốn tìm khung nhỏ đồ thị đầy đủn đỉnh, đỉnh tương ứng với thành phố, với độ dài các cạnhchính chi phí xây dựngđường ray nối hai thành phố tương ứng (chú ý toán ta giả thiết khơng xây dựng tuyến đường sắt có nhà ga phântuyến nằm ngồi thành phố) • Bài tốn nối mạng máy tính: Cần nối mạng hệ thống gồm n máy tính đánh số từ đến n Biết chi phí nối máy i với máy j c[i,j], i,j = 1, 2, ,n ( thơng thường chi phí phụ thuộc vào độ dài cáp nối cần sử dụng) Hãy tìm cáchnối mạng cho tổng chi phí nối mạng nhỏ nhất.Và toán khung nhỏ phát biểu sau:Cho đồ thị G= đồ thị vô hướng liên thông với tập đỉnh V={1,2,3…,n}và tập cạnh E gồm m cạnh Mỗi cạnh e đồ thị gán với sốc(e) gọi trọng số cạnh Giả sử H= khung đồ thị G Ta gọi độ dài c(H) khung H tổng độ dài cạnh : c(H)= ∑ c(e) e∈ T Bài toán đặt là, số khung đồ thị tìm khung có độ dài nhỏ đồ thị Để giải toán tìm khung nhỏ nhất, liệt kê toàn khung chọn số khung liệt kê khung có độ dài nhỏ Tuy nhiên số khung đồ thị lại lớn cỡ nn-2 phương án hồn tồn khơng khả thi cần với đồ thị với số đỉnh cỡ chục phương án trở nên vô dụng Rất may có hai thuật tốn vơ hiệu để giải tồn thuật toán Prim thuật toán Kruskal Chúng ta tìm hiểu thuật tốn Prim 1.2 Sự đời thuật tốn Prim Thuật tốn Prim cịn mang tên người láng giềng gần nhất, hay phươngpháp lân cận gần nhất,là thuật tốn tham lam để tìm khung nhỏ đồ thị vô hướng có trọng số liên thơng Nghĩa tìm tập hợp cạnh đồ thị tạo thành chứa tất đỉnh, cho tổng trọng số cạnh nhỏ Thuật toán tìm năm 1930 nhà tốn học người Séc Vojtěch Jarník sau nhà nghiên cứu khoa học máy tính Robert C Prim năm 1957 lần độc lập Edsger Dijkstra năm 1959 Do cịn có tên gọi thuật tốn DJP, thuật tốn Jarník, hay thuật tốn Prim–Jarník.II 1.3.Mơ tả thuật toán Begin Bước (Khởi tạo): VH = {s}; //Tập đỉnh khung thiết lập ban đầu s V=V\{s}; //Tập đỉnh V bớt sT=∅; //Tập cạnh khung thiết lập ban đầu ∅ D(H)=0;//Độ dài khung thiết lập Bước (Lặp): while(V≠ ) do{ e=; //cạnh có độ dài nhỏ thỏa mãn u∈V, v∈VH d(H)=d(H)+d(e);//thiết lập độ dài khung nhỏ T=T∪ {e};//Kết nạp e vào khung V=V\{u};//Tập đỉnh V bớt đỉnh u VH=VH∪{u};//Tập đỉnh VH thêm vào đỉnh u } Endwhile; Bước (Trả lại kết quả): if(|T|; else Return(T,d(H)); End 1.4 Đánh giá thuật toán 1.4.1 Độ phức tạp thuật toán Xét độ phức tạp thuật toán sử dụng ma trận kề, thuật tốn Prim có độ phức tạp O(n2 ) Nếu kết hợp thuật toán Prim với cấu trúc Heap thuật toán có độ phức tạp O((m+n)lgn) Do thời gian nghiên cứu hạn hẹp nên chúng tơi xin phép trình bày cách lập trình sử dụng ma trận kề 1.4.2 Ưu điểm so với Kruskal Thuật toán Kruskal làm việc hiệu với đồ thị dày (số cạnh cỡ m≈n(n1)/2) Trong trường hợp thuật tốn Prim tỏ hiệu Tuy nhiên làm việc với đồ thị thưa người ta thường lựa chọn thuật toán Kruskal thay thuật tốn Prim CHƯƠNG 2: GIỚI THIỆU THUẬT TỐN FORD-BELLMAN Thuật tốn Bellman-Ford thuật tốn tính đường ngắn nguồn đơn đồ thịcó hướng có trọng số (trong số cung có trọng số âm) Thuật tốn Dijkstra giải toánnày với thời gian chạy thấp hơn, lại địi hỏi trọng số cung phải có giá trị khơng âm Do đó,thuật tốn Bellman-Ford thường dùng có cung với trọng số âm.Thuật tốn Bellman Ford chạy thời gian O(V·E), V số đỉnh E số cung đồ thị 2.1.Chứng minh tính đắn Tính đắn thuật tốn chứng minh quy nạp Thuật tốn phát biểu xác theo kiểu quy nạp sau: Bổ đề Sau i lần lặp vịng for: 2.1.1 Nếu Khoảng_cách(u) khơng có giá trị vơ lớn, độ dài đường từ stới u; 2.1.2 Nếu có đường từ s tới u qua nhiều i cung, Khoảng_cách(u) có giá trị khơng vượt độ dài đường ngắn từ s tới u qua tối đa i cung Chứng minh Trường hợp bản: Xét i=0 thời điểm trước vịng for chạy lần Khi đó, với đỉnh nguồn khoảng_cách(nguồn) = 0, điều Đối với đỉnh u khác, khoảng_cách(u) = vô cùng, điều khơng có đường từ nguồn đến u qua cung Trường hợp quy nạp: Chứng minh câu Xét thời điểm khoảng cách tới đỉnh cập nhật công thức khoảng_cách(v):= khoảng_cách(u) + trọng_số(u,v) Theo giả thiết quy nạp, khoảng_cách(u) độ dài đường từ nguồn tới u Do đó, khoảng_cách(u) + trọng_số(u,v) độ dài đường từ nguồn tới u tới v Chứng minh câu 2: Xét đường ngắn từ nguồn tới u qua tối đa i cung Giả sử v đỉnh liền trước u đường Khi đó, phần đường từ nguồn tới v đường ngắn từ nguồn tới v qua tối đa i-1 cung Theo giả thuyết quy nạp, khoảng_cách(v) sau i-1 vịng lặp khơng vượt q độ dài đường Do đó, trọng_số(v,u) + khoảng_cách(v) có giá trị khơng vượt độ dài đường từ s tới u.Trong lần lặp thứ i, khoảng_cách(u) lấy giá trị nhỏ khoảng_cách(v) + trọng_số(v,u) với v Do đó, sau i lần lặp, khoảng_cách(u) có giá trị không vượt độ dài đường ngắn từ nguồn tới u qua tối đa i cung Khi i số đỉnh đồ thị, đường tìm đường ngắn tồn cục, trừ đồ thị có chu trình âm Nếu tồn chu trình âm mà từ đỉnh nguồn đến khơng tồn đường nhỏ (vì lần quanh chu trình âm lần giảm trọng số đường) 2.2 Ứng dụng định tuyến Một biến thể phân tán thuật toán Bellman-Ford dùng giao thức định tuyến vector khoảng cách, chẳng hạn giao thức RIP (Routing Information Protocol) Đây biến thể phân tán liên quan đến nút mạng (các thiết bị định tuyến) hệ thống tự chủ (autonomous system), ví dụ tập mạng IP thuộc sở hữu nhà cung cấp dịch vụ Internet (ISP) Thuật toán gồm bước sau: Mỗi nút tính khoảng cách tất nút khác hệ thống tự chủ lưu trữ thông tinnày bảng Mỗi nút gửi bảng thơng tin cho tất nút lân cận Khi nút nhận bảng thông tin từ nút lân cận, tính tuyến đường ngắn tớitất nút khác cập nhật bảng thông tin Nhược điểm thuật tốn Bellman-Ford cấu hình • Khơng nhân rộng tốt • Các thay đổi tô-pô mạng không ghi nhận nhanh cập nhật lan truyền theo từngnút • Đếm dần đến vơ (nếu liên kết hỏng nút mạng hỏng làm cho nút bị tách khỏi tậpcác nút khác, nút tiếp tục ước tính khoảng cách tới nút tăng dần giá trị tínhđược, cịn xảy việc định tuyến thành vịng trịn) 2.3.Sự đời thuật tốn ford-bellman Thuật tốn lần đề xuất Alfonso Shimbel (1955), thay vào đặt theo tên Richard Bellman Lester Ford Jr., người xuất vào năm 1958 1956 Thuật tốn Bellman – Ford thuật tốn tính tốn đường ngắn từ đỉnh nguồn đến tất đỉnh khác đồ thị có trọng số Nó chậm so với thuật tốn Dijkstra cho vấn đề, linh hoạt hơn, có khả xử lý đồ thị số trọng số cạnh số âm Thuật toán thường đặt theo tên hai nhà phát triển nó, Richard Bellman Lester Ford, Jr., người xuất vào năm 1958 1956; nhiên, Edward F Moore cơng bố thuật tốn tương tự vào năm 1957, lý này, đơi cịn gọi thuật toán Bellman – Ford – Moore Trọng số cạnh âm tìm thấy ứng dụng khác đồ thị, tính hữu ích thuật toán Tuy nhiên, đồ thị chứa "chu trình âm", tức chu trình có cạnh tổng giá trị âm, khơng có đường rẻ nhất, đường rẻ cách thêm lần qua chu trình âm Trong trường hợp vậy, thuật tốn Bellman – Ford phát chu trình âm báo cáo tồn chúng, khơng thể tạo câu trả lời xác "đường ngắn nhất" truy cập chu trình âm từ nguồn 2.4 Mơ tả thuật tốn function BellmanFord(danh_sách_đỉnh, danh_sách_cung, nguồn) // hàm yêu cầu đồ thị đưa vào dạng danh sách đỉnh, danh sách cung // hàm tính giá trị khoảng_cách đỉnh_liền_trước đỉnh, // cho giá trị đỉnh_liền_trước lưu lại đường ngắn // bước 1: khởi tạo đồ thị for each v in danh_sách_đỉnh: if v is nguồn then khoảng_cách(v):= else khoảng_cách(v):= vô đỉnh_liền_trước(v):= null // bước 2: kết nạp cạnh for i from to size(danh_sách_đỉnh)-1: for each (u,v) in danh_sách_cung: if khoảng_cách(v) > khoảng_cách(u) + trọng_số(u,v): khoảng_cách(v):= khoảng_cách(u) + trọng_số(u,v) đỉnh_liền_trước(v):= u // bước 3: kiểm tra chu trình âm for each (u,v) in danh_sách_cung: if khoảng_cách(v) > khoảng_cách(u) + trọng_số(u,v): error "Đồ thị chứa chu trình âm" 2.5.Đánh giá thuật tốn Ưu điểm: Giống Dijkstra, thuật tốn tìm đường ngắn đại thể có ưu điểm giải đồ thị chu trình âm Từ đỉnh xuất phát nhìn hình ta suy đường ngắn từ đỉnh tới đỉnh khác mà không cần làm lại từ đầu Rất gọn,dễ nhớ,dễ học Nhược điểm: Là đơi qt lại nút quét nên hiệu suất không cao Ở viễn thơng khơng biết có trường hợp đường có giá trị âm nên khó đánh giá Cái lần qt thêm vào giá trị nhỏ vào tập hợp đường biết, lần sau khơng phải qt cịn quét đại trà với vòng lặp số đỉnh dừng Tốn nhiều thời gian,độ phức tạp cao 0(n^3) CHƯƠNG NỘI DUNG THỰC HÀNH 3.1.Giải thích cách hoạt động ứng dụng giải thuật Prim Windows Form: Thuật tốn xử lý hàm Calculate Form1.cs (1)Danh sách đỉnh lưu listVertex (2)Danh sách cạnh listEdge (3)Tạo listInTreeVertex - danh sách lưu đỉnh khung nhỏ Mỗi danh sách tạo thêm danh sách copy để xử lý đỉnh cạnh Ta đánh dấu đỉnh chưa duyệt (4)Tạo đỉnh gốc lấy từ comboboxRootVertex, đánh dấu đỉnh duyệt (5)Tạo vòng lặp, chạy đến số đỉnh danh sách khung = (số đỉnh 1) duyệt qua tất đỉnh Với vòng lặp: Tìm đỉnh kề với khung Tìm đỉnh có trọng số cạnh nhỏ Thêm vào khung nhỏ nhất, tăng số đỉnh khung lên Đánh dấu đỉnh duyệt Kết thúc vòng lặp ta có khung nhỏ 3.2 Giải thích cách hoạt động ứng dụng giải thuật Ford Bellman Windows Form: Thuật tốn xử lý hàm bellmanFord FB.cs Hàm tính giá trị khoảng cách lưu mảng khoangcach(1) đỉnh liền trước đỉnh lưu mảng truoc(2) Sao cho giá trị đỉnh liền trước lưu lại đường ngắn Ta thực duyệt n lần, với n số đỉnh đồ thị Với lần duyệt, ta tìm tất cạnh mà đường qua cạnh rút ngắn đường ngắn từ đỉnh gốc tới đỉnh khác Ở lần duyệt thứ n, cịn cạnh rút ngắn đường đi, điều chứng tỏ đồ thị có chu trình âm, ta kết thúc thuật tốn BẢNG PHÂN CÔNG CÔNG VIỆC ST T TÊN MSSV PHÂN CƠNG CƠNG VIỆC Lê Anh Kha Trần Thanh Bình Phạm Đức Tài 46.01.104.07 46.01.104.01 44.01.104.18 Đinh Trần Thanh 46.01.104.20 Tú 5 Trương Thế Nhật Đọc hiểu code, tổng hợp viết báo cáo minh họa Tổng hợp hoàn chỉnh code, đọc hiểu code, quay video demo Tìm kiếm, tổng hợp, đọc hiểu chỉnh sửa giao diện thuật tốn Tìm kiếm, tổng hợp, đọc hiểu chỉnh sửa giao diện thuật tốn (Khơng có máy tính hỗ trợ) theo dõi thành viên nhóm để nắm kiến thức thuật toán 46.01.104.12 Tự đánh giá: Các thuật tốn nhóm thực áp dụng với đồ thị vô hướng, chưa thể áp dụng với đồ thị có hướng Nhóm chưa biết cách gộp project lại mà chạy project solution TÀI LIỆU THAM KHẢO [1] 2000 Kenneth H Rosen, Discrete Mathematics and Its Applications, Mc Graw-Hill, [2] Kenneth H.Rosen Toán học rời rạc Ứng dụng tin học, Nhà xuất lao động 2010, người dịch Bùi Xuân Toại …………… LINK MÃ NGUỒN ỨNG DỤNG VÀ VIDEO DEMO: https://drive.google.com/drive/folders/1F0ITXO9u0WjROGstXbiHQknPRnCiEIrU ?usp=sharing ... THIỆU THUẬT TOÁN PRIM 1.1 Sự đời thuật toán Prim 1.2.Mô tả thuật toán CHƯƠNG 2: GIỚI THIỆU THUẬT TOÁN FORD-BELLMAN 2.1.Sự đời thuật toán ford-bellman. .. ta tìm hiểu thuật tốn Prim 1.2 Sự đời thuật toán Prim Thuật toán Prim mang tên người láng giềng gần nhất, hay phươngpháp lân cận gần nhất,là thuật toán tham lam để tìm khung nhỏ đồ thị vơ hướng... 1.4 Đánh giá thuật tốn 1.4.1 Độ phức tạp thuật toán Xét độ phức tạp thuật toán sử dụng ma trận kề, thuật toán Prim có độ phức tạp O(n2 ) Nếu kết hợp thuật toán Prim với cấu trúc Heap thuật tốn có

Ngày đăng: 26/04/2022, 19:52

HÌNH ẢNH LIÊN QUAN

BẢNG PHÂN CÔNG CÔNG VIỆC - Minh hoa trực quan bằng giao diện đồ họa hai thuật toán lý thuyết đồ thị ford bellman và prim
BẢNG PHÂN CÔNG CÔNG VIỆC (Trang 12)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w