Ich versuche das Entfernungstransformationsproblem zu lösen (mit Manhattans Entfernung). Grundsätzlich gibt Matrix mit 0 und 1 ist, Programm muss zuweisen Entfernungen von jeder Position am nächsten 1. Zum Beispiel für diese eineAlgorithmus: Distanz-Transformation - ein schnellerer Algorithmus?
0000
0100
0000
0000
Entfernung Transformationsmatrix ist
2123
1012
2123
3234
Mögliche Lösungen aus meinem Kopf :
langsamsten (langsamste, weil ich sie umzusetzen haben versucht - sie hinken auf sehr großen Matrizen):
Brute-Force - für jede 1, die das Programm liest, ändern Sie die Abstände entsprechend vom Anfang bis zum Ende.
Breite-zuerst Suche von Nullen - für jede 0, Programm sucht nach nächsten 1 von innen nach außen.
Wie 2, aber beginnend mit der 1-Marke jeden Abstand von innen nach außen.
Viel schneller (Lesen von Code anderen Leute)
Breitensuche von 1en
1. Assign all values in the distance matrix to -1 or very big value. 2. While reading matrix, put all positions of 1's into queue. 3. While queue is not empty a. Dequeue position - let it be x b. For each position around x (that has distance 1 from it) if position is valid (does not exceed matrix dimensions) then if distance is not initialized or is greater than (distance of x) + 1 then I. distance = (distance of x) + 1 II. enqueue position into queue
Ich wollte fragen, ob es schnelle Lösung für dieses Problem ist. Ich habe versucht, Algorithmen für die Entfernung zu suchen, aber die meisten von ihnen beschäftigen sich mit euklidischen Entfernungen.
Vielen Dank im Voraus.
4) ist eine breite erste Suche beginnend mit den '1's – CodesInChaos
edited, danke –