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

Bài giảng toán rời rạc chương 7 dr ngô hữu phúc

165 0 0

Đ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 165
Dung lượng 4,15 MB

Nội dung

CHƯƠNG ĐỒ THỊ VÀ CÂY Lecturer: PhD Ngo Huu Phuc Tel: 0438 326 077 Mob: 098 5696 580 Email: ngohuuphuc76@mta.edu.vn @Copyrights by Dr Ngo Huu Phuc, Le Quy Don Technical University TOÁN RỜI RẠC NỘI DUNG @Copyrights by Dr Ngo Huu Phuc, Le Quy Don Technical University 7.1 GIỚI THIỆU CHUNG Nội dung chương đề cập đến khái niệm đồ thị, phương pháp biểu diễn đồ thị máy tính số khái niệm liên quan  Các loại đồ thị vơ hướng, đồ thị có hướng, đa đồ thị…  Khái niệm bậc đỉnh, đường đi, chu trình tính liên thơng đồ thị  Biểu diễn đồ thị ma trận kề  Biểu diễn đồ thị danh sách kề  Biểu diễn đồ thị danh sách cạnh @Copyrights by Dr Ngo Huu Phuc, Le Quy Don Technical University 7.2 ĐỊNH NGHĨA VÀ KHÁI NIỆM (1/17) 7.2.1 Mở đầu (1/2)  Lý thuyết đồ thị đề xuất từ kỷ 18, báo Euler công bố năm 1736 liên quan đến lời giải toán tiếng cầu Konigsberg  Cho tới nay, mối quan tâm đến lý thuyết đồ thị không suy giảm  Lý do: phạm vi ứng dụng rộng rãi đồ thị nhiều lĩnh vực khác nhau, bao gồm:       Trong tin học, Hoá học, Vận trù học, Kỹ thuật điện, Ngôn ngữ Kinh tế… @Copyrights by Dr Ngo Huu Phuc, Le Quy Don Technical University 7.2 ĐỊNH NGHĨA VÀ KHÁI NIỆM (2/17) 7.2.1 Mở đầu (2/2) Vậy đồ thị gì? Có thể định nghĩa:  Đồ thị (Graph) cấu trúc liệu rời rạc bao gồm đỉnh cạnh nối cặp đỉnh Chúng ta phân biệt đồ thị thông qua kiểu số lượng cạnh nối cặp đỉnh đồ thị @Copyrights by Dr Ngo Huu Phuc, Le Quy Don Technical University 7.2 ĐỊNH NGHĨA VÀ KHÁI NIỆM (3/17)  Định nghĩa 7.2.1  Đồ thị vô hướng đồ thị G cặp có thứ tựG:=(V, E), đó:   V: tập đỉnh nút, E: tập cặp không thứ tự chứa đỉnh phân biệt, gọi cạnh Hai đỉnh thuộc cạnh gọi đỉnh đầu cuối cạnh Chú ý: - V (và E) thường tập hữu hạn - Phần lớn kết nghiên cứu biết không (hoặc khác) áp dụng cho đồ thị vô hạn (infinite graph) nhiều luận khơng dùng trường hợp vô hạn @Copyrights by Dr Ngo Huu Phuc, Le Quy Don Technical University Một đồ thị vô hướng với đỉnh (nút) cạnh 7.2 ĐỊNH NGHĨA VÀ KHÁI NIỆM (4/17)  Định nghĩa 7.2.2  Đồ thị có hướng G cặp có thứ tự G:=(V, A),   V: tập đỉnh nút, A: tập cặp có thứ tự chứa đỉnh, gọi cạnh có hướng cung Một cạnh e = (x, y) coi có hướng từ x tới y; x gọi điểm đầu/gốc y gọi điểm cuối/ngọn cạnh Một đồ thị có hướng với đỉnh (nút) cung @Copyrights by Dr Ngo Huu Phuc, Le Quy Don Technical University 7.2 ĐỊNH NGHĨA VÀ KHÁI NIỆM (5/17)  Định nghĩa 7.2.3:  Đơn đồ thị vô hướng G =(V,E) đồ thị vô hướng mà hai đỉnh có tối đa cạnh Ví dụ đơn đồ thị vơ hướng - Mạng máy tính đơn kênh thoại @Copyrights by Dr Ngo Huu Phuc, Le Quy Don Technical University 7.2 ĐỊNH NGHĨA VÀ KHÁI NIỆM (6/17)  Định nghĩa 7.2.4:  Đa đồ thị vô hướng G=(V,E) đồ thị vô hướng mà hai đỉnh có nhiều cạnh Ví dụ đa đồ thị vơ hướng - Mạng máy tính đa kênh thoại @Copyrights by Dr Ngo Huu Phuc, Le Quy Don Technical University 7.2 ĐỊNH NGHĨA VÀ KHÁI NIỆM (7/17)  Định nghĩa 7.2.5:  Giả đồ thị vô hướng G=(V, E) đồ thị vơ hướng mà cạnh cặp khơng có thứ tự gồm hai phần tử (hai phần tử không thiết phải khác nhau) V  Cạnh e gọi khuyên có dạng e =(u, u), u đỉnh thuộc V Ví dụ giả đồ thị vơ hướng - Mạng máy tính đa kênh thoại có khuyên @Copyrights by Dr Ngo Huu Phuc, Le Quy Don Technical University 10 7.8 CÂY VÀ ỨNG DỤNG (29/43) 7.8.5 Cây khung nhỏ (1/15)  Bài tốn tìm khung nhỏ tốn tối ưu đồ thị có ứng dụng nhiều lĩnh vực khác thực tế  Phát biểu toán:  Cho G= đồ thị vô hướng liên thông với tập đỉnh V = {1, 2, , n } tập cạnh E gồm m cạnh  Mỗi cạnh e đồ thị gán với số không âm c(e) gọi trọng số  Giả sử H= khung đồ thị G  Gọi độ dài c(H) khung H tổng độ dài cạnh: ∈  Bài toán đặt ra: số khung đồ thị tìm khung có độ dài nhỏ đồ thị @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 151 7.8 CÂY VÀ ỨNG DỤNG (30/43) 7.8.5 Cây khung nhỏ (2/15) Ví dụ số tốn liên quan: Bài tốn nối mạng máy tính Một mạng máy tính gồm n máy tính đánh số từ 1, 2, , n Biết chi phí nối máy i với máy j c[i, j], i, j = 1, 2, , n Hãy tìm cách nối mạng cho chi phí nhỏ Bài tốn xây dựng hệ thống cable Giả sử ta 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ỏ @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 152 7.8 CÂY VÀ ỨNG DỤNG (31/43) 7.8.5 Cây khung nhỏ (3/15)  Để giải toán khung nhỏ nhất, liệt kê tồn khung chọn số nhỏ Phương án thực không khả thi số khung đồ thị lớn cỡ nn-2  Để tìm khung nhỏ nhất, thực theo bước sau:  Bước 1: Thiết lập tập cạnh khung ∅ Chọn cạnh e = (i, j) có độ dài nhỏ bổ sung vào T  Bước 2: Trong số cạnh thuộc E \ T, tìm cạnh e = (i1, j1) có độ dài nhỏ cho bổ sung cạnh vào T khơng tạo nên chu trình Để thực điều này, phải chọn cạnh có độ dài nhỏ cho i1∈ T j1∉ T, j1∈ T i1∉ T  Bước 3: Kiểm tra xem T đủ n-1 cạnh hay chưa? Nếu T đủ n-1 cạnh khung nhỏ cần tìm Nếu T chưa đủ n-1 cạnh thực lại bước @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 153 7.8 CÂY VÀ ỨNG DỤNG (32/43) 7.8.5 Cây khung nhỏ (4/15)   Để thực việc tìm khung nhỏ nhất, thường sử dụng:  Thuật toán KRUSKAL  Thuật toán PRIM Trong phần này, nghiên cứu phương pháp @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 154 7.8 CÂY VÀ ỨNG DỤNG (33/43) 7.8.5 Cây khung nhỏ (5/15) 7.8.5.1 Thuật toán KRUSKAL (1/6)  Thuật toán xây dựng tập cạnh T khung nhỏ H= theo bước sau: a Sắp xếp cạnh đồ thị G theo thứ tự tăng dần trọng số cạnh; b Xuất phát từ tập cạnh T = ∅, bước, ta duyệt danh sách cạnh xếp, từ cạnh có trọng số nhỏ đến cạnh có trọng số lớn để tìm cạnh mà bổ sung vào T khơng tạo thành chu trình tập cạnh bổ sung vào T trước đó; c Thuật tốn kết thúc ta thu tập T gồm n-1 cạnh @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 155 7.8 CÂY VÀ ỨNG DỤNG (34/43) 7.8.5 Cây khung nhỏ (6/15) 7.8.5.1 Thuật toán KRUSKAL (2/6) Giả mã thuật toán Kruskal void Kruskal(void){ T = ∅; while ( |T| < (n-1) && ( E ≠ ∅ ) ){ Chọn cạnh e ∈ E cạnh có độ dài nhỏ nhất; E = E \ {e}; if (T ∪ {e}: không tạo nên chu trình ) T = T ∪ {e}; } if ( |T| < n-1) Đồ thị không liên thông; } @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 156 7.8 CÂY VÀ ỨNG DỤNG (35/43) 7.8.5 Cây khung nhỏ (7/15) 7.8.5.1 Thuật toán KRUSKAL (3/6) Ví dụ thuật tốn Kruskal Cho đồ thị hình vẽ bên, tìm khung nhỏ theo Kruskal 5 @copyright by PhD Ngo Huu Phuc, Le Quy Don Technical University 157 7.8 CÂY VÀ ỨNG DỤNG (36/43) 7.8.5 Cây khung nhỏ (8/15) 7.8.5.1 Thuật toán KRUSKAL (4/6) Chương trình minh họa thuật tốn Kruskal #include "conio.h" #include "io.h" #include "iostream" using namespace std; #define MAX 50 #define TRUE #define FALSE int n, m, minl, connect; int dau[500],cuoi[500], w[500]; int daut[50], cuoit[50], father[50]; void Init(void){ int i; FILE *fp; fp=fopen("dothi.in","r"); fscanf(fp, "%d%d", &n,&m); cout

Ngày đăng: 21/07/2023, 16:54