Tập rời rạc Union Python

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

  • int find_set[int v] {
        if [v == parent[v]]
            return v;
        return parent[v] = find_set[parent[v]];
    }
    
    2 - tạo một tập hợp mới bao gồm phần tử mới
    int find_set[int v] {
        if [v == parent[v]]
            return v;
        return parent[v] = find_set[parent[v]];
    }
    
    3
  • int 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ọi
    int 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ếu
    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] 

Chủ Đề