Bonjour,
J'ai dans mon code trois boucles imbriquée qui font ramer mon programme à mort, pour un truc pas si compliqué. Je me dit qu'il doit exister une façon plus intelligente de coder ça en utilisant mieux les subtilité de java concernant les arraylist, mais je ne maitrise pas...
voila le topo: j'ai une ArrayList "Pop" contenant des objet (disons "Po") ayant chacun a une coordonée spatiale x et y (Po.x et Po.y). il y a BEAUCOUP d'objets dans Pop (genre 120 000) ce que je veux, c'est connaitre pour chaque objet Po la distance qui le sépare du plus proche de ses voisins...
si ya des balaises en algorythme, ils n'aurons surement pas de mal à trouver mieux que moi : voir mon code ci dessous (j'espère que c'est compréhensible?)
merci aux éventuels courageux!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 public void calculGREG() { // recherche de la distance entre 2 individus contigus : System.out.println("Gregarisme : calculating distances between individuals ..."); double r_min; for (int p = 0; p < Pop.size(); p++) { Poissons Po = (Poissons) Pop.get(p); int nbre_voisins = 0; // Rayon minimum pour avoir un seul voisin : r_min = 0; //on le fixe a 0, puis on l'augmentera dans la boucle while jusqu'a ce qu'on trouve un voisin // nombre de voisins dans ce rayon r_min: while (nbre_voisins < 2) { r_min = r_min + 0.1; nbre_voisins = 0; for (int v = 0; v < Pop.size(); v++) { Poissons voisin_potentiel = (Poissons) Pop.get(v); double Px = voisin_potentiel.x - Po.x; double Py = voisin_potentiel.y - Po.y; double rayonCarre = (Px * Px + Py * Py); if (rayonCarre < r_min * r_min) { nbre_voisins = nbre_voisins + 1; } } } Po.DistVoisin_init = r_min; // fin de la recherche de dist entre indiv contigus //System.out.println("Po.DistVoisin_init =" + Po.DistVoisin_init); } }
Partager