Skip to main content

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.

Original Paper

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yamada-mst-0.1.0.tar.gz (14.7 kB view details)

Uploaded Source

Built Distribution

yamada_mst-0.1.0-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

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

Hashes for yamada-mst-0.1.0.tar.gz
Algorithm Hash digest
SHA256 393ca1c8a70f04da6c9448f05d12e86a1a973c2e9bbcba9952835748a729a86c
MD5 4870e7380853dffda742604c12ec4782
BLAKE2b-256 5e18c7d32691976ed8ee71eff68c70c64b97c8b105f0b6ec01ffdbb55fd6337a

See more details on using hashes here.

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

Hashes for yamada_mst-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6bb887dd1e04b15221f16f13344047e33f2ea1b84d5eac6cb1cc1d08fea0bee2
MD5 ef8262ae66f6d297685510237979d37a
BLAKE2b-256 6078f99654c5b75fb8e92495e2c148c21b2fe2327c1c5bd357b0fb633e553ad0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page