1. Trang chủ
  2. » Giáo án - Bài giảng

Thực hành Toán rời rạc - Chương 7: Đồ thị và các tính chất của đồ thị

10 11 0

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

THÔNG TIN TÀI LIỆU

Thực hành Toán rời rạc - Chương 7: Đồ thị và các tính chất của đồ thị. Chương này cung cấp cho học viên những nội dung về: biểu diễn đồ thị trong Python; một số đặc trưng và tính chất của đồ thị; sử dụng gói networkx để giải các bài toán đồ thị;... Mời các bạn cùng tham khảo!

Bộ mơn Khoa học Dữ liệu THỰC HÀNH TỐN RỜI RẠC TÀI LIỆU PHỤC VỤ SINH VIÊN NGÀNH KHOA HỌC DỮ LIỆU Nhóm Giảng viên biên soạn: TS Hồng Lê Minh – Khưu Minh Cảnh – Hoàng Thị Kiều Anh – Lê Ngọc Thành – Phạm Trọng Nghĩa –Nguyễn Công Nhựt – Trần Ngọc Việt – Đỗ Đình Thủ – Nguyễn Hữu Trí Nhật – Lê Cơng Hiếu – Nguyễn Thị Thanh Bình – Nguyễn Thái Hải – Huỳnh Thái Học Giảng viên khác TP.HCM – Năm 2020 Thực hành Tốn rời rạc Trang Bộ mơn Khoa học Dữ liệu MỤC LỤC CHƯƠNG 7: ĐỒ THỊ VÀ CÁC TÍNH CHẤT CỦA ĐỒ THỊ 3 Biểu diễn đồ thị Python 1.1 Biểu diễn đồ thị ma trận kề 1.2 [Đọc thêm] Sử dụng cấu trúc liệu Python Một số đặc trưng tính chất đồ thị 2.1 Các số tính chất đỉnh cạnh, loại đồ thị 2.2 Các thuộc tính đồ thị Sử dụng gói networkx để giải toán đồ thị 3.1 Giới thiệu gói networkx 3.2 Tạo lập đồ thị vô hướng với networkx BÀI TẬP CHƯƠNG Thực hành Tốn rời rạc Trang Bộ mơn Khoa học Dữ liệu CHƯƠNG 7: ĐỒ THỊ VÀ CÁC TÍNH CHẤT CỦA ĐỒ THỊ Mục tiêu: - Khái niệm biểu diễn đồ thị Python - Định nghĩa liên thông đồ thị - Xử lý đường đi, chu trình đồ thị Python - Khai phá tính chất đồ thị thơng qua gói networkx Python Nội dung chính: Biểu diễn đồ thị Python Hiện tại, đồ thị biểu diễn nhiều dạng ngơn ngữ lập trình Dưới đây, hai dạng ngôn ngữ Python giới thiệu 1.1 Biểu diễn đồ thị ma trận kề Ma trận kề hình thức biểu diễn đồ thị đơn giản Ma trận kề ma trận vuông nxn với n số đỉnh đồ thị Các quy tắc biểu diễn ma trận kề = ,1 ≤ ≤ ,1 ≤ ≤   - - Ma trận gồm n dòng n cột tương ứng với đồ thị n đỉnh Giá trị thể nhiều dạng thông tin đây: Sự kết nối (đối với đồ thị quan tâm đến kết nối): giá trị khác biết có kết nối từ đỉnh đến đỉnh Chiều dài/giá trị/hàm phạt/khả tiếp cận từ đỉnh đến đỉnh (giá trị vơ xem hai đỉnh khơng có kết nối trực tiếp; giá trị cho thấy hai đỉnh trùng nhau; giá trị âm cho thấy kết nối ngược chiều); Dạng đồ thị: đồ thị có hướng thường cạnh ngược hướng có giá trị âm (nghĩa là: = − ) Tuy nhiên, nhược điểm phương pháp thể là: việc thể đồ thị lớn đặc biệt thưa tốn nhiều tài nguyên Do ma trận tăng mũ theo kích thước số đỉnh 1.2 [Đọc thêm] Sử dụng cấu trúc liệu Python Sinh viên tham khảo thêm thực hành trực tuyến với hỗ trợ giảng viên: https://www.python-course.eu/graphs_python.php Thực hành Toán rời rạc Trang Bộ môn Khoa học Dữ liệu Một số đặc trưng tính chất đồ thị Dưới số số đặc trưng tính chất đồ thị/mạng 2.1 Các số tính chất đỉnh cạnh, loại đồ thị Để đánh giá mức độ phức tạp kết nối cục đồ thị/mạng:  Chỉ số : tỉ số số liên kết thực số liên kết có mạng Cơng thức: = Nhận xét: -  = (ngưỡng liên kết) ≤ 3( − 2) , : ố đỉ ℎ ℎ ặ! ú# !ủ %ạ ' ≤ (ngưỡng nhiều liên kết) Chỉ số ): tỉ số số lượng vòng thực số lượng vòng cực đại mạng (Vòng liên kết đỉnh, khơng tính vịng bao trùm) )= ! ! = ! (2 − 5) Nhận xét: với mạng liên kết, số ) khơng thích hợp để đánh giá Với mạng có số ) lớn () gần 1) mạng có kết nối tốt Ứng dụng việc phân tích kết nối giao thơng Tính tốn xem nơi “giao thơng thuận tiện” 2.2 Các thuộc tính đồ thị Cho đồ thị + = (,, -) với , tập đỉnh - tập cạnh Gọi khoảng cách hai đỉnh , / (., / ∈ -) đồ thị + 1(., /)  Phủ* đỉnh (eccentricity) Phủ đỉnh kí hiệu 2!!(/) khoảng cách xa đến đỉnh khác Như vậy, theo định nghĩa, là: 2!!(/) = max{1(/, 8)} , (/ ∈ ,) (* từ tạm dịch)  ∈6 Đường kính đồ thị (diameter), kí hiệu diam(G): Đường kính đồ thị định nghĩa độ dài lớn đường ngắn hai điểm + Như vậy, theo định nghĩa, đường kính đồ thị + : %(+): Thực hành Tốn rời rạc Trang Bộ mơn Khoa học Dữ liệu : %(+) = max {2!!(/)|} Ứng dụng: Xét thời gian chậm để loan tin Ví dụ: sáng 00 ngày, tất ngân hàng, cửa hàng cập nhật giá ngoại tệ, giá cổ phiếu Do đó, trước đó, đoạn mã script webservice cài đặt để chuyển đến máy Máy chậm hệ thống phải chuyển đến trước thời điểm 00  Bán kính đồ thị (radius), kí hiệu radius(G): Ngược với đường kính đồ thị, bán kính đồ thị định nghĩa giá trị nhỏ phủ đồ thị Như vậy, bán kính đồ thị định nghĩa là: < (+) = {2!!(/)|} Ứng dụng: Trong thành phố, khu trung tâm xem điểm đồ thị (có cạnh đường kết nối) việc tìm bán kính đồ thị tìm vị trí để đặt tiện ích xã hội như: trạm y tế, trạm chữa cháy Các đỉnh có ecc với bán kính xem đỉnh trung tâm đồ thị Sử dụng gói networkx để giải toán đồ thị 3.1 Giới thiệu gói networkx Thư viện networkx thư viện để xử lý mạng/đồ thị Python Networkx có khả năng:    Phân tích mạng bản: Thể khái niệm đồ thị Thuộc tính loại cấu trúc đồ thị Nhận diện node trung tâm đồ thị Truyền thông mạng: Nhóm phân hoạch đồ thị Tìm kiếm “cộng đồng” mạng/đồ thị tĩnh động Các ứng dụng phân tích mạng Hiện tại, gói networkx tích hợp gói phần mềm Anaconda Các thành phần gói networkx bao gồm: - Đồ thị: đồ thị vơ hướng (Graph) hữu (có) hướng (DiGraph) Node: nốt đồ thị Edge: cạnh đồ thị Để sử dụng gói networkx, phải tham chiếu thư viện >>> import networkx as nx Thực hành Toán rời rạc # sử dụng với tên gọi nx >>> import networkx Trang Bộ môn Khoa học Dữ liệu 3.2 Tạo lập đồ thị vô hướng với networkx >>> g = nx.Graph() >>> g.add_node('TP.HCM') >>> g.add_node('Dong Nai') >>> g.add_node('Ba Ria Vung Tau') >>> g.add_node('Lam Dong') >>> g.add_node('Can Tho') >>> g.add_node('Long An') >>> g.add_edge('TP.HCM', 'Dong Nai') >>> g.add_edge('TP.HCM', 'Ba Ria Vung Tau') >>> g.add_edge('TP.HCM', 'Long An') >>> g.add_edge('Dong Nai', 'Lam Dong') >>> g.add_edge('Dong Nai', 'Ba Ria Vung Tau') >>> print (g.number_of_nodes()) ……………………………………………………  sinh viên điền vào >>> print (g.number_of_edges()) ……………………………………………………  sinh viên điền vào >>> print (g.nodes()) ……………………………………………………………………  sinh viên điền vào >>> print (g.edges()) ……………………………………………………………………  sinh viên điền vào ………………………………………………………………………………………… >>> print (g.degree('TP.HCM')) ……………………………………………………  sinh viên điền vào >>> print (g.degree()) Thực hành Toán rời rạc Trang Bộ môn Khoa học Dữ liệu ……………………………………………………………………  sinh viên điền vào >>> print (list(g.neighbors('TP.HCM'))) ……………………………………………………………………  sinh viên điền vào >>> g.has_edge('Lam Dong', 'Long An') ……………………………………………………  sinh viên điền vào >>> nx.shortest_path(g, 'Lam Dong', 'Long An') # có mạng lưới đường …………………………………………………………………  sinh viên điền vào >>> nx.shortest_path(g, 'Lam Dong', 'Can Tho') # chưa xây dựng mạng đường …………………………………………………………………  sinh viên điền tên Exception >>> g.add_node('Tien Giang') >>> g.add_edge('Tien Giang', 'Long An') >>> g.add_edge('Tien Giang', 'Can Tho') >>> nx.shortest_path(g, 'Lam Dong', 'Can Tho') # bổ sung thêm đường …………………………………………………………………  sinh viên điền vào >>> nx.shortest_path_length(g, 'Lam Dong', 'Ba Ria Vung Tau') ……………………………………………………  sinh viên điền vào >>> nx.shortest_path_length(g, 'Dong Nai', 'Ba Ria Vung Tau') ……………………………………………………  sinh viên điền vào >>> nx.shortest_path_length(g, 'Lam Dong', 'Long An') ……………………………………………………  sinh viên điền vào Thực hành Tốn rời rạc Trang Bộ mơn Khoa học Dữ liệu BÀI TẬP CHƯƠNG Câu 1: Cài đặt hàm tính tốn cấu trúc mạng: - Chỉ số đồ thị/mạng Chỉ số ) đồ thị/mạng Câu 2: Cài đặt thuật toán Dijsktra theo cấu trúc liệu ma trận kề Cho đồ thị có trọng số + = (?, -) với ?, - tập đỉnh tập cạnh Xét ánh xạ: @: - → ℝ Ta có định nghĩa sau: ↦ D(2) (i) D(2) trọng số/trọng lượng cạnh/cung (ii) Cho đỉnh , E ∈ ? Đặt ℘ = {G|G đườ ' đ #ừ đế E} Giả sử tồn GL = {D(G): G ∈ ℘} Khi đó, GL gọi đường ngắn từ → E Với tốn tìm đường ngắn hai đỉnh, yêu cầu đồ thị đồ thị khơng có mạch âm (vì có mạch âm đường ngắn trọng số/trọng lượng số âm) Nhắc lại thuật toán Dijsktra: Dijkstra thuật tốn tìm đường ngắn từ đỉnh (0) đến đỉnh khác đồ thị với trọng số đỉnh dương, nghĩa là: D(.) ≥ 0, ∀ Thuật toán: Đặt: D(.), ế = ∈ S V G = OG P /ớ G = R ∞, ế = ∉ S 0, ế = Gọi W( ) độ dài đường ngắn từ đỉnh khác đến đỉnh , ∈ ? = {0,2, … , − 1}; lưu ý: tập đỉnh bắt đầu tính từ cho phù hợp với ngôn ngữ Python W ∗ ( ) giá trị tạm (tính) W( ) Thực hành Tốn rời rạc Trang Bộ môn Khoa học Dữ liệu Thuật toán thực bước sau: Bước 1: W ∗ (0) = 0; W ∗ ( ) = ∞, ∀ ≠ 0; S=? Tập [ tập đỉnh cần tính tốn Nếu đỉnh loại nơi đây, nghĩa độ dài đường từ đỉnh đến đỉnh xác định Bước 2: Chọn ∈ [ thỏa: W ∗ ( ) = W ∗ ( ) , ∈ [ Đặt, nghĩa cập nhật độ dài đường từ đỉnh đến đỉnh loại bỏ khỏi tập [: W( ) ← W ∗ ( ) [ ←[−{ } Nếu [ = ∅: dừng thuật toán Bước 3: Với ∈ { â !ậ } ∩ [, đặt a = W( ) + G Khi đó, đặt: W ∗ ( ) = {W ∗ ( ), a} Nếu W ∗ ( ) = a đánh dấu đỉnh (W ∗ ( ), ) Sau trở lại bước Ví dụ: Cho đồ thị sau: Đỉnh\Đỉnh 0 ∞ ∞ ∞ 4 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ 3 ∞ ∞ ∞ Thực bước thuật toán, ta sau: Bước 1: W ∗ (0) = 0; W ∗ ( ) = ∞, ∀ ≠ 0, [ = {0,1,2,3,4,5} W ∗( ) Độ dài 0 ∞ ∞ Bước 2: = 0; W ∗ (0) = 0; [ ← {0,1,2,3,4,5}\{0} = {1,2,3,4,5} Bước 3: ∈ { â !ậ 0} ∩ [ = {1,2} ∩ {1,2,3,4,5} = {1,2} Thực gán lại: Tương tự: W ∗ (1) ← min{W ∗ (1), W(0) + GLf } = min{∞, 7} = W ∗ (2) ← min{W ∗ (2), W(0) + GLh } = min{∞, 1} = Thực hành Toán rời rạc Trang Bộ môn Khoa học Dữ liệu W∗( ) Độ dài 0 ∞ (đỉ ℎi, độ 1à l) ∞ (i, m) ∞ ∞ Bước 2: = 2; W ∗ (2) = 1; [ ← {1,2,3,4,5}\{2} = {1,3,4,5} ∞ ∞ ∞ ∞ Bước 3: ∈ { â !ậ 2} ∩ [ = {1,4,5} ∩ {1,3,4,5} = {1,4,5} Thực gán lại: W ∗ (1) ← min{W ∗ (1), W(0) + Ghf } = min{7, + 4} = W ∗ (4) ← min{W ∗ (4), W(0) + Ghn } = min{∞, + 6} = W ∗( ) Độ dài W ∗ (5) ← min{W ∗ (5), W(0) + Ghp } = min{∞, + 2} = 0 … (0,7) (2,5) (0,1) (0,1) ∞ ∞ ∞ (2,7) ∞ (2,3) Sinh viên tự thực bước sau lặp lại đến thuật toán dừng: Bước 2:… Bước 3:… Bước 2:… Bước 3:… Thực hành Toán rời rạc Trang 10 ... Tạo lập đồ thị vô hướng với networkx BÀI TẬP CHƯƠNG Thực hành Tốn rời rạc Trang Bộ mơn Khoa học Dữ liệu CHƯƠNG 7: ĐỒ THỊ VÀ CÁC TÍNH CHẤT CỦA ĐỒ THỊ Mục tiêu: - Khái... Một số đặc trưng tính chất đồ thị 2.1 Các số tính chất đỉnh cạnh, loại đồ thị 2.2 Các thuộc tính đồ thị Sử dụng gói networkx để giải toán đồ thị 3.1...Bộ môn Khoa học Dữ liệu MỤC LỤC CHƯƠNG 7: ĐỒ THỊ VÀ CÁC TÍNH CHẤT CỦA ĐỒ THỊ 3 Biểu diễn đồ thị Python 1.1 Biểu diễn đồ thị ma trận kề 1.2 [Đọc thêm]

Ngày đăng: 27/08/2022, 13:13

Xem thêm:

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

TÀI LIỆU LIÊN QUAN

w