Package to find all minimum spanning trees in a network graph.
Project description
yamada
Python implementation of the Yamada-Kataoka-Watanabe algorithm to find all minimum spanning trees in an undirected graph.
Implementation mostly follows the ALL_MST2
algorithm outlined in the original paper. The implementation differs slightly by performing a breadth-first search in liue of a depth-first search. This modification was made so that more variable spanning trees were returned when capping the total number of trees returned.
Yamada, T. Kataoka, S. Watanabe, K. "Listing all the minimum spanning trees in an undirected graph". International Journal of Computer Mathematics. Vol 87, No. 14. pp. 3175 - 3185. November 2010.
Installation
This module is not currently hosted through popular package managing tools such as pip
or conda
. Therefore, simply cloning, downloading, or forking this repository is the best way to install the package. To ensure global access to the module, you'll want to add the repository location to your PYTHONPATH
.
Tests
Proper implementation was tested using the examples found in the original paper, and implementation of those tests can be found in the test
subdirectory. The graph structure used in Figure 3 of the original paper, is used to explicitly test for exact minimum spanning tree membership. Meanwhile, the unit-weight, complete graphs ki are tested for unique membership and expected length for i in {3, 4, 5, 6}. The Substitute()
algorithm is tested using the example found in table 3 of the original paper.
To run the tests simply execute the following command:
python tests/test_yamada.py
Dependencies
This module depends on the numpy
, networkx
, collections
, sortedcontainers
, sys
, and unittest
packages, and was written in Python 3.6. The exact requirements can be found in the requirements.txt
file. A yamada.yaml
file is also provided for conda
environment creation.
Example
import yamada
import networkx as nx
example = {1: {2: {'weight': 2},
3: {'weight': 1}},
2: {1: {'weight': 2},
3: {'weight': 3},
4: {'weight': 1}},
3: {1: {'weight': 1},
2: {'weight': 3},
4: {'weight': 2},
5: {'weight': 2}},
4: {2: {'weight': 1},
3: {'weight': 2},
5: {'weight': 1},
6: {'weight': 3}},
5: {3: {'weight': 2},
4: {'weight': 1},
6: {'weight': 3}},
6: {4: {'weight': 3},
5: {'weight': 3}}}
graph = nx.Graph(example)
# retrieve all minimum spanning trees
graph_yamada = yamada.Yamada(graph)
all_msts = graph_yamada.spanning_trees()
print(len(all_msts))
# retrieve fixed number of minimum spanning trees
graph_yamada = yamada.Yamada(graph, n_trees=3)
msts = graph_yamada.spanning_trees()
print(len(msts))
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file yamada-mst-0.1.0.tar.gz
.
File metadata
- Download URL: yamada-mst-0.1.0.tar.gz
- Upload date:
- Size: 14.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.8.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 393ca1c8a70f04da6c9448f05d12e86a1a973c2e9bbcba9952835748a729a86c |
|
MD5 | 4870e7380853dffda742604c12ec4782 |
|
BLAKE2b-256 | 5e18c7d32691976ed8ee71eff68c70c64b97c8b105f0b6ec01ffdbb55fd6337a |
File details
Details for the file yamada_mst-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: yamada_mst-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.8.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6bb887dd1e04b15221f16f13344047e33f2ea1b84d5eac6cb1cc1d08fea0bee2 |
|
MD5 | ef8262ae66f6d297685510237979d37a |
|
BLAKE2b-256 | 6078f99654c5b75fb8e92495e2c148c21b2fe2327c1c5bd357b0fb633e553ad0 |