|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Analyse système Inscription : décembre 2011 Messages : 14 ![]() |
Salut, je dois faire une comparaison entre le temps d'execution de Dijkstra classqiue et Dijkstra avec Fibonacci. En fait, normalement Dijkstra avc les tas de Fibonacci donne une complexité O(m +n log n) et Dijkstra classique a une complexité de O (n²). Mon problème c'est que lors de l'execution, je trouve le contraire, et le temps d'execution de Dijkstra class est moins que celui avc Fibonacci..
le code de Dijkstra avec Fibonacci est le suivant: Code :
le code de Dijkstra classique est: Code :
|
||||
|
|
00
|
|
|
#2 | |
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Faudrais voir aussi ton FIB là, parce que, si ça tombe, les méthodes n'ont pas la complexité annoncée
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
|
00
|
|
|
#3 | |||
|
Invité de passage
![]() Analyse système Inscription : décembre 2011 Messages : 14 ![]() |
Citation:
Merci pour votre réponse voila la classe Fibonacci que j'ai utilisé: Code :
|
|||
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() |
Et les mesures?
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
00
|
|
|
#5 | |
|
Invité de passage
![]() Analyse système Inscription : décembre 2011 Messages : 14 ![]() |
Citation:
et le temps d'execution de Dijkstra avec les tas de Fibonacci est:0.015 sec Merci tchize |
|
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Analyse système Inscription : décembre 2011 Messages : 14 ![]() |
Voila un fichier qui contient les classes utilisées dans mon programme
|
|
|
00
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Il ne faut pas perdre de vue, quand on calcule les temps d'exécution en fonction de n qu'on laisse tomber systématiquement les facteurs multiplicatifs et les constantes. Ainsi, O(n) peut vouloir dire un temps de 1s *n alors que O(n²) peut vouloir dire 1ms * n² Suivant la valeur de n l'un ou l'autre sera plus rapide. Si tu veux vérifier que tes deux algos suivent bien les courbes respectivement O(n²) et o(m+logn) tu dois faire plusieurs mesures avec des n et des m différents (Par exemple en testant de 10 noeuds à 300.000 noeuds). En java, pour courser le tout, il faudra que tu fasse, à chaque étape, plusieurs mesures. Il y a pas mal d'optimisation dynamique en java qui peux interférer avec les mesures, tu dois donc faire une moyenne (non pas calculer combien de temps pour 300 noeuds, mais combien de temps 1000x 300 noeuds, divisé par 1000) Une fois que tu aura fais ça, tu peux dessiner les deux courbes de mesure obtenues et les comparer. Et là tu verra qu'elle se croisent. Un algo sera plus rapide à faibles noeuds et l'autre plus rapide à beaucoup de noeuds. Pour reprendre mon exemple: O(n) = 1s * n:
0(n²) = 1ms * n²
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
|
00
|
|
|
#8 | |
|
Invité de passage
![]() Analyse système Inscription : décembre 2011 Messages : 14 ![]() |
Citation:
1/ comment je peux savoir le temps O(n²) est calculé par seconde ou ms.. d'ailleurs, j'ai précisé dans la fonction void main des deux algorithmes que le temps doit etre en seconde 2/ j'ai fais beaucoup de test avec plusieurs mesures ( nombre de noeuds: 10, 50...2000 Noeuds et j'ai changé aussi le nombre d'arc), je peux pas dépasser les 2000 noeuds, sinon lors de l'execution, un message d'erreur apparait qui annonce que je dois pas depasser l'espace mémoire disponible. Bref, je voulais dire, qu'avec tous ces tests, l'algorithme DIjkstra classique s'execute en un temps inférieur au temps de dijkstra avec Fibonacci Vraiment c'est etonannant j'espere que vous m'avez compri et merci encore une fois |
|
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Tu peux aussi augmenter la mémoire (paramùètre -Xmx) pour avoir plus de noeuds. Après si t'as fais plusieurs mesure, faudrais nous donner tout tes chiffre (et s'assurer que tu a bien mesure comme je l'ai indiqué) Citation:
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
||
|
|
00
|
|
|
#10 | |
|
Invité de passage
![]() Analyse système Inscription : décembre 2011 Messages : 14 ![]() |
Citation:
|
|
|
|
00
|
|
|
#11 |
![]() ![]() |
Oui, là on est dans la science informatique, pas dans le copier/coller de trucs trouvés sur le net.
C'est compliqué. Carrément pas. 2000 c'est pas vraiment différent de rien du tout, pour un ordinateur.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher du poisson, il videra le lac et au bout de deux ans son village ne mangera plus jamais. Partagez vos connaissances, mais aussi comment s'en servir. |
|
|
00
|
|
|
#12 | |
|
Invité de passage
![]() Analyse système Inscription : décembre 2011 Messages : 14 ![]() |
Citation:
nœuds arcs Temps (secondes) 2000 50000 0,184 4000 100000 0,733 6000 300000 1,604 8000 800000 2,951 10000 1000000 4,696 nœuds arcs Temps (s) 2000 50000 0,055 4000 100000 0,542 6000 300000 1,139 8000 800000 2,32 10000 1000000 3,603 |
|
|
|
00
|
|
|
#13 | |
|
Invité de passage
![]() Analyse système Inscription : décembre 2011 Messages : 14 ![]() |
Citation:
nœuds arcs Temps (secondes) 2000 50000 0,184 4000 100000 0,733 6000 300000 1,604 8000 800000 2,951 10000 1000000 4,696 nœuds arcs Temps (s) 2000 50000 0,055 4000 100000 0,542 6000 300000 1,139 8000 800000 2,32 10000 1000000 3,603 |
|
|
|
00
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() ![]() |
Et bien, on peux constater deux choses:
1 ta première série augmente moins vite que la deuxième 2 da tous les cas, l'algo non optimisé est le plus rapide pour la quantité de donnée que ta mémoire est capable de gérer.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
00
|
|
|
#15 | |
|
Invité de passage
![]() Analyse système Inscription : décembre 2011 Messages : 14 ![]() |
Citation:
1/ Algorithme de Dijkstra classique : complexité theorique :O(n²) nœuds arcs Temps (secondes) 2000 50000 0,184 4000 100000 0,733 6000 300000 1,604 8000 800000 2,951 10000 1000000 4,696 2/ Algo de Dijkstra avec Fibonacci: Complexité theorique: O(m+n log n) nœuds arcs Temps (s) 2000 50000 0,055 4000 100000 0,542 6000 300000 1,139 8000 800000 2,32 10000 1000000 3,603 D'après cette experimentation, j'ai remarqué que dans les cas où le nombre des noeuds est inferieur à 2000, l'algo de Dijkstra fini avec un temps d'execution inferieur à celui de Dijkstra avec Fibonacci.. Par contre, pour un nombre des noeuds superieur à 2000, le temps d'execution de Dijkstra avec Fibonacci sera plus rapide que l'autre algo... de plus, je veux savoir si cette experimentation reflete vraiment la complexité theorique et merci |
|
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Analyse système Inscription : décembre 2011 Messages : 14 ![]() |
est ce que je peux augmenter la taille de stockage dans les fichiers documents texte.; je cherche à inserer une matrice de 10000 lignes et colonnes par exp dans un fichier pour que mon algorithme la traite plus tard, mais la taille de stockage des fichiers est limitée.. des proposition svp ?
|
|
|
00
|
|
|
#17 | |
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Bien sur, une fat32 a une taille limite (1G si ma mémoire est bonne) mais NTFS / ext3, reiserfs, etc ne l'ont pas. Si tu as une limitation dans ton programme c'est surement que tu essaie de garder tout ton fichier en mémoire d'un coup.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
|
00
|
|
|
#18 |
|
Invité de passage
![]() Analyse système Inscription : décembre 2011 Messages : 14 ![]() |
est ce possible de comparer deux algorithmes avec deux matrices differentes mais qui ont le meme nombre de noeuds et d'arcs.. est ce que la comparaison sera correcte ??? puisque je veux une comparaison basé sur des matrices de grandes tailles, et j'arrive pas à stocker des telles matrices dans aucune Variable!.. Merci
|
|
|
00
|
|
|
#19 |
![]() ![]() |
|
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() Inscription : mai 2006 Messages : 1 028 ![]() |
|
|
|
10
|
Copyright © 2000-2013 - www.developpez.com