Complexité algorithmique
Discutez d'informatique ici !
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 08:03
-
par ampholyte » 19 Avr 2013, 13:45
Bonjour,
Une petite question me vient en tête lorsque l'on souhaite calculer la complexité d'un algorithme.
N'ayant jamais eu de cours, je me suis renseigné de mon côté mais quelques complexités me laissent perplexes.
Prenons en exemple la dichotomie :
- Code: Tout sélectionner
int debut = 0;
int fin = 1000;
int milieu = 0;
bool trouve = false;
int tab[1001] = {0};
int parametre = 100
/* Initialisation du tableau */
do {
milieu = (debut + fin)/ 2;
if (tab[milieu] == parametre) {
trouve = true;
} else if (tab[milieu] > parametre) {
fin = milieu - 1;
} else {
debut = milieu + 1;
}
} while (!trouve && debut <= fin)
Après quelques recherches j'ai trouvé que la dichotomie avait une complexité en log(N). Comment peux-t'on retrouver se résultat ?
Merci d'avance.
-
Archytas
- Habitué(e)
- Messages: 1223
- Enregistré le: 19 Fév 2012, 14:29
-
par Archytas » 19 Avr 2013, 18:19
Salut,
Je me souviens pas très bien mais pars d'un tableau ayant 2^n cases et comte le nombre maximal d'opération effectué (d'ailleurs le résultat est en log_2(n) et non log(n)) !
Voilà !
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 08:03
-
par ampholyte » 19 Avr 2013, 23:25
Oui j'essaye d'appliquer la même méthode que pour le calcul sur d'autres algos mais je ne comprends pas comment est-ce qu'on peut retomber sur log_2(N) (merci pour l'info, j'ai lu log(n) sur un autre site) à partir d'un comptage en fonction de N.
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 13:00
-
par fatal_error » 20 Avr 2013, 07:31
archytas te propose de compter avec 2^N cases.
Dans le pire des cas:
tu divises par 2, 2^(N-1) cases et t'as pas la solution
tu redivises par 2, 2^(N-2) cases et t'as pas la solution
...
2, tu redivises par 2 et t'as plus qu'une ase, tu trouves la solution.
Tu as donc appliqué la division/essai N fois.
tu fais le changement de variables N=log_2(n)
et il vient pour 2^N=2^log_2(n)=n cases, tu appliques l'iteration log_2(n) fois.
idem ton algo est en log_2(n)
la vie est une fête
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 08:03
-
par ampholyte » 20 Avr 2013, 08:30
D'accord merci beaucoup !
Je n'avais pas penser au changer de variable, du coup je comprends mieux =).
Merci encore .
-
LeJeu
- Membre Irrationnel
- Messages: 1141
- Enregistré le: 24 Jan 2010, 22:52
-
par LeJeu » 20 Avr 2013, 08:35
ampholyte a écrit:Oui j'essaye d'appliquer la même méthode que pour le calcul sur d'autres algos mais je ne comprends pas comment est-ce qu'on peut retomber sur log_2(N) (merci pour l'info, j'ai lu log(n) sur un autre site) à partir d'un comptage en fonction de N.
il n'y a pas de distinction à faire entre log_2 et log à propos de complexité d'algorithme
quand on dit qu'un algo est de complexite O( log(n))
cela veut dire que le nombre d'opérations est < C log(n)
ou C est une constante
entre Log_2 et log , il n'y a qu'une différence de constante
( fatal_error et ampholyte te donne la constante)
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 08:03
-
par ampholyte » 20 Avr 2013, 10:13
Merci pour cette précision, c'est noté =).
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 19:42
-
par Rockleader » 20 Avr 2013, 17:37
Au risque de poser une question idiote, qu'est ce que tu entend par complexité ?
(Simple curiosité de ma part).
Votre discussion me rappelle un peu ce que j'avais sur le coût d'un algorithme.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
Archytas
- Habitué(e)
- Messages: 1223
- Enregistré le: 19 Fév 2012, 14:29
-
par Archytas » 20 Avr 2013, 21:38
Salut, la complexité algorithimique est une invention (ou découverte selon les points de vue) de Chaitin.
Complexité algorithmique : La complexité algorithmique d'une sortie informatique est la taille du plus petit programme autodélimité donnant cette sortie. La complexité est comparée à la taille de la sortie. Si la complexité d'une sortie est au moins de l'ordre de sa taille, alors la sortie sera dite algorithmiquement aléatoire.
:++:
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 19:42
-
par Rockleader » 21 Avr 2013, 15:50
Ok, merci pour vos réponses, j'irai voir ça à l'occasion.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 08:03
-
par ampholyte » 24 Avr 2013, 11:43
Petite indication, j'ai trouvé une méthode plus simple pour répondre à ma question principale.
Il vaut mieux écrire en base 2 directement N. La division par 2 provoquant un décalage vers la droite.
Combien de fois peut-on diviser N par 2, autant de fois qu'il y a de bit donc log(N).
Merci encore !
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités