Algorithme pour trouver les points qui sont les plus éloignées — mieux que O(n^2)?

Dans mon programme, j'ai un ensemble de points. Pour des fins de mise à l'échelle, je suis à la recherche pour les deux nœuds qui sont les plus éloignées, et ensuite calculer un facteur de multiplier toutes les coordonnées de sorte que la distance maximale est égale à une certaine prédéfini j'définir.

L'algorithme que je suis aide à trouver les deux points les plus éloignées est toutefois problématique pour les grands ensembles de points, comme il est O(n^2); pseudo-code (les distances qui ont déjà été calculées sont ignorés):

 for each point in points:
     for each other point in points:
         if distance between point and other point > max
             max = distance between point and other point

Est-il quelque chose de plus rapide?

double possible de algorithme Efficace pour trouver les sphères les plus éloignées dans la grande collection
J'ai posté un algorithme O(n) qui comprend une marge d'erreur qui peut être utile à votre problème particulier de la mise à l'échelle.
je pense que cela va sauter répété index et déjà visité (mais dans l'ordre inverse) paires d'indices: for (int i = 0, j; i < count - 1); i++) for (j = i + 1; j < nombre ; j++) //pour la première boucle for, vous pouvez utiliser (count - 1) ou de compter parce que la boucle interne ne s'exécutera pas à ce point quand même.

OriginalL'auteur houbysoft | 2011-06-29