-1

Gegeben n von n Punkten und dem Abstand d zwischen diesen Punkten muss ich den entsprechenden ungerichteten gewichteten Graphen finden, der diese Abstände ergeben würde. Ich habe versucht, den Algorithmus von Prim zu verwenden, um die MST zu finden, aber dieser Satz hat die Größe n-1 und enthält nicht die n benötigten Kanten. Z.B. n durch n Entfernungen gegebenFinden eines entsprechenden Graphen aus gegebenen kürzesten Wegen

0 3 5 
3 0 4 
5 4 0 

Ich brauche die entsprechenden Kanten zu finden:

1 - 2 = 3 
1 - 3 = 5 
2 - 3 = 4 

, die in der graphischen Darstellung ergibt:

 3 
1 --------- 2 
\  /
    \5  /4 
    \ /
    \ /
     3 

jedoch Prim zurückkehren würde nur die ersten zwei Kanten seit Eine MST enthält keine Zyklen.

Antwort

1

Ein Graph, der zu diesen Abständen führen würde, ist der Graph, der eine Kante von jedem Knoten zu jedem anderen Knoten hat und die Länge dieser Kante ist der Abstand gemäß der Matrix. (Ich bin mir nicht sicher, was Sie mit ungewichtetem gemeint haben, weil das Beispiel, das Sie geben, ungerichtet zu sein scheint und ich bin mir nicht sicher, was der Unterschied zwischen Gewichten und Längen hier ist). Eine andere Möglichkeit wäre, die Abstände in aufsteigender Reihenfolge zu betrachten, wie Sie es mit Prims Algorithmus getan haben, und neben der Überprüfung, ob die Kante für die Verbindung der beiden Enden benötigt wird, prüfen Sie, ob der Mindestabstand vorhanden ist zwischen diesen Enden in der Grafik rekonstruiert ist so weit wie der Abstand in der Matrix. Wenn dies nicht der Fall ist, fügen Sie die Kante hinzu, auch wenn die Enden in der Grafik so weit verbunden sind.

+0

Wie in der Frage gefragt, muss ich den ungerichteten gewichteten Graphen mit n Kanten finden, die zu diesen kürzesten Abständen führt. In dem Beispiel von n = 3 konstruiert jede Kante gemäß der Matrix, aber wenn n = 8, z. das würde die Frage nicht befriedigen. In diesem Fall würde Prims 7 dieser Kanten zurückgeben, wie würde ich die letzte finden, wie in Ihrem zweiten Absatz erwähnt? Ich habe Prims in Java implementiert: https://pastebin.com/Zmfpm3D1 – MGG

+0

Wenn Sie wissen, dass es n Kanten gibt, würde ich Prim verwenden, um die ersten n-1 Kanten zu erhalten und dann die nicht verwendeten Kanten in aufsteigender Reihenfolge der Länge zu durchlaufen erstens, der kürzer ist als der Weg durch den Baum, der durch die vorhandenen n-1 Kanten gebildet wird. Sie können möglicherweise Zeit sparen, indem Sie Entfernungen berechnen, indem Sie die Tatsache nutzen, dass Sie Entfernungen auf einem Baum berechnen. – mcdowella

Verwandte Themen