Tun Sie genau wie Sie gesagt haben: für alle Kanten, finden Sie den Wert in der Grafik, die die niedrigste ist.
i, j = current_edge = weightList[0]
current_min = graph[i][j]
for edge in weightList[1:]:
i, j = edge
if graph[i][j] < current_min:
current_min = graph[i][j]
current_edge = edge
Sie beginnen mit der ersten Flanke von Ihrem weightList
, dann wiederholen Sie an allen anderen Kanten Wert zu versuchen und zu finden, das niedriger ist. Wenn Sie die Schleife verlassen, ist current_edge
die Kante mit dem niedrigsten Wert.
Davon abgesehen, könnte es sich lohnen, stattdessen zu versuchen, Ihren Code zu verstehen. Ich nehme an, Sie wissen, was sorted
tut. Um Ihre weightList
zu sortieren, verwendet sorted
den Parameter key
, eine Funktion, die einen Wert zurückgibt. In Ihrem Fall gibt Ihre Funktion den Wert in an der Position Ihrer Kante zurück. sorted
wird diesen Wert verwenden, um die Kanten miteinander zu vergleichen.
Damit werden alle Ihre Kanten von dem mit dem niedrigsten Wert zu dem mit dem höchsten Wert sortiert. Dann, sobald es sortiert ist, nehmen Sie das erste Element, das ist die Kante mit dem niedrigsten Wert.
Algorithmisch, mit sorted
für diesen Job ist keine gute Idee, da es eine Zeit Komplexität von O(n log n)
hat. Im Vergleich dazu ist mein Algorithmus O(n)
(aber wahrscheinlich langsamer, weil ich annehme sorted
ist in C implementiert). Stattdessen können Sie das gleiche Ergebnis in O(n)
unter Verwendung von Standard-Funktionen unter Verwendung min
, erhalten, die sicher ist die effizienteste und lesbar Option aus allen drei:
edge = min(weightList, key=lambda (i,j): graph[i][j])
Es ist toll, dass Sie jetzt diese Linie verstehen, aber es könnte sich lohnen, sagen, es isn‘ t ein besonders effizienter Weg. Sie sollten 'min' anstelle von' sorted' verwenden. –