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

Các cấu trúc dữ liệu cho các tập rời nhau (GIẢI THUẬT SLIDE) (chữ biến dạng do slide dùng font VNI times, tải về xem bình thường)

26 27 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 26
Dung lượng 556 KB

Nội dung

Các Cấu Trúc Dữ Liệu cho Tập Rời Nhau Các thao tác lên cấu trúc liệu tập rời ª Cấu trúc liệu tập rời định nghóa – Một tập S tập động rời nhau, S = {S1 , S2 , , S k} Mỗi tập Si tượng trưng phần tử đại diện phần tử – Các thao tác ° MAKE-SET(x): tạo tập gồm x Vì tập rời nên x không nằm tập khác ° UNION(x, y): tạo tập hội tập động Sx Sy chứa x y, với điều kiện Sx Sy rời ° FIND-SET(x): trả trỏ đến phần tử đại diện tập chứa x Để cho gọn, dùng “các tập rời nhau” để gọi “cấu trúc liệu tập rời nhau” ° ª Các thao tác lên tập rời (tiếp) ª ª Phân tích thời gian chạy thao tác dựa hai tham số sau – n, số thao tác MAKE-SET – m, số tổng cộng thao tác MAKE-SET, UNION, FIND-SET Nhận xét: – Sau n  lần gọi UNION lên tập rời lại tập – m  n Một ứng dụng tập rời ª Xác định thành phần liên thông đồ thị vô hướng – Thủ tục CONNECTED-COMPONENTS xác định thành phần liên thông đồ thị vô hướng V[G] tập đỉnh đồ thị G, E[G] tập cạnh G CONNECTED -COMPONENTS(G) for đỉnh v  V[G] MAKE-SET(v) for cạnh (u, v)  E[G] if FIND-SET(u)  FIND-SET(v) then UNION(u, v) Moät ứng dụng tập rời (tiếp) – Thủ tục SAME-COMPONENT xác định hai đỉnh có thành phần liên thông hay không SAME-COMPONENT(u, v) if FIND-SET(u) = FIND-SET(v) then return TRUE else return FALSE Thao tác lên tập rời ª Ví dụ: đồ thị với thành phần liên thông Biểu diễn tập rời dùng danh sách liên kết ª Biểu diễn tập rời dùng danh sách liên kết (linked-list representation of disjoint sets): – Biểu diễn mổi tập danh sách liên kết Trong danh sách liên kết ° Đối tượng đứng đầu dùng làm phần tử đại diện tập ° Mổi đối tượng danh sách liên kết chứa – phần tử tập – trỏ đến đối tượng chứa phần tử – trỏ đến phần tử đại diện tập ° Con trỏ head đến đại diện tập Con trỏ tail đến phần tử cuối danh sách Biểu diễn tập danh sách liên kết ª Ví dụ head tail head tail Biểu diễn tập danh sách liên kết (tiếp) ª Hiện thực thao tác – Hiện thực MAKE-SET(x): tạo danh sách liên kết gồm đối tượng x – Hiện thực FIND-SET(x): trả trỏ đến đại diện tập chứa x – Hiện thực UNION(x, y): ° gắn danh sách x vào đuôi danh sách y ° cập nhật trỏ đối tượng danh sách cũ x để chúng đến đại diện tập, tức đầu danh sách cũ y Biểu diễn tập danh sách liên kết (tiếp) ª Ví dụ 10 Heuristic để tăng tốc UNION ª ª Nhận xét: Khi hợp hai danh sách UNION, trỏ (chỉ đến đại diện mới) phần tử danh sách gắn vào đuôi danh sách phải cập nhật Giả sử danh sách có chứa thêm chiều dài Heuristic hợp theo trọng số (weighted-union heuristic): hợp hai danh sách – gắn danh sách ngắn vào đuôi danh sách dài (nếu danh sách dài gắn tùy ý) 12 Heuristic hợp theo trọng số ª Ví dụ chiều dài = chiều dài = c h e b f g d 13 Biểu diễn tập 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 tập rời heuristic hợp theo trọng số (weighted-union heuristic), dãy gồm có m thao tác MAKE-SET, UNION, FIND-SET, có n thao tác MAKE-SET, tốn O(m  n lg n) thời gian Chứng minh – Mỗi MAKE-SET chạy thời gian O(1) – Mỗi FIND-SET chạy thời gian O(1) – Xác định thời gian chạy thao tác UNION: ° Thời gian chạy thao tác U NION thời gian tổng cộng lấy phần tử lần cập nhật trỏ đến phần tử đại diện tập chứa phần tử 14 Biểu diễn tập danh sách liên kết: thời gian chạy Chứng minh (tiếp theo) ° Xét đối tượng x tập tập rời Mỗi lần trỏ đến phần tử đại diện tập chứa x cập nhật, x phải nằm tập nhỏ   – Lần cập nhật trỏ x: tập kết phải có phần tử – Lần cập nhật trỏ x: tập kết phải có phần tử – … – Lần k cập nhật trỏ x: tập kết phải có 2k phần tử Vì tập có nhiều n phần tử nên 2k  n Vậy số lần cập nhật trỏ x nhiều k  lg n ° Vì x phần tử nên thời gian tổng cộng để cập nhật trỏ phần tử O(n lg n) – Thời gian chạy tổng cộng dãy m thao tác là: O(m) + O(n lg n) = O(m + n lg n) 15 Bieåu diễn tập rời rừng ª Biểu diễn tập rời rừng (disjointset forest) – Biểu diễn tập có gốc: ° Mỗi nút chứa phần tử tập ° Mỗi nút chứa trỏ đến cha ° Gốc chứa đại diện tập cha 16 Biểu diễn tập rời rừng (tiếp) ª Ví dụ – Hai sau biểu diễn tập {b, c, e, h} vaø {d, f, g} – c f phần tử đại diện tập {b, c, e, h} {d, f, g} 17 Biểu diễn tập rời rừng: thao tác ª Các thao tác lên tập rời biểu diễn rừng – Hiện thực MAKE-SET: tạo có nút – Hiện thực FIND-SET cách đuổi theo trỏ đến nút cha tìm nút gốc ° Các nút ghé qua gọi F IND-SET tạo thành đường dẩn (find path) – Hiện thực UNION: làm cho trỏ gốc đến gốc 18 Biểu diễn tập rời rừng ª Ví dụ – Hình (b) kết UNION(e, g) UNION 19 Biểu diễn tập ª Dùng hai heuristics để giảm thời gian chạy dãy thao tác lên tập rời thực rừng: – Heuristic hợp theo thứ hạng (union by rank) thực thi UNION: ° trì cho nút rank Rank cận cho độ cao (*) nút Mọi nút khởi tạo với rank = ° hợp theo thứ hạng hai cây, nút gốc có rank nhỏ làm thành nút có rank lớn – Heuristic nén đường dẩn (path compression) (*) Độ cao nút số cạnh nằm đường đơn dài từ nút đến nút 20 Heuristic hợp theo thứ hạng ª Ví dụ: (số bên cạnh đối tượng rank nó.) b b a UNION c a c e d c d UNION c e f f 21 Heuristic nén đường dẫn – Heuristic nén đường dẩn (path compression) Chạy qua hai giai đoạn thực thi FIND-SET: ° giai đoạn chạy lên để tìm gốc cây, ° giai đoạn chạy xuống để cập nhật nút đường dẩn để chúng trực tiếp đến gốc 22 Heuristic nén đường dẩn (tiếp) ª Minh họa heuristic nén đường dẫn thao tác FINDSET – Các hình tam giác tượng trưng có gốc nút hình (a) Mỗi nút có trỏ đến nút cha – Hình (b): sau thực thi FIND-SET(a) 23 Các heuristic hợp theo thứ hạng nén đường dẩn ª Các thủ tục thực heuristics hợp theo thứ hạng nén đường dẫn: MAKE-SET, UNION, FINDSET – Cha nút x p[x] MAKE-SET(x) p[x]  x rank[x]  UNION(x, y) LINK(FIND-SET(x), FIND-SET(y)) LINK(x, y) if rank[x]  rank[y] then p[y]  x else p[x]  y if rank[x]  rank[y] then rank[y]  rank[y]  24 Các heuristics hợp theo thứ hạng nén đường dẩn (tiếp) FIND-SET(x) if x  p[x] then p[x]  FIND-SET(p[x]) return p[x] 25 nh hưởng heuristics lên thời gian chạy ª Thời gian chạy dãy thao tác gồm m MAKESET, UNION, FIND-SET, có n thao tác MAKE-SET: – Nếu dùng heuristic hợp theo thứ hạng ° O(m lg n) – Nếu dùng heuristic nén đường dẩn, với f số thao tác FIND-SET  (f log(1 + f / n) n) neáu f  n (n + f lg n) neáu f  n – Neáu dùng hai heuristics hợp theo thứ hạng nén đường dẩn ° O(m (m, n)) – (m, n) hàm đảo hàm Ackermann – ứng dụng thực tế, (m, n)   ª (Không chứng minh chận liệt kê trên.) 26 .. .Các thao tác lên cấu trúc liệu tập rời ª Cấu trúc liệu tập rời định nghóa – Một tập S tập động rời nhau, S = {S1 , S2 , , S k} Mỗi tập Si tượng trưng phần tử đại diện phần tử – Các thao... trả trỏ đến phần tử đại diện tập chứa x Để cho gọn, dùng ? ?các tập rời nhau? ?? để gọi ? ?cấu trúc liệu tập rời nhau? ?? ° ª Các thao tác lên tập rời (tiếp) ª ª Phân tích thời gian chạy thao tác dựa hai... tạo tập gồm x Vì tập rời nên x không nằm tập khác ° UNION(x, y): tạo tập hội tập động Sx Sy chứa x y, với điều kiện Sx Sy rời ° FIND-SET(x): trả trỏ đến phần tử đại diện tập chứa x Để cho gọn, dùng

Ngày đăng: 29/03/2021, 08:23

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w