|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : avril 2010 Messages : 215 ![]() |
Bonsoir,
J'ai écrit un programme qui traite un maillage 3D, sur ma machine j'ai effectuer quelques tests avec différents maillages 3D (je changeais à chaque fois le nombre de cellule du maillage) et j'ai noté à chaque fois le temps d’exécution ce qui m'a permis de tracer la figure ci-jointe avec Excel. J'ai vu sur certain document le terme "computational complexity" et mes recherche m'ont aidées à comprendre que ce terme ne veut pas dire temps d’exécution, pouvez vous m'éclairer s'il vous plait? merci
|
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 568 ![]() |
De manière générale c'est la définition du comportement de l'algo en foncton de la taille de l'entrée..
Elle est souvent calculée - et est représentative - comme le "noeud", c'est à dire la plus grosse partie de l'algo.. Par exemple une boucle simple sur N éléments sera dite O'N). Une double boucle sur N et M éléments (une matrice) sera O(N*M). On néglige les facteurs constants : quand on dit "un algo est en O(N^2), on dit que c'est "proportionnel au carré de l'entrée".. Il faut donc analyser chaque partie de ton algo et en tirer la partie donnant la plus grosse dépendance : c'est ce qui limitera.. Bien entendu, il peut y avoir plusieurs types de complexités. Regarde Wiki.. La plus courante est celle que j'ai indiquée...
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Chercheur Inscription : mars 2010 Messages : 1 143 ![]() |
Bonjour,
la complexité (temporelle) d'un algorithme correspond au nombre d'opérations effectuées en fonction des données. Il s'agit donc d'une mesure de performance comme l'est le temps d'exécution. La différence essentielle entre les deux notions est que le temps d'exécution d'un algorithme pourra varier selon l'architecture : les calculateurs sont de plus en plus performants et les temps d'exécution tendent à diminuer. Ce n'est pas le cas de la complexité qui, en ce sens, est une meilleure mesure de performance que le temps d'exécution. |
|
|
00
|
|
|
#4 | |
|
Membre du Club
![]() Inscription : avril 2010 Messages : 215 ![]() |
Salut et merci pour vos réponses
![]() Grace à vous j'ai trouver un document qui parle de "comutational complexity" mais il cite différents ordres: Citation:
merci
|
|
|
|
00
|
|
|
#5 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
Puisque tu as les valeurs mesurées pour ton algo, le plus simple c'est de tracer la courbe suivant chaque échelle (n, n^2, log(n), ...) et regarder laquelle donne une ligne droite.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#6 | |
|
Membre du Club
![]() Inscription : avril 2010 Messages : 215 ![]() |
Salut,
Citation:
|
|
|
|
00
|
|
|
#7 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
Citation:
Il te suffit de tracer les nuages de points suivants: * nuage des points (Xi,Yi) * nuage des points (log(Xi),Yi) * nuage des points (Xi^2,Yi) ... Le nuage de point qui forme une ligne t'indiquera le type de complexité.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
10
|
|
|
#8 | |
|
Membre du Club
![]() Inscription : avril 2010 Messages : 215 ![]() |
Citation:
merci
|
|
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 568 ![]() |
parce que avec une corrélation linéaire tu as un coefficient de corrélation... Ce qui n'est pas directement atteignable avec des fits divers ou variés : tout ce que tu pourras avoir c'est des écarts relatifs, et tu pourrais mentionner le max..
Dans le cas d'un fit linéaire, le coefficient de corrélation est une mesure reconnue par tout le monde : un coefficient de confiance.. Si c'est linéaire, y'a pas de problèmes. Si c'est expoentiel, ça devient plus compliqué.. Une superposition de courbe ferait illusion, mais ne donnerait pas d'indications précises. Donc, si ton algo se comporte en O(N^2), si tu prends le log, tu devrais avoir une droite de pente 2.
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
10
|
|
|
#10 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
Souviron34 à très bien expliqué la raison.
Pour faire simple, si tu as une complexité en N^2 alors les points Pi forment visuellement une parabole. Pi = (Xi,Yi) ~= (Xi, a.Xi^2) Comme visuellement c'est dur de reconnaitre une parabole, il est plus pratique de changer l'échelle sur l'axe X --> Qi = (Xi^2,Yi) ~= (Xi^2, a.Xi^2) Dans ce cas, les points Qi forment visuellement une droite. C'est plus facile a reconnaitre.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
10
|
|
|
#11 |
|
Membre du Club
![]() Inscription : avril 2010 Messages : 215 ![]() |
Salut et merci pour votre aide
Comme vous pouvez le constater sur la figure jointe, je n'ai pas obtenu de ligne droite en traçant les différente fonction ![]() Que dois-je faire d'après vous ? merci
|
|
|
00
|
|
|
#12 |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 568 ![]() |
D'une part avoir plus de points de mesure...
Là, d'après ce qu'on peut voir, ça semblerait en O(N^2)... Ce qui serait pas mal pour un maillage 3D, et normal pour un 2D. Ensuite, analyser plus propement ton algorithme, comme je l'ai expliqué dans la discussion Etude de complexité de l'implémentation d'un algorithme donné, en particulier au post #10
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
10
|
|
|
#13 | ||
|
Membre du Club
![]() Inscription : avril 2010 Messages : 215 ![]() |
Bonsoir et merci de m'avoir répondue
![]() Code :
merci d'avance
|
||
|
|
00
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 568 ![]() |
Avec aussi peu de points difficile à dire, mais ça n'a pas l'air.. : ça a l'air de démarrer plat puis de monter..
Alors que la courbe en N^2 a l'air plus droite..
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
10
|
|
|
#15 |
|
Membre Expert
![]() Chercheur Inscription : mars 2010 Messages : 1 143 ![]() |
Bonsoir Décembre,
peux-tu nous donner les grandes étapes de ton algorithme? |
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Chercheur Inscription : mars 2010 Messages : 1 143 ![]() |
Bien que je ne cautionne pas l'approche adoptée, je pense que tu auras une meilleure idée du comportement de ton algorithme en ayant plus de points de mesure. Idéalement, il faudrait une trentaine de points de mesure à égale distance les uns des autres en abscisse (grossièrement bien sûr) et pour des grandes valeurs de n (ce que tu fais déjà) puisqu'on souhaite uniquement une tendance asymptotique. Il se peut que, pour une raison à déterminer, tu sois en présence de valeurs aberrantes bruitant trop fortement ton problème de régression (à cause du faible nombre de points).
EDIT : conserve les points de mesure dans une table que tu pourras poster afin que chacun puisse t'aider à trouver l'équation mystère... |
|
|
10
|
|
|
#17 |
|
Membre du Club
![]() Inscription : avril 2010 Messages : 215 ![]() |
Bonsoir,
J'ai pris plus de valeur comme vous me l'aviez recommandé et vous avez raison la ligne droite se confirme pour le O(n²). J'ai lu certain document mais j'avoue que je n'arrive toujours pas à comprendre comment et pourquoi on obtient une ligne droite à la complexité temporelle de l'algorithme? |
|
|
00
|
|
|
#18 | ||||||||
|
Membre Expert
![]() Chercheur Inscription : mars 2010 Messages : 1 143 ![]() |
Bonsoir,
Citation:
Citation:
Citation:
Lorsque que N grandit (tend vers l'infini), le terme de plus haut degré, c'est-à-dire ck*N^k, grandit plus vite que les autres termes et finit par devenir tellement grand par rapport aux autres que les valeurs de F(N) et ck*N^k sont presque les mêmes. En d'autres termes, la somme Citation:
Citation:
Citation:
Citation:
Citation:
J'espère que tout est clair. Pense bien à passer ce sujet en résolu et bon courage pour la suite. |
||||||||
|
|
10
|
|
|
#19 |
|
Membre du Club
![]() Inscription : avril 2010 Messages : 215 ![]() |
Merci Aleph69 ton explication est vraiment très très claire
![]() merci encore pour vous tous
|
|
|
00
|
|
|
#20 | |
|
Membre du Club
![]() Inscription : avril 2010 Messages : 215 ![]() |
Citation:
|
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com