Toán rời rạc 2 - PTITVL cayha tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn về tất cả các lĩnh vự...
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG BÀI GIẢNG MƠN TỐN RỜI RẠC Giảng viên: TH.S Phan ThỊ Hà Điện thoại/E-mail: hathiphan@yahoo.com Bộ môn: Công nghệ phần mềm Học kỳ/Năm biên soạn:I/2009-2010 BÀI GIẢNG MƠN TỐN RỜI RẠC CHƯƠNG 6.CÂY VÀ CÂY KHUNG CỦA ĐỒ THỊ Mở đầu Các ứng dụng Các phương pháp duyệt Cây khung đồ thị Cây khung nhỏ www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MÔN TOÁN RỜI RẠC MỞ ĐẦU Định nghĩa Cây đồ thị vô hướng, liên thông khơng có chu trình đơn Vì khơng thể có chu trình đơn, nên khơng thể có cạnh bội khuyên Vậy đồ thị đơn Định nghĩa Một đồ thị khơng có chu trình đơn khơng liên thơng gọi rừng www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC MỞ ĐẦU Cây thường định nghĩa đồ thị vơ hướng, cặp đỉnh ln tồn đường đơn Định lý sau cho thấy đồ thị vô hướng tính liên thơng khơng có chu trình đơn tương đương với tính tồn đường đơn cặp đỉnh www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MÔN TOÁN RỜI RẠC MỞ ĐẦU Định lý Một đồ thị vô hướng cặp đỉnh ln tồn đường đơn Định nghĩa Cây có gốc gọi m-phân tất đỉnh khơng có m Cây gọi mphân (strict) đỉnh có m Cây m-phân với m = gọi nhị phân Cây có gốc (hay có thứ tự) có gốc đỉnh xếp theo thứ tự định Cây có gốc vẽ cho đỉnh thứ tự từ trái qua phải Trong nhị phân có thứ tự, đỉnh có hai con, thứ gọi bên trái thứ hai bên phải Cây có gốc bên trái đỉnh gọi bên trái, tương tự ta có định nghĩa bên phải www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MÔN TỐN RỜI RẠC MỞ ĐẦU Những tính chất Định lý Cây với n đỉnh có n-1 cạnh Định lý Cây m-phân với i đỉnh có tất n = m*i + đỉnh Định lý Cây m-phân với a) Nếu có n đỉnh số đỉnh i = (n-1)/m số l = ((m-1)n+1 )/m b) Nếu có i đỉnh số đỉnh n = m.i + số l=(m-1)i+1 c) Nếu có l số đỉnh : www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC MỞ ĐẦU Định nghĩa Mức đỉnh v có gốc độ dài đường từ gốc tới Mức gốc định nghĩa không Độ cao mức cao tất đỉnh Nói cách khác độ cao có gốc chiều dài đường dài từ gốc tới đỉnh Cây m-phân có gốc độ cao h gọi cân đối tất mức h h-1 www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC Cây AVL nhị phân cho đỉnh chiều cao trái phải khác không Vậy AVL trường hợp đặc biệt nhị phân cân đối: AVL nhị phân cân đối, ngược lại nói chung khơng Cây m-phân hồn tồn(complete) mphân mức www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC MỞ ĐẦU Định lý Có nhiều mh mphân, độ cao h Hệ Nếu m-phân có chiều cao h có l lá, h≥ ⎡logml⎤ Nếu m-phân cân đối, h = ⎡logm l⎤ (Nhớ lại ⎡x⎤ số nguyên nhỏ không bé x) www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MÔN TOÁN RỜI RẠC CÁC ỨNG DỤNG CỦA CÂY Chúng ta nghiên cứu ba tốn mơ hình Các phần tử danh sách lưu trữ để dễ dàng định vị chúng? Hãy xác định dãy định để tìm đối tượng có tính chất tập hợp đối tượng thuộc loại Cần phải mã hóa tập chữ dãy nhị phân để có hiệu nhất? www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MÔN 11.3 THUẬT TỐN TÌM CÂY TRÙM TỐN RỜIBAO RẠC (tiếp) Thuật toán BEGIN for u ∈ V Duyet [u] := false ; T := ∅ ; Q := ∅ ; pus_queue z into Q ; { z đỉnh tuỳ ý đồ thị gốc } 10 11 12 13 14 15 www.ptit.edu.vn Duyet [z] := true ; while Q ≠ ∅ begin pop_qưeue v from Q ; for u ∈ DK[v] if ! Duyet [u] then begin in-queue u into Q ; Duyet [u] := true ; T := T ∪ {(v, u)} end end END GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MƠN: CƠNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC 11.3.THUẬT TỐN TÌM CÂY BAO TRÙM (tiếp) www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC THUẬT TỐN TÌM CÂY BAO TRÙM (tiếp) Độ phức tạp thuật tốn: O(m+n) Ví dụ: Áp dụng thuật tốn cho đồ thị (nét mảnh) ta nhận bao trùm (nét đậm) sau: Hình 11.6 Cây bao trùm đồ thị tìm theo phương pháp duyệt theo chiều rộng www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN CÂY BAO TRÙM NHỎ NHẤT TỐN RỜI RẠC KN bao trùm Thuật tốn tìm bao trùm nhỏ www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MÔN TOÁN RỜI RẠC CÂY BAO TRÙM NHỎ NHẤT Bài tốn: Cho đồ thị vơ hướng G liên thơng với tập cạnh E hàm trọng số c : E → N Tìm bao trùm T G cho tổng trọng số cạnh T đạt giá trị nhỏ Một số thuật toán tìm bao trùm nhỏ nhất: - Thuật tốn Kruskal - Thuật toán Prim www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MƠN: CƠNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC THUẬT TỐN KRUSKAL Thuật tốn: Chọn cạnh có trọng số bé nhất, ký hiệu e1 đặt W := {e1} Giả sử chọn W = {e1, e2, , ei} Chọn ei+1 cạnh có trọng số bé số cạnh lại E \ W cho {e1, e2, , ei, ei+1} khơng chứa chu trình Bổ sung: W := W ∪ {ei+1} Lặp lại bước – chừng www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC THUẬT TOÁN KRUSKAL (tiếp) Định lý 11.4 : Tập cạnh W tìm theo thuật tốn Kruskal tạo nên bao trùm nhỏ đồ thị G Thuật toán Kruskal chi tiết procedure Kruskal ; begin W := ∅ ; Z := E ; www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC THUẬT TỐN KRUSKAL (tiếp) Thuật tốn Kruskal chi tiết procedure Kruskal ; begin W := ∅ ; Z := E ; while (|W| < n -1) and (Z ≠ ∅) begin chọn cạnh e có trọng số bé Z ; Z := Z \ {e} ; if W ∪ {e} khơng chứa chu trình then W := W ∪ {e} end ; 10 if |W| < n -1 then writeln(″Đồ thị không liên thông″) 11 end ; www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC VÍ DỤ Đồ thị có trọng số bao trùm nhỏ nhất: 1 1 6 2 Hình 11.10 Đồ thị trọng số bao trùm nhỏ www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC THUẬT TỐN PRIM Thuật tốn Prim Prim cải tiến thuật tốn Kruskal sau: vòng lặp ta chọn cạnh có trọng số bé số cạnh kề với cạnh chọn mà không tạo nên chu trình www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MƠN: CƠNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC THUẬT TỐN PRIM (tiếp) Thuật tốn Prim gọi phương pháp lân cận gần nhất: đỉnh a đồ thị G ta nối với đỉnh “gần” nhất, chẳng hạn b Nghĩa là, cạnh (a, b) chọn có trọng số bé Tiếp theo, số cạnh kề với đỉnh a đỉnh b ta chọn cạnh có trọng số bé mà khơng tạo nên chu trình với cạnh (a, b) Cạnh dẫn đến đỉnh thứ ba c Tiếp tục trình nhận gồm n đỉnh n-1 cạnh Đó bao trùm nhỏ www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC THUẬT TỐN PRIM (tiếp) procedure Prim ; begin W := {cạnh có trọng số bé }; for i := to n - begin e := cạnh có trọng số bé kề với cạnh W ghép vào W khơng tạo nên chu trình ; W := W ∪ {e} end end ; www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC CÂY BAO TRÙM NHỎ NHẤT (tiếp) Định lý 11.5 Trong đồ thị vô hướng có trọng số đơi khác nhau, bao trùm nhỏ tồn Chứng minh: Vì vòng lặp có cạnh chọn www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC CÂY BAO TRÙM LỚN NHẤT Trong thuật toán Kruskal Prim ta không ràng buộc dấu trọng số, nên áp dụng cho đồ thị vơ hướng với trọng số cạnh có dấu tuỳ ý www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MƠN: CƠNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC CÂY BAO TRÙM LỚN NHẤT (tiếp) Để tìm bao trùm lớn ta có hai cách: Đổi thành dấu - cho trọng số cạnh áp dụng hai thuật toán trình bày để tìm bao trùm nhỏ Sau đổi dấu + trở lại, ta bao trùm lớn Sửa đổi thuật tốn: bước “chọn cạnh có trọng số bé “ thay “chọn cạnh có trọng số lớn “ bước khác giữ nguyên Khi thuật toán kết thúc, ta nhận bao trùm lớn www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM ... MƠN TỐN RỜI RẠC MỞ ĐẦU Những tính chất Định lý Cây với n đỉnh có n-1 cạnh Định lý Cây m-phân với i đỉnh có tất n = m*i + đỉnh Định lý Cây m-phân với a) Nếu có n đỉnh số đỉnh i = (n-1)/m... MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC 1 www.ptit.edu.vn 2 4 GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC PHƯƠNG PHÁP DUYỆT CÂY Hệ địa thông dụng... = ((m-1)n+1 )/m b) Nếu có i đỉnh số đỉnh n = m.i + số l=(m-1)i+1 c) Nếu có l số đỉnh : www.ptit.edu.vn GIẢNG VIÊN: TH.S.PHAN THỊ HÀ BỘ MÔN: CÔNG NGHỆ PHẦN MỀM BÀI GIẢNG MƠN TỐN RỜI RẠC MỞ