J'essaie de mettre en œuvre une version plus simple de cet algorithme, mais qui fonctionne mieux que l'algorithme quadratique. Mon idée consiste essentiellement à trier les points par coordonnées x seulement et essayer de résoudre à partir de là. Une fois que j'ai trié mon tableau de points par coordonnées x, je veux parcourir le tableau et sauter des points dont la distance est plus grande que les deux premiers points que j'ai pris.Algorithme de paires de points le plus proche
Par exemple, mon currentminDist = x; Si les deux paires de points que je regarde ont une distance> x (seulement par sa coordonnée x dist), j'ignore le point et le dépasse dans le tableau.
J'ai l'idée en bas, mais je suis un peu coincé sur la façon de réellement mettre en œuvre cela (en particulier la partie condition). J'ai une fonction qui me renvoie la distance entre deux points en fonction de leur coordonnée x. Je suis confus sur comment écrire réellement mes conditions pour ma boucle puisque je veux ignorer un point si la distance se trouve être trop loin et remplir toujours mon tableau qui contiendra les réponses pour les points les plus proches pour chaque i (je suis le point actuel que je regarde).
Des conseils ou des instructions seraient grandement appréciés. Je ne suis pas très au courant des algorithmes de codage, donc c'est assez frustrant.
Voici une partie de mon code:
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 est ma fonction qui retourne juste la distance entre deux points.
Merci!
@ Paul: avez-vous besoin de le faire souvent? Ne stockez pas vos points dans une aide "quadtree"? http://en.wikipedia.org/wiki/Quadtree – TacticalCoder
Notez que vous pouvez obtenir de meilleures performances qu'avec l'algorithme naïf, mais vous serez quand même 'O (n^2)'. – ARRG
Pourquoi y a-t-il 'currbest' et' bestdist' dans votre code? Quelle est la différence? – Ishtar