Metadata-Version: 2.1
Name: disjoint-set
Version: 0.8.0
Summary: Disjoint set data structure implementation for Python
Home-page: https://github.com/mrapacz/disjoint_set
Maintainer: Maciej Rapacz
Maintainer-email: python.disjointset@gmail.com
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
License-File: LICENSE

# disjoint-set

![PyPI - Python Version](https://img.shields.io/pypi/pyversions/disjoint_set.svg)
[![PyPI](https://img.shields.io/pypi/v/disjoint_set.svg)](https://pypi.org/project/disjoint-set/)
![Coveralls](https://img.shields.io/coveralls/github/mrapacz/disjoint-set/master.svg)
![PyPI - License](https://img.shields.io/pypi/l/disjoint_set.svg)

[DisjointSet](https://en.wikipedia.org/wiki/Disjoint-set_data_structure) (a.k.a. union–find data structure or merge–find set) implementation for Python.

## Prerequisites

The only requirement is using **Python 3.8+**. You can verify this by running:

```bash
$ python --version
Python 3.8.18
```

## Installation

```
pip install disjoint-set
```

You can verify you're running the latest package version by running:

```python
>>> import disjoint_set
>>> disjoint_set.__version__
'0.8.0'

```

## Usage

### Import & instantiate

```python
>>> from disjoint_set import DisjointSet
>>> DisjointSet()
DisjointSet({})

>>> DisjointSet({1: 1})
DisjointSet({1: 1})

>>> DisjointSet.from_iterable([1,2,3])
DisjointSet({1: 1, 2: 2, 3: 3})

```

### Perform find & union operations

```python
>>> ds = DisjointSet()
>>> ds.find(1)
1

>>> ds.union(1,2)
>>> ds.find(1)
2

>>> ds.find(2)
2

```

### Check if values belong to the same set

```python
>>> ds = DisjointSet({1: 2, 2: 2, 3: 3})
>>> ds.connected(1,2)
True

>>> ds.connected(1,3)
False

```

### Check if values are present within the data structure

```python
>>> ds = DisjointSet()
>>> "a" in ds
False

>>> ds.find("a")
'a'

>>> "a" in ds
True

```

### List elements and sets within the disjoint set

```python
>>> ds = DisjointSet({1: 2, 2: 2, 3: 3})
>>> list(ds)
[(1, 2), (2, 2), (3, 3)]

>>> ds = DisjointSet({1: 2, 2: 2, 3: 3})
>>> list(ds.itersets())
[{1, 2}, {3}]

```

## Contributing

Feel free to open any issues on github.

## Authors

- [Maciej Rapacz](https://github.com/mrapacz/)

## License

This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details
