Bài giảng Phân tích thiết kế giải thuật - Chương 7: Các cấu trúc dữ liệu cho các tập rời nhau
lượt xem 2
download
Bài giảng Chương 7: Các cấu trúc dữ liệu cho các tập rời nhau trình bày nội dung chính về các thao tác lên cấu trúc dữ liệu các tập rời nhau, ứng dụng của các tập rời nhau, biểu diễn các tập rời nhau dùng danh sách liên kết. Mời các bạn tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Phân tích thiết kế giải thuật - Chương 7: Các cấu trúc dữ liệu cho các tập rời nhau
- Các Cấu Trúc Dữ Liệu cho các Tập Rời Nhau 27.10.2004 1
- Các thao tác lên cấu trúc dữ liệu các tập rời nhau ª Cấu trúc dữ liệu các tập rời nhau được định nghĩa bởi – Một tập S của các tập động rời nhau, S = {S1 , S2 ,..., Sk} ° Mỗi tập Si được tượng trưng bởi một phần tử đại diện là một phần tử nào đó của nó. – Các thao tác ° MAKESET(x): tạo một tập mới chỉ gồm x. Vì các tập là rời nhau nên x không được đang nằm trong một tập khác. ° UNION(x, y): tạo tập hội của các tập động S và S lần lượt x y chứa x và y, với điều kiện là Sx và Sy là rời nhau. ° FINDSET(x): trả về một con trỏ chỉ đến phần tử đại diện của tập chứa x. ª Để cho gọn, sẽ dùng “các tập rời nhau” để gọi “cấu trúc dữ liệu các tập rời nhau”. 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 2 cho các tập rời nhau
- Các thao tác lên các tập rời nhau (tiếp) ª Phân tích thời gian chạy của các thao tác sẽ dựa trên hai tham số sau – n, số các thao tác MAKESET – m, số tổng cộng các thao tác MAKESET, UNION, và FINDSET. ª Nhận xét: – Sau n 1 lần gọi UNION lên các tập rời nhau thì còn lại đúng một tập. – m n. 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 3 cho các tập rời nhau
- Một ứng dụng của các tập rời nhau ª Xác định các thành phần liên thông của một đồ thị vô hướng – Thủ tục CONNECTEDCOMPONENTS xác định các thành phần liên thông của một đồ thị vô hướng. V[G] là tập các đỉnh của đồ thị G, E[G] là tập các cạnh của G. CONNECTEDCOMPONENTS(G) 1 for mỗi đỉnh v V[G] 2 do MAKESET(v) 3 for mỗi cạnh (u, v) E[G] 4 do if FINDSET(u) FINDSET(v) 5 then UNION(u, v) 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 4 cho các tập rời nhau
- Một ứng dụng của các tập rời nhau (tiếp) – Thủ tục SAMECOMPONENT xác định hai đỉnh có cùng một thành phần liên thông hay không. SAMECOMPONENT(u, v) 1 if FINDSET(u) = FINDSET(v) 2 then return TRUE 3 else return FALSE 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 5 cho các tập rời nhau
- Thao tác lên các tập rời nhau ª Ví dụ: một đồ thị với 4 thành phần liên thông 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 6 cho các tập rời nhau
- Biểu diễn các tập rời nhau dùng danh sách liên kết ª Biểu diễn các tập rời nhau dùng danh sách liên kết (linkedlist representation of disjoint sets): – Biểu diễn mổi tập bằng một danh sách liên kết. Trong mỗi danh sách liên kết ° Đối tượng đứng đầu được dùng làm phần tử đại diện của tập. ° Mổi đối tượng trong danh sách liên kết chứa – phần tử của tập – con trỏ chỉ đến đối tượng chứa phần tử kế tiếp – con trỏ chỉ đến phần tử đại diện của tập. ° Con trỏ head chỉ đến đại diện của tập. Con trỏ tail chỉ đến phần tử cuối trong danh sách. 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 7 cho các tập rời nhau
- Biểu diễn tập bằng danh sách liên kết ª Ví dụ head tail head tail 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 8 cho các tập rời nhau
- Biểu diễn tập bằng danh sách liên kết (tiếp) ª Hiện thực các thao tác – Hiện thực MAKESET(x): tạo một danh sách liên kết chỉ gồm đối tượng x. – Hiện thực FINDSET(x): trả về con trỏ đến đại diện của tập chứa x. – Hiện thực UNION(x, y): ° gắn danh sách của x vào đuôi của danh sách của y ° cập nhật các con trỏ của các đối tượng trong danh sách cũ của x để chúng chỉ đến đại diện của tập, tức là đầu của danh sách cũ của y. 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 9 cho các tập rời nhau
- Biểu diễn tập bằng danh sách liên kết (tiếp) ª Ví dụ 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 10 cho các tập rời nhau
- Thao tác UNION không dùng heuristic ª Ví dụ một chuỗi gồm 2n 1 thao tác lên n đối tượng mà cần (n2) thời gian. Thao tác Số các đối tượng được cập nhật MAKESET(x1 ) 1 MAKESET(x2 ) 1 . . n . MAKESET(xn ) 1 UNION(x1 , x2 ) 1 UNION(x2 , x3 ) 2 UNION(x3 , x4 ) 3 . (n2) . . UNION(xn 1 , xn ) n 1 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 11 cho các tập rời nhau
- Heuristic để tăng tốc của UNION ª Nhận xét: Khi hợp hai danh sách trong UNION, mọi con trỏ (chỉ đến đại diện mới) của các phần tử trong danh sách được gắn vào đuôi của danh sách kia phải được cập nhật. Giả sử mỗi danh sách có chứa thêm chiều dài của nó. ª Heuristic hợp theo trọng số (weightedunion heuristic): khi hợp hai danh sách – gắn danh sách ngắn hơn vào đuôi của danh sách dài hơn (nếu các danh sách dài như nhau thì có thể gắn tùy ý). 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 12 cho các tập rời nhau
- Heuristic hợp theo trọng số ª Ví dụ chiều dài = 4 chiều dài = 3 c h e b f g d 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 13 cho các tập rời nhau
- Biểu diễn tập bằng danh sách liên kết: thời gian chạy ª Định lý (Theorem 22.1) Bằng cách dùng biểu diễn danh sách liên kết cho các tập rời nhau và heuristic hợp theo trọng số (weightedunion heuristic), m ột dãy gồm có m thao tác MAKESET, UNION, và FINDSET, trong đó có n thao tác là MAKESET, tốn O(m n lg n) thời gian. Chứng minh – Mỗi MAKESET chạy trong thời gian O(1) – Mỗi FINDSET chạy trong thời gian O(1) – Xác định thời gian chạy của các thao tác UNION: ° Thời gian chạy của các thao tác UNION là thời gian tổng cộng lấy trên mọi phần tử của mọi lần cập nhật con trỏ chỉ đến phần tử đại diện của tập chứa phần tử đó. 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 14 cho các tập rời nhau
- Biểu diễn tập bằng danh sách liên kết: thời gian chạy Chứng minh (tiếp theo) ° Xét đối tượng x bất kỳ trong một tập bất kỳ của các tập rời nhau. Mỗi lần con trỏ chỉ đến phần tử đại diện của tập chứa x được cập nhật, thì x phải đã nằm trong tập nhỏ hơn – Lần 1 cập nhật con trỏ của x: tập kết quả phải có ít nhất 2 phần tử – Lần 2 cập nhật con trỏ của x: tập kết quả phải có ít nhất 4 phần tử – … – Lần k cập nhật con trỏ của x: tập kết quả phải có ít nhất 2k phần tử. Vì tập có nhiều lắm là n phần tử nên 2k n. Vậy số lần cập nhật con trỏ của x nhiều lắm là k lg n. ° Vì x là phần tử bất kỳ nên thời gian tổng cộng để cập nhật các con trỏ của mọi phần tử là O(n lg n). – Thời gian chạy tổng cộng của dãy m thao tác là: O(m) + O(n lg n) = O(m + n lg n) . Chương 7: C¸ác c 27.10.2004 ấu trúc dữ liệu cho các tập rời nhau 15
- Biểu diễn các tập rời nhau bằng rừng ª Biểu diễn các tập rời nhau bằng rừng (disjointset forest) – Biểu diễn mỗi tập bằng một cây có gốc: ° Mỗi nút của cây chứa một phần tử của tập ngoài ra ° Mỗi nút chứa một con trỏ chỉ đến cha của nó ° Gốc của mỗi cây chứa đại diện của tập và là cha của chính nó. 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 16 cho các tập rời nhau
- Biểu diễn các tập rời nhau bằng rừng (tiếp) ª Ví dụ – Hai cây sau biểu diễn các tập {b, c, e, h} và {d, f, g}. – c và f lần lượt là phần tử đại diện của các tập {b, c, e, h} và {d, f, g}. 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 17 cho các tập rời nhau
- Biểu diễn các tập rời nhau bằng rừng: các thao tác ª Các thao tác lên các tập rời nhau khi biểu diễn bằng rừng – Hiện thực MAKESET: tạo một cây chỉ có một nút. – Hiện thực FINDSET bằng cách đuổi theo các con trỏ chỉ đến nút cha cho đến khi tìm được nút gốc của cây. ° Các nút được ghé qua khi gọi FINDSET tạo thành đường dẩn (find path). – Hiện thực UNION: làm cho con trỏ của gốc cây này chỉ đến gốc của cây kia. 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 18 cho các tập rời nhau
- Biểu diễn các tập rời nhau bằng rừng ª Ví dụ – Hình (b) là kết quả của UNION(e, g). UNION 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 19 cho các tập rời nhau
- Biểu diễn tập bằng cây ª Dùng hai heuristics để giảm thời gian chạy của các dãy các thao tác lên các tập rời nhau khi hiện thực bằng rừng: – Heuristic hợp theo thứ hạng (union by rank) khi thực thi UNION: ° duy trì cho mỗi nút một rank. Rank là cận trên cho độ cao (*) của nút. Mọi nút được khởi tạo với rank = 0. ° khi hợp theo thứ hạng hai cây, nút gốc có rank nhỏ hơn được làm thành con của nút có rank lớn hơn. – Heuristic nén đường dẩn (path compression). (*) Độ cao của một nút trong một cây là số các cạnh nằm trên đường đi đơn dài nhất từ nút đến một nút lá. 27.10.2004 Chương 7: C¸ác cấu trúc dữ liệu 20 cho các tập rời nhau
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Phân tích thiết kế hệ thống mạng - ThS. Lê Xuân Thành
52 p | 722 | 95
-
Bài giảng Phân tích thiết kế hệ thống: Bài giảng 5 - TS. Đào Nam Anh
87 p | 192 | 31
-
Bài giảng Phân tích thiết kế thuật toán: Chương 3 - Nguyễn Văn Linh
87 p | 189 | 22
-
Bài giảng Phân tích thiết kế thuật toán: Chương 1 - Nguyễn Văn Linh
56 p | 229 | 22
-
Bài giảng Phân tích thiết kế hệ thống: Bài giảng 3 - TS. Đào Nam Anh
60 p | 129 | 21
-
Bài giảng Phân tích thiết kế hệ thống: Bài giảng 6 - TS. Đào Nam Anh
22 p | 128 | 16
-
Bài giảng Phân tích thiết kế hệ thống: Bài giảng 2 - TS. Đào Nam Anh
28 p | 136 | 15
-
Bài giảng Phân tích thiết kế hệ thống: Bài giảng 4 - TS. Đào Nam Anh
12 p | 155 | 15
-
Bài giảng Phân tích thiết kế hệ thống: Bài giảng 7 - TS. Đào Nam Anh
39 p | 111 | 13
-
Bài giảng Phân tích thiết kế giải thuật: Chương 2 - Trịnh Huy Hoàng
98 p | 114 | 11
-
Bài giảng Phân tích thiết kế giải thuật: Chương 1 - Trịnh Huy Hoàng
72 p | 117 | 8
-
Bài giảng Phân tích thiết kế hướng đối tượng: Chương 5 - Lê Thị Minh Nguyện
11 p | 99 | 8
-
Bài giảng Phân tích thiết kế giải thuật: Chương 4 - Trịnh Huy Hoàng
90 p | 106 | 7
-
Bài giảng Phân tích thiết kế hệ thống thông tin: Bài 11 - TS. Trần Mạnh Tuấn
29 p | 51 | 7
-
Bài giảng Phân tích thiết kế hệ thống thông tin: Bài 9 - TS. Trần Mạnh Tuấn
46 p | 59 | 6
-
Bài giảng Phân tích thiết kế đảm bảo chất lượng phần mềm: Phần 1
115 p | 33 | 6
-
Bài giảng Phân tích thiết kế hướng đối tượng: Chương 4 - Lê Thị Minh Nguyện
14 p | 80 | 5
-
Bài giảng Phân tích thiết kế và giải thuật - Chương 2: Kỹ thuật thiết kế giải thuật
80 p | 46 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn