minimum_spanning_tree#
- scipy.sparse.csgraph.minimum_spanning_tree(csgraph, overwrite=False)#
Gibt einen minimalen Spannbaum eines ungerichteten Graphen zurück
Ein minimaler Spannbaum ist ein Graph, der aus der Teilmenge von Kanten besteht, die alle verbundenen Knoten verbinden und dabei die Gesamtsumme der Gewichte der Kanten minimieren. Dies wird mit dem Kruskal-Algorithmus berechnet.
Hinzugefügt in Version 0.11.0.
- Parameter:
- csgrapharray_like oder sparse array oder matrix, 2 Dimensionen
Die N x N Matrix, die einen ungerichteten Graphen über N Knoten darstellt (siehe Hinweise unten).
- overwritebool, optional
Wenn True, werden Teile des Eingabegraphen aus Effizienzgründen überschrieben. Standard ist False.
- Rückgabe:
- span_treecsr matrix
Die N x N komprimierte sparse Darstellung des ungerichteten minimalen Spannbaums über die Eingabe (siehe Hinweise unten).
Hinweise
Diese Routine verwendet ungerichtete Graphen als Ein- und Ausgabe. Das heißt, wenn graph[i, j] und graph[j, i] beide Null sind, dann sind die Knoten i und j nicht miteinander verbunden. Wenn einer von ihnen ungleich Null ist, dann sind die beiden durch den minimalen ungleich Null-Wert der beiden verbunden.
Diese Routine verliert Präzision, wenn Benutzer eine dichte Matrix eingeben. Kleine Elemente < 1E-8 der dichten Matrix werden auf Null gerundet. Alle Benutzer sollten nach Möglichkeit sparse Matrizen eingeben, um dies zu vermeiden.
Wenn der Graph nicht verbunden ist, gibt diese Routine den minimalen Spannwald zurück, d. h. die Vereinigung der minimalen Spannbäume auf jeder verbundenen Komponente.
Wenn mehrere gültige Lösungen möglich sind, kann die Ausgabe je nach SciPy- und Python-Version variieren.
Beispiele
Das folgende Beispiel zeigt die Berechnung eines minimalen Spannbaums über einen einfachen vierkomponentigen Graphen
input graph minimum spanning tree (0) (0) / \ / 3 8 3 / \ / (3)---5---(1) (3)---5---(1) \ / / 6 2 2 \ / / (2) (2)
Es ist leicht zu sehen, dass der minimale Spannbaum die Entfernung der Kanten mit den Gewichten 8 und 6 beinhaltet. In komprimierter Sparse-Darstellung sieht die Lösung wie folgt aus
>>> from scipy.sparse import csr_array >>> from scipy.sparse.csgraph import minimum_spanning_tree >>> X = csr_array([[0, 8, 0, 3], ... [0, 0, 2, 5], ... [0, 0, 0, 6], ... [0, 0, 0, 0]]) >>> Tcsr = minimum_spanning_tree(X) >>> Tcsr.toarray().astype(int) array([[0, 0, 0, 3], [0, 0, 2, 5], [0, 0, 0, 0], [0, 0, 0, 0]])