Mô tả dự án
DisjointSet [a. k. a. triển khai union–tìm cấu trúc dữ liệu hoặc hợp nhất–tìm tập hợp] cho Python
điều kiện tiên quyết
Yêu cầu duy nhất là cài đặt Python 3, bạn có thể xác minh điều này bằng cách chạy
$ python --version Python 3.7.2
Cài đặt
pip install disjoint-set
Bạn có thể xác minh rằng bạn đang chạy phiên bản gói mới nhất bằng cách chạy
>>> import disjoint_set >>> disjoint_set.__version__ '0.7.3'
Cách sử dụng
>>> from disjoint_set import DisjointSet >>> ds = DisjointSet[] >>> ds.find[1] 1 >>> ds.union[1,2] >>> ds.find[1] 2 >>> ds.find[2] 2 >>> ds.connected[1,2] True >>> ds.connected[1,3] False >>> "a" in ds False >>> ds.find["a"] 'a' >>> "a" in ds True >>> list[ds] [[1, 2], [2, 2], [3, 3], ['a', 'a']] >>> list[ds.itersets[]] [{1, 2}, {3}, {'a'}]
Đóng góp
Vui lòng mở bất kỳ vấn đề nào trên github
tác giả
Giấy phép
Dự án này được cấp phép theo Giấy phép MIT - xem GIẤY PHÉP. tập tin md để biết chi tiết
Bài viết này thảo luận về cấu trúc dữ liệu Disjoint Set Union hoặc DSU. Thường thì nó còn được gọi là Union Find vì hai hoạt động chính của nó
Cấu trúc dữ liệu này cung cấp các khả năng sau. Chúng tôi được cung cấp một số phần tử, mỗi phần tử là một tập hợp riêng biệt. Một DSU sẽ có một phép toán để kết hợp hai tập hợp bất kỳ và nó sẽ có thể cho biết phần tử cụ thể nằm trong tập hợp nào. Phiên bản cổ điển cũng giới thiệu thao tác thứ ba, nó có thể tạo một tập hợp từ một phần tử mới
Do đó, giao diện cơ bản của cấu trúc dữ liệu này chỉ bao gồm ba thao tác
2 - tạo một tập hợp mới bao gồm phần tử mớiint find_set[int v] { if [v == parent[v]] return v; return parent[v] = find_set[parent[v]]; }
3int find_set[int v] { if [v == parent[v]] return v; return parent[v] = find_set[parent[v]]; }
4 - hợp nhất hai tập hợp đã chỉ định [tập hợp chứa phần tửint find_set[int v] { if [v == parent[v]] return v; return parent[v] = find_set[parent[v]]; }
5 và tập hợp chứa phần tửint find_set[int v] { if [v == parent[v]] return v; return parent[v] = find_set[parent[v]]; }
6]int find_set[int v] { if [v == parent[v]] return v; return parent[v] = find_set[parent[v]]; }
7 - trả về đại diện [còn gọi là người lãnh đạo] của tập hợp có chứa phần tửint find_set[int v] { if [v == parent[v]] return v; return parent[v] = find_set[parent[v]]; }
3. Đại diện này là một phần tử của tập hợp tương ứng của nó. Nó được chọn trong mỗi tập hợp bởi chính cấu trúc dữ liệu [và có thể thay đổi theo thời gian, cụ thể là sau cuộc gọiint find_set[int v] { if [v == parent[v]] return v; return parent[v] = find_set[parent[v]]; }
9]. Đại diện này có thể được sử dụng để kiểm tra xem hai phần tử có thuộc cùng một tập hợp hay không.int find_set[int v] { if [v == parent[v]] return v; return parent[v] = find_set[parent[v]]; }
5 vàint find_set[int v] { if [v == parent[v]] return v; return parent[v] = find_set[parent[v]]; }
6 hoàn toàn thuộc cùng một tập hợp, nếuint find_set[int v] { if [v == parent[v]] return v; return parent[v] = find_set[parent[v]]; }
void make_set[int v] { parent[v] = v; size[v] = 1; } void union_sets[int a, int b] { a = find_set[a]; b = find_set[b]; if [a != b] { if [size[a]