Sto provando a risolvere il problema della distanza (utilizzando la distanza di Manhattan). Fondamentalmente, dando matrice 0 e 1 del programma deve assegnare distanze di ogni posizione vicina 1. Ad esempio, per questoAlgoritmo: trasformazione della distanza - qualsiasi algoritmo più veloce?
0000
0100
0000
0000
distanza trasformare matrice è
2123
1012
2123
3234
Possibili soluzioni da testa sono :
quelli più lento (più lenti perché ho provato per la loro attuazione - erano in ritardo rispetto a molto grandi matrici):
Brute-force: per ogni 1 programma letto, modificare le distanze di conseguenza dall'inizio alla fine.
Ricerca di ampiezza a partire da 0 - per ogni 0, il programma cerca l'interno 1 più vicino.
Uguale a 2 ma a partire dal segno di 1 ogni distanza verso l'esterno.
molto più veloce (leggere da codice di altre persone)
Larghezza-prima ricerca dal 1 di
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
volevo chiedere se c'è una soluzione più rapida a questo problema. Ho provato a cercare algoritmi per la trasformazione a distanza, ma la maggior parte di essi ha a che fare con le distanze euclidee.
Grazie in anticipo.
4) è una prima ricerca di larghezza che inizia con '1's – CodesInChaos
editato, grazie –