Vitesse du programme et algorithme de Floyd

Vitesse du programme et algorithme de Floyd

by Vincent Jonathan Philippoz -
Number of replies: 1

Après avoir implémenté l'algorithme de Floyd dans notre projet, nous nous sommes rendus compte que celui-ci a un coût calcul très élevé dès que le nombre de cellules (nbCell) est grand. D'après nos calculs, la complexité de l'algorithme est de O(nbCell^6). Par conséquent, avec une carte de dimension nbCell = 35, l'algorithme met plus de 36 secondes à s'exécuter (il passe 35^6 = 1'838'265'625 fois dans la boucle) sur le terminal EPFL, alors que ce calcul semble presque instantané (moins de 1 seconde) sur la démo.

Devons nous atteindre de telles performances ? Si oui, comment optimiser l'exécution de l'algorithme ?

Il est facile de diviser le temps d'exécution par 2 en utilisant le fait que le chemin de A à B est de même longueur que le chemin de B à A et donc éviter de calculer les résultats deux fois. Cependant, cela nous ramène à 18 secondes, ce qui reste très grand...

In reply to Vincent Jonathan Philippoz

Re: Vitesse du programme et algorithme de Floyd

by Noureddine Abdel Mélik Gueddach -

Salut,

L'algo de Floyd est de complexité O(n3) , donc même sans optimisation particulière, ça se fait en peu de secondes (en tout cas chez moi). Ensuite pour optimiser encore plus, tu mets -O3 dans tes flags de compilation.