Sei eine Matrix. Wir sagen , zwei Einträge Nachbarn sind , wenn sie neben horizontal oder vertikal sind, und beide Einträge sind ‚s. Man will Mindestanzahl von finden ‚s hinzuzufügen, so dass jeder eine andere durch eine Folge von Nachbarn zu erreichen.1 1
Beispiel:
100
000
001
Hier brauchen wir 3 's:
100
100
111
Wie können wir effizient die minimale Anzahl von finden ‚s hinzuzufügen, und wo?
algorithms
graph-theory
matrices
Chao Xu
quelle
quelle
Antworten:
Wenn Sie Ihr Problem mit Diagrammen modellieren, ist Ihr Problem wie das Steiner Tree-Problem :
Siehe hier für eine möglichst einfache Definition.
Wie Sie sehen können, handelt es sich im Allgemeinen um einen NPC. In Ihrem Fall handelt es sich bei Ihrem Diagramm jedoch um ein Rasterdiagramm. Möglicherweise finden Sie eine gute Lösung dafür. In Ihrem aktuellen Beispiel (wenn sich die Terminals an der Grenze befinden) sehen Sie den Steiner-Baum in Rasterdiagrammpapier .
Auf jeden Fall gibt es ausgezeichnete Heuristiken für das Steiner Tree-Problem. Sie können einen ähnlichen Ansatz für Ihr Problem anwenden.
PS: Sie können davon ausgehen, dass Nachbarn 1s verbundene Knoten sind. Danach können Sie ihre Kanten zusammenziehen, um ein neues Diagramm zu erstellen. Ihr neu erstelltes Diagramm ist planar. Wenn Sie den Steiner-Baum dafür lösen könnten, könnten Sie Ihr Problem lösen, aber möglicherweise Für Ihr Problem gibt es eine gute Lösung, die unabhängig von Steiner Tree ist.
quelle