Sto cercando di implementare una versione più semplice di questo algoritmo, ma che funziona meglio rispetto l'algoritmo quadratico. La mia idea è fondamentalmente quella di ordinare i punti solo per coordinate xe provare a risolverli da lì. Una volta ordinata la mia serie di punti per coordinate x, voglio scorrere l'array e saltare fondamentalmente i punti la cui distanza è maggiore dei primi due punti che ho preso.più vicino coppia di punti algoritmo
Per esempio, i miei currentminDist = x;
Se la doppia coppia di punti Sto cercando di avere la distanza> x (solo per la sua x coord dist), io ignorare il punto e spostarlo passato nella matrice.
ho l'idea verso il basso, ma sono di tipo bloccato su come implementare in realtà questo (soprattutto la parte condizione). Ho una funzione che mi restituisce la distanza tra due punti in base alla loro coordinata x.
Sono confuso su come effettivamente scrivere le mie condizioni per il mio ciclo poiché voglio ignorare un punto se la distanza sembra essere troppo lontana e comunque riempire il mio array che conterrà le risposte per i punti più vicini per ogni i (sto punto corrente che sto guardando).
Eventuali consigli o indicazioni sarebbe molto apprezzato. Non sono molto esperto negli algoritmi di codifica, quindi è piuttosto frustrante.
Ecco parte del mio codice:
for (i = 0; i < numofmypoints; i++)
{
for (int j = i + 1; (j < numpofmypoints) && ((inputpoints[j].x - inputpoints[i].x) < currbest); j++)
{
currdist = Auxilary.distbyX(inputpoints[i],inputpoints[j]);
if (currdist < bestdist)
{
closest[i] = j;
bestdist = currdist;
}
}
}
distbyX è la mia funzione che restituisce solo la distanza tra due punti.
Grazie!
@ Paolo: hai bisogno di fare questo spesso? Non memorizzerebbe i tuoi punti in un aiuto "quadruplo"? http://en.wikipedia.org/wiki/Quadtree – TacticalCoder
Nota che potresti ottenere prestazioni migliori rispetto all'algoritmo ingenuo, ma sarai comunque 'O (n^2)'. – ARRG
Perché ci sono 'currbest' e' bestdist' nel codice? Qual è la differenza? – Ishtar