Une liste -> comparer chaque élément avec chaque élément
Bonjour !
Sous ce titre un peu étrange, se cache un problème simple.
Pour vous situer le contexte, j'essaye de créer un importeur d'objets 3D Wavefront dans un visualisateur OpenGL créé avec OpenTK. Je vous passe les détails, mais à un moment, j'ai une liste de Vertex (qui peut être très grande).
Pour chaque vertex, je dois comparer sa position avec tous les autres vertex de la liste.
Pour y arriver, j'utilise deux boucles For imbriquées et je teste la position avec un pseudo-code du style:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
For i As Integer = 0 To groupVertices.Count - 1
For j As Integer = 0 To groupVertices.Count - 1
If Not i = j Then
If groupVertices(i).Position.Equals(groupVertices(j).Position) Then
'les vecteurs de position des deux vertex est identique
'quelques autres calculs peuvent être faits ici
End If
End If
Next
Next |
Tout fonctionne comme espéré ... quand la liste contient peu d'éléments, mais ma liste peut contenir plus de 20000 éléments !!!
Et là, c'est l'horreur. Cette méthode met plus de 20 secondes à tout parcourir, même si je ne fait aucun calcul complexe (à la place des commentaires).
Est-ce qu'il existe un moyen plus rapide pour faire ce genre de comparaison ?
Merci d'avance pour vos idées.