0% ont trouvé ce document utile (0 vote)
59 vues60 pages

Cours 2

Le document présente des concepts fondamentaux sur la composition d'algorithmes et la complexité. Il explique comment éviter la duplication de code en utilisant des fonctions de manière similaire aux mathématiques. Il définit également des notions de complexité comme la complexité linéaire, quadratique et exponentielle.

Transféré par

Olam Kafat
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
59 vues60 pages

Cours 2

Le document présente des concepts fondamentaux sur la composition d'algorithmes et la complexité. Il explique comment éviter la duplication de code en utilisant des fonctions de manière similaire aux mathématiques. Il définit également des notions de complexité comme la complexité linéaire, quadratique et exponentielle.

Transféré par

Olam Kafat
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Cours 2 Composition d’Algorithmes et

Complexité
Conceptes Fondamentaux

Prof Kaninda Musumbu


1 Université de Bordeaux & ESIS - Salama (RDC)

K Musumbu Composition d’Algorithmes


Introduction

Objectif :
Éviter la duplication de code en utilisant un mécanisme
similaire à la composition de fonctions en mathématiques.
Une fonction :
soit “modifie les variables” du programme, soit “retourne un
résultat” ; dans les deux cas, cette fonction peut être utilisée
soit comme une instruction,
soit comme une expression.

K Musumbu Composition d’Algorithmes


Introduction

Objectif :
Éviter la duplication de code en utilisant un mécanisme
similaire à la composition de fonctions en mathématiques.
Une fonction :
soit “modifie les variables” du programme, soit “retourne un
résultat” ; dans les deux cas, cette fonction peut être utilisée
soit comme une instruction,
soit comme une expression.

K Musumbu Composition d’Algorithmes


Introduction

Objectif :
Éviter la duplication de code en utilisant un mécanisme
similaire à la composition de fonctions en mathématiques.
Une fonction :
soit “modifie les variables” du programme, soit “retourne un
résultat” ; dans les deux cas, cette fonction peut être utilisée
soit comme une instruction,
soit comme une expression.

K Musumbu Composition d’Algorithmes


Introduction

Objectif :
Éviter la duplication de code en utilisant un mécanisme
similaire à la composition de fonctions en mathématiques.
Une fonction :
soit “modifie les variables” du programme, soit “retourne un
résultat” ; dans les deux cas, cette fonction peut être utilisée
soit comme une instruction,
soit comme une expression.

K Musumbu Composition d’Algorithmes


Introduction

Objectif :
Éviter la duplication de code en utilisant un mécanisme
similaire à la composition de fonctions en mathématiques.
Une fonction :
soit “modifie les variables” du programme, soit “retourne un
résultat” ; dans les deux cas, cette fonction peut être utilisée
soit comme une instruction,
soit comme une expression.

K Musumbu Composition d’Algorithmes


Complexité

objectifs
Estimer le temps (ou l’espace) requis par l’exécution d’un
algorithme lorsque les données en entrée deviennent très
grandes.

Définitions
Soit T un algorithme et n un entier qui représente la “taille” des
données passées en paramètre à l’algorithme. On note T (n) la
fonction qui associe à la taille n des données le temps (ou
l’espace) requis par l’exécution de T .
T a une complexité dite au pire des cas en O(f (n)) si
∃n0 , ∃c tel que ∀n > n0 , T (n) ≤ c × f (n)
T a une complexité dite au meilleur des cas en Ω(f (n)) si
∃n0 , ∃c tel que ∀n > n0 , T (n) ≥ c × f (n)

K Musumbu Composition d’Algorithmes


Complexité

objectifs
Estimer le temps (ou l’espace) requis par l’exécution d’un
algorithme lorsque les données en entrée deviennent très
grandes.

Définitions
Soit T un algorithme et n un entier qui représente la “taille” des
données passées en paramètre à l’algorithme. On note T (n) la
fonction qui associe à la taille n des données le temps (ou
l’espace) requis par l’exécution de T .
T a une complexité dite au pire des cas en O(f (n)) si
∃n0 , ∃c tel que ∀n > n0 , T (n) ≤ c × f (n)
T a une complexité dite au meilleur des cas en Ω(f (n)) si
∃n0 , ∃c tel que ∀n > n0 , T (n) ≥ c × f (n)

K Musumbu Composition d’Algorithmes


Complexité

objectifs
Estimer le temps (ou l’espace) requis par l’exécution d’un
algorithme lorsque les données en entrée deviennent très
grandes.

Définitions
Soit T un algorithme et n un entier qui représente la “taille” des
données passées en paramètre à l’algorithme. On note T (n) la
fonction qui associe à la taille n des données le temps (ou
l’espace) requis par l’exécution de T .
T a une complexité dite au pire des cas en O(f (n)) si
∃n0 , ∃c tel que ∀n > n0 , T (n) ≤ c × f (n)
T a une complexité dite au meilleur des cas en Ω(f (n)) si
∃n0 , ∃c tel que ∀n > n0 , T (n) ≥ c × f (n)

K Musumbu Composition d’Algorithmes


Complexité

objectifs
Estimer le temps (ou l’espace) requis par l’exécution d’un
algorithme lorsque les données en entrée deviennent très
grandes.

Définitions
Soit T un algorithme et n un entier qui représente la “taille” des
données passées en paramètre à l’algorithme. On note T (n) la
fonction qui associe à la taille n des données le temps (ou
l’espace) requis par l’exécution de T .
T a une complexité dite au pire des cas en O(f (n)) si
∃n0 , ∃c tel que ∀n > n0 , T (n) ≤ c × f (n)
T a une complexité dite au meilleur des cas en Ω(f (n)) si
∃n0 , ∃c tel que ∀n > n0 , T (n) ≥ c × f (n)

K Musumbu Composition d’Algorithmes


Complexité

Complexités classiques
Constante : f (n) = 1
Logarithmique : f (n) = ln(n) ou bien f (n) = log2 (n) ou bien
f (n) = logb (n)
Linéaire : f (n) = n
Quadratique : f (n) = n2
Polynomiale : f (n) = np
p-Exponentielle : f (n) = pn
Factorielle : n!

K Musumbu Composition d’Algorithmes


Complexité

Complexités classiques
Constante : f (n) = 1
Logarithmique : f (n) = ln(n) ou bien f (n) = log2 (n) ou bien
f (n) = logb (n)
Linéaire : f (n) = n
Quadratique : f (n) = n2
Polynomiale : f (n) = np
p-Exponentielle : f (n) = pn
Factorielle : n!

K Musumbu Composition d’Algorithmes


Complexité

Complexités classiques
Constante : f (n) = 1
Logarithmique : f (n) = ln(n) ou bien f (n) = log2 (n) ou bien
f (n) = logb (n)
Linéaire : f (n) = n
Quadratique : f (n) = n2
Polynomiale : f (n) = np
p-Exponentielle : f (n) = pn
Factorielle : n!

K Musumbu Composition d’Algorithmes


Complexité

Complexités classiques
Constante : f (n) = 1
Logarithmique : f (n) = ln(n) ou bien f (n) = log2 (n) ou bien
f (n) = logb (n)
Linéaire : f (n) = n
Quadratique : f (n) = n2
Polynomiale : f (n) = np
p-Exponentielle : f (n) = pn
Factorielle : n!

K Musumbu Composition d’Algorithmes


Complexité

Complexités classiques
Constante : f (n) = 1
Logarithmique : f (n) = ln(n) ou bien f (n) = log2 (n) ou bien
f (n) = logb (n)
Linéaire : f (n) = n
Quadratique : f (n) = n2
Polynomiale : f (n) = np
p-Exponentielle : f (n) = pn
Factorielle : n!

K Musumbu Composition d’Algorithmes


Complexité

Complexités classiques
Constante : f (n) = 1
Logarithmique : f (n) = ln(n) ou bien f (n) = log2 (n) ou bien
f (n) = logb (n)
Linéaire : f (n) = n
Quadratique : f (n) = n2
Polynomiale : f (n) = np
p-Exponentielle : f (n) = pn
Factorielle : n!

K Musumbu Composition d’Algorithmes


Complexité

Complexités classiques
Constante : f (n) = 1
Logarithmique : f (n) = ln(n) ou bien f (n) = log2 (n) ou bien
f (n) = logb (n)
Linéaire : f (n) = n
Quadratique : f (n) = n2
Polynomiale : f (n) = np
p-Exponentielle : f (n) = pn
Factorielle : n!

K Musumbu Composition d’Algorithmes


Complexité

Complexités classiques
Constante : f (n) = 1
Logarithmique : f (n) = ln(n) ou bien f (n) = log2 (n) ou bien
f (n) = logb (n)
Linéaire : f (n) = n
Quadratique : f (n) = n2
Polynomiale : f (n) = np
p-Exponentielle : f (n) = pn
Factorielle : n!

K Musumbu Composition d’Algorithmes


Complexité

Un ordre sur les complexités


Constante < Logarithmique < Linéaire < Quadratique <
Polynomiale < p-Exponentielle < Factorielle.
min(Linéaire, Quadratique) = Linéaire
max(Linéaire, Quadratique) = Quadratique

Propriété
g(n) = O(f (n)) ⇔ f (n) = Ω(g(n))

K Musumbu Composition d’Algorithmes


Complexité

Un ordre sur les complexités


Constante < Logarithmique < Linéaire < Quadratique <
Polynomiale < p-Exponentielle < Factorielle.
min(Linéaire, Quadratique) = Linéaire
max(Linéaire, Quadratique) = Quadratique

Propriété
g(n) = O(f (n)) ⇔ f (n) = Ω(g(n))

K Musumbu Composition d’Algorithmes


Complexité

Un ordre sur les complexités


Constante < Logarithmique < Linéaire < Quadratique <
Polynomiale < p-Exponentielle < Factorielle.
min(Linéaire, Quadratique) = Linéaire
max(Linéaire, Quadratique) = Quadratique

Propriété
g(n) = O(f (n)) ⇔ f (n) = Ω(g(n))

K Musumbu Composition d’Algorithmes


Complexité

Un ordre sur les complexités


Constante < Logarithmique < Linéaire < Quadratique <
Polynomiale < p-Exponentielle < Factorielle.
min(Linéaire, Quadratique) = Linéaire
max(Linéaire, Quadratique) = Quadratique

Propriété
g(n) = O(f (n)) ⇔ f (n) = Ω(g(n))

K Musumbu Composition d’Algorithmes


Complexité

Un ordre sur les complexités


Constante < Logarithmique < Linéaire < Quadratique <
Polynomiale < p-Exponentielle < Factorielle.
min(Linéaire, Quadratique) = Linéaire
max(Linéaire, Quadratique) = Quadratique

Propriété
g(n) = O(f (n)) ⇔ f (n) = Ω(g(n))

K Musumbu Composition d’Algorithmes


Complexité
Définition
Soit T un algorithme et n un entier qui représente la “taille” des
données passées en paramètre à l’algorithme.
T a une complexité dite exacte en Θ(f (n)) si T est d’une
part en O(f (n)) ; d’autre part en Ω(f (n)).

Complexité d’un algorithme


De façon simplifiée, un ordinateur dispose de trois types
d’instructions s’exécutant chacune dans un temps constant.
lecture (LOAD) en temps tlec : c’est le transfert de la
mémoire vers un registre.
calcul en temps tcal : c’est l’évaluation des expressions et
notamment des prédicats.
écriture (SAVE) en temps tecr : c’est le transfert d’un
registre vers la mémoire.
K Musumbu Composition d’Algorithmes
Complexité
Définition
Soit T un algorithme et n un entier qui représente la “taille” des
données passées en paramètre à l’algorithme.
T a une complexité dite exacte en Θ(f (n)) si T est d’une
part en O(f (n)) ; d’autre part en Ω(f (n)).

Complexité d’un algorithme


De façon simplifiée, un ordinateur dispose de trois types
d’instructions s’exécutant chacune dans un temps constant.
lecture (LOAD) en temps tlec : c’est le transfert de la
mémoire vers un registre.
calcul en temps tcal : c’est l’évaluation des expressions et
notamment des prédicats.
écriture (SAVE) en temps tecr : c’est le transfert d’un
registre vers la mémoire.
K Musumbu Composition d’Algorithmes
Complexité
Définition
Soit T un algorithme et n un entier qui représente la “taille” des
données passées en paramètre à l’algorithme.
T a une complexité dite exacte en Θ(f (n)) si T est d’une
part en O(f (n)) ; d’autre part en Ω(f (n)).

Complexité d’un algorithme


De façon simplifiée, un ordinateur dispose de trois types
d’instructions s’exécutant chacune dans un temps constant.
lecture (LOAD) en temps tlec : c’est le transfert de la
mémoire vers un registre.
calcul en temps tcal : c’est l’évaluation des expressions et
notamment des prédicats.
écriture (SAVE) en temps tecr : c’est le transfert d’un
registre vers la mémoire.
K Musumbu Composition d’Algorithmes
Complexité
Définition
Soit T un algorithme et n un entier qui représente la “taille” des
données passées en paramètre à l’algorithme.
T a une complexité dite exacte en Θ(f (n)) si T est d’une
part en O(f (n)) ; d’autre part en Ω(f (n)).

Complexité d’un algorithme


De façon simplifiée, un ordinateur dispose de trois types
d’instructions s’exécutant chacune dans un temps constant.
lecture (LOAD) en temps tlec : c’est le transfert de la
mémoire vers un registre.
calcul en temps tcal : c’est l’évaluation des expressions et
notamment des prédicats.
écriture (SAVE) en temps tecr : c’est le transfert d’un
registre vers la mémoire.
K Musumbu Composition d’Algorithmes
Complexité
Définition
Soit T un algorithme et n un entier qui représente la “taille” des
données passées en paramètre à l’algorithme.
T a une complexité dite exacte en Θ(f (n)) si T est d’une
part en O(f (n)) ; d’autre part en Ω(f (n)).

Complexité d’un algorithme


De façon simplifiée, un ordinateur dispose de trois types
d’instructions s’exécutant chacune dans un temps constant.
lecture (LOAD) en temps tlec : c’est le transfert de la
mémoire vers un registre.
calcul en temps tcal : c’est l’évaluation des expressions et
notamment des prédicats.
écriture (SAVE) en temps tecr : c’est le transfert d’un
registre vers la mémoire.
K Musumbu Composition d’Algorithmes
Complexité
Définition
Soit T un algorithme et n un entier qui représente la “taille” des
données passées en paramètre à l’algorithme.
T a une complexité dite exacte en Θ(f (n)) si T est d’une
part en O(f (n)) ; d’autre part en Ω(f (n)).

Complexité d’un algorithme


De façon simplifiée, un ordinateur dispose de trois types
d’instructions s’exécutant chacune dans un temps constant.
lecture (LOAD) en temps tlec : c’est le transfert de la
mémoire vers un registre.
calcul en temps tcal : c’est l’évaluation des expressions et
notamment des prédicats.
écriture (SAVE) en temps tecr : c’est le transfert d’un
registre vers la mémoire.
K Musumbu Composition d’Algorithmes
Complexité

Le temps mis par l’exécution d’un algorithme est donc :

(]lec × tlec ) + (]cal × tcal ) + (]ecr × tecr )


En général
tlec  tcal  tecr , uneapproximationdutempsestalors(]ecr × tecr )
Dans ce cours, on considérera

tlec  {tcal , tecr },

une approximation du temps est alors

((]cal + ]ecr ) × tecr ).

En complexité, les coefficients multiplicateurs ne sont pas


retenus (ici tecr ).
K Musumbu Composition d’Algorithmes
Complexité

Analyse de complexité en temps


consiste donc à évaluer Tt (n) = (]cal + ]ecr ).

l’espace requis par l’exécution d’un algorithme est donc :

(]data + ]prog + ]aux

Analyse de complexité en espace


consiste à évaluer
Te (n) = (]aux ).

K Musumbu Composition d’Algorithmes


Complexité

Analyse de complexité en temps


consiste donc à évaluer Tt (n) = (]cal + ]ecr ).

l’espace requis par l’exécution d’un algorithme est donc :

(]data + ]prog + ]aux

Analyse de complexité en espace


consiste à évaluer
Te (n) = (]aux ).

K Musumbu Composition d’Algorithmes


Structure de données

Un tableau T : type[n]
est une structure de données qui contient n variables de
même type, chacune accessible par un indice compris
entre 0 et n − 1.
Par exemple T : entier[10] défini un tableau de 10
variables entières T[0], ..., T[9].

K Musumbu Composition d’Algorithmes


Structure de données

Un tableau T : type[n]
est une structure de données qui contient n variables de
même type, chacune accessible par un indice compris
entre 0 et n − 1.
Par exemple T : entier[10] défini un tableau de 10
variables entières T[0], ..., T[9].

K Musumbu Composition d’Algorithmes


Structure de données

Un tableau T : type[n]
est une structure de données qui contient n variables de
même type, chacune accessible par un indice compris
entre 0 et n − 1.
Par exemple T : entier[10] défini un tableau de 10
variables entières T[0], ..., T[9].

K Musumbu Composition d’Algorithmes


Séquence
Algorithme .1 : ComplexiteSequenceInstructions()
]cal,ecr = 4 donc Ω(1), O(1) donc Θ(1)
Lecture1;
Lecture2;
Calcul3; /* 1 */
Ecriture4; /* 1 */
Lecture5;
Calcul6; /* 1 */
Ecriture7; /* 1 */

Algorithme .2 : ComplexiteSequence()
Ω(max(f1 (n), f2 (n), f3 (n))), O(max(g1 (n), g2 (n), g3 (n)))
< S1 >; /* Complexité de S1 : Ω(f1 (n)), O(g1 (n)) */
< S2 >; /* Complexité de S2 : Ω(f2 (n)), O(g2 (n)) */
< S3 >; /* Complexité de S3 : Ω(f3 (n)), O(g3 (n)) */

K Musumbu Composition d’Algorithmes


Boucle “pour”
Algorithme .3 : ComplexiteBouclePourInstructions(T)
Données : T, un tableau de n entiers
]cal,ecr = 2n + 3 donc Ω(n), O(n) donc Θ(n)
n ← longueur(T); /* 1 */
somme ← 0; /* 1 */
pour i=0 à n-1 faire /* 2n */
somme ← somme+T[i]; /* calcul + écriture : 2
*/
retourner somme; /* 1 */

Algorithme .4 : ComplexiteBouclePour(T)
Données : T, un tableau de n entiers
Ω(n f (n)), O(n g(n))
n ← longueur(T); /* Θ(1) */
pour i=0 à n-1 faire /* Ω(n × f (n)), O(n × g(n)) */
< S(T [i]) > ; /* Complexité de S : Ω(f (n)), O(g(n))
*/ K Musumbu Composition d’Algorithmes
Boucle “tant que” et “répéter”

Algorithme .5 : ComplexiteBoucleWhileInstructions(T,X)
Données : T, un tableau de n entiers, X un entier
]cal,ecr = [7..3n + 5] donc Ω(1), O(n)
n ← longueur(T); /* 1 */
i ← 0; /* 1 */
[Link] trouve ← Faux; /* 1 */
tant que non trouve et i<n faire /* [3..3n + 1] */
trouve ← X=T[i]; /* 1 */
i ← i+1; /* 1 */
retourner trouve; /* 1 */

K Musumbu Composition d’Algorithmes


Boucle “tant que” et “répéter”

Algorithme .6 : ComplexiteBoucleWhileSimple(T,X)
Données : T, un tableau de n entiers, X un entier
Ω(f (n)), O(n g(n))
n ← longueur(T); /* Θ(1) */
i ← 0; /* Θ(1) */
trouve ← Faux; /* Θ(1) */
tant que non trouve et i<n faire
/* [1 + f (n)..1 + n × (g(n) + 2)] */
trouve ← < S(T [i]) > ; /* Complexité de S :
Ω(f (n)), O(g(n)) */
i ← i+1; /* Θ(1) */
retourner trouve; /* Θ(1) */

K Musumbu Composition d’Algorithmes


Boucle “tant que” et “répéter”

Algorithme .7 : ComplexiteBoucleWhile(D)
Données : une donnée de taille n
Ω(f (n)), O(?)
P ← Vrai; /* Θ(1) */
tant que P faire
P ← < S(D) > ; /* Complexité de S :
Ω(f (n)), O(g(n)) */
retourner P; /* Θ(1) */

K Musumbu Composition d’Algorithmes


Boucles imbriquées

Il suffit d’appliquer les formules précédentes en substituant


<S> par une boucle. Cela donne naturellement :
2 boucles “pour” simples imbriquées : Θ(n × m) ou bien
Θ(n2 ) si n = m. On parle de complexité “quadratique”.
k boucles “pour” simples imbriquées : Θ( ki ni ) ou bien
Q
Θ(nk ).
2 boucles “tant que” simples imbriquées : Ω(1), O(n m) ou
bien Ω(1), O(n2 ) si n = m.
...

K Musumbu Composition d’Algorithmes


Boucles imbriquées

Il suffit d’appliquer les formules précédentes en substituant


<S> par une boucle. Cela donne naturellement :
2 boucles “pour” simples imbriquées : Θ(n × m) ou bien
Θ(n2 ) si n = m. On parle de complexité “quadratique”.
k boucles “pour” simples imbriquées : Θ( ki ni ) ou bien
Q
Θ(nk ).
2 boucles “tant que” simples imbriquées : Ω(1), O(n m) ou
bien Ω(1), O(n2 ) si n = m.
...

K Musumbu Composition d’Algorithmes


Boucles imbriquées

Il suffit d’appliquer les formules précédentes en substituant


<S> par une boucle. Cela donne naturellement :
2 boucles “pour” simples imbriquées : Θ(n × m) ou bien
Θ(n2 ) si n = m. On parle de complexité “quadratique”.
k boucles “pour” simples imbriquées : Θ( ki ni ) ou bien
Q
Θ(nk ).
2 boucles “tant que” simples imbriquées : Ω(1), O(n m) ou
bien Ω(1), O(n2 ) si n = m.
...

K Musumbu Composition d’Algorithmes


Boucles imbriquées

Il suffit d’appliquer les formules précédentes en substituant


<S> par une boucle. Cela donne naturellement :
2 boucles “pour” simples imbriquées : Θ(n × m) ou bien
Θ(n2 ) si n = m. On parle de complexité “quadratique”.
k boucles “pour” simples imbriquées : Θ( ki ni ) ou bien
Q
Θ(nk ).
2 boucles “tant que” simples imbriquées : Ω(1), O(n m) ou
bien Ω(1), O(n2 ) si n = m.
...

K Musumbu Composition d’Algorithmes


Branchement

Algorithme .8 : ComplexiteBranchement(P)
Données : P un predicat, n taille des données
Ω(min(f1 (n), f2 (n)), O(max(g1 (n), g2 (n)))
si P alors
< S1 > ; /* Complexité de S1 : Ω(f1 (n)), O(g1 (n))
*/
sinon
< S2 > ; /* Complexité de S2 : Ω(f2 (n)), O(g2 (n))
*/

K Musumbu Composition d’Algorithmes


Composition
Il suffit de remarquer que les deux algorithmes suivants
s’exécutent de la même façon.
Algorithme .9 : Maximum3(X,Y,Z)
Données : 3 entiers X, Y et Z
Résultat : Le plus grand des trois
retourner Maximum2(Maximum2(X,Y)Z);

Algorithme .10 : Maximum3Equiv(X,Y,Z)


Données : 3 entiers X, Y et Z
Résultat : Le plus grand des trois
Θ(1)
aux ← Maximum2(X,Y);
retourner Maximum2(aux,Z);

Algorithme .11 : ComplexiteComposition(X)


Données : Une donnée X de taille n
O(max(g2(n),
Ω(max(f 2(n), f 1(aux))),K Musumbu g1(aux)))
Composition d’Algorithmes
Compromis entre temps et espace
Algorithme .13 : ElementPlusFrequentV1(T)
Données : Un tableau T d’entiers naturels
Résultat : La valeur la plus fréquente, et son nombre
d’occurrences
Θ(n2 ) en temps, Θ(1) en espace
n ← longueur(T);
si n>0 alors /* Θ(n2 ) */
nbMax ← 0;
pour i=0 à n-1 faire /* Θ(n2 ) */
cpt ← 0;
pour j=0 à n-1 faire /* Θ(n) */
si T[i]=T[j] alors /* Θ(1) */
cpt ← cpt+1;
si cpt>nbMax alors /* Θ(1) */
nbMax ← cpt;
eltMax ← T[i];
K Musumbu Composition d’Algorithmes
Techniques d’évaluation de la complexité

Deux techniques principales :


Appliquer pour chaque structure de contrôle les résultats
de complexité, en commençant par les structures les plus
imbriquées.
Relations de récurrences :
T (n + 1) = T (n), complexité constante en 1.
T (b × n) = T (n) + c, (avec c > 0), complexité
logarithmique en logb (n) ≡ log2 (n) ≡ ln(n).
T (n + 1) = T (n) + c, (avec c > 0), complexité linéaire en n.
T (n + 1) = T (n) + ak nk + ak −1 nk −1 + · · · + a0 , (avec
ak > 0), complexité polynomiale en nk +1 .
T (n + 1) = c × T (n), (avec c > 0), complexité exponentielle
cn.
T (n + 1) = (n + 1) × T (n), complexité factorielle n!.
Attention aux Retourner en milieu de boucle, qui rendent
plus difficile le calcul de la complexité.

K Musumbu Composition d’Algorithmes


Techniques d’évaluation de la complexité

Deux techniques principales :


Appliquer pour chaque structure de contrôle les résultats
de complexité, en commençant par les structures les plus
imbriquées.
Relations de récurrences :
T (n + 1) = T (n), complexité constante en 1.
T (b × n) = T (n) + c, (avec c > 0), complexité
logarithmique en logb (n) ≡ log2 (n) ≡ ln(n).
T (n + 1) = T (n) + c, (avec c > 0), complexité linéaire en n.
T (n + 1) = T (n) + ak nk + ak −1 nk −1 + · · · + a0 , (avec
ak > 0), complexité polynomiale en nk +1 .
T (n + 1) = c × T (n), (avec c > 0), complexité exponentielle
cn.
T (n + 1) = (n + 1) × T (n), complexité factorielle n!.
Attention aux Retourner en milieu de boucle, qui rendent
plus difficile le calcul de la complexité.

K Musumbu Composition d’Algorithmes


Techniques d’évaluation de la complexité

Deux techniques principales :


Appliquer pour chaque structure de contrôle les résultats
de complexité, en commençant par les structures les plus
imbriquées.
Relations de récurrences :
T (n + 1) = T (n), complexité constante en 1.
T (b × n) = T (n) + c, (avec c > 0), complexité
logarithmique en logb (n) ≡ log2 (n) ≡ ln(n).
T (n + 1) = T (n) + c, (avec c > 0), complexité linéaire en n.
T (n + 1) = T (n) + ak nk + ak −1 nk −1 + · · · + a0 , (avec
ak > 0), complexité polynomiale en nk +1 .
T (n + 1) = c × T (n), (avec c > 0), complexité exponentielle
cn.
T (n + 1) = (n + 1) × T (n), complexité factorielle n!.
Attention aux Retourner en milieu de boucle, qui rendent
plus difficile le calcul de la complexité.

K Musumbu Composition d’Algorithmes


Techniques d’évaluation de la complexité

Deux techniques principales :


Appliquer pour chaque structure de contrôle les résultats
de complexité, en commençant par les structures les plus
imbriquées.
Relations de récurrences :
T (n + 1) = T (n), complexité constante en 1.
T (b × n) = T (n) + c, (avec c > 0), complexité
logarithmique en logb (n) ≡ log2 (n) ≡ ln(n).
T (n + 1) = T (n) + c, (avec c > 0), complexité linéaire en n.
T (n + 1) = T (n) + ak nk + ak −1 nk −1 + · · · + a0 , (avec
ak > 0), complexité polynomiale en nk +1 .
T (n + 1) = c × T (n), (avec c > 0), complexité exponentielle
cn.
T (n + 1) = (n + 1) × T (n), complexité factorielle n!.
Attention aux Retourner en milieu de boucle, qui rendent
plus difficile le calcul de la complexité.

K Musumbu Composition d’Algorithmes


Techniques d’évaluation de la complexité

Deux techniques principales :


Appliquer pour chaque structure de contrôle les résultats
de complexité, en commençant par les structures les plus
imbriquées.
Relations de récurrences :
T (n + 1) = T (n), complexité constante en 1.
T (b × n) = T (n) + c, (avec c > 0), complexité
logarithmique en logb (n) ≡ log2 (n) ≡ ln(n).
T (n + 1) = T (n) + c, (avec c > 0), complexité linéaire en n.
T (n + 1) = T (n) + ak nk + ak −1 nk −1 + · · · + a0 , (avec
ak > 0), complexité polynomiale en nk +1 .
T (n + 1) = c × T (n), (avec c > 0), complexité exponentielle
cn.
T (n + 1) = (n + 1) × T (n), complexité factorielle n!.
Attention aux Retourner en milieu de boucle, qui rendent
plus difficile le calcul de la complexité.

K Musumbu Composition d’Algorithmes


Techniques d’évaluation de la complexité

Deux techniques principales :


Appliquer pour chaque structure de contrôle les résultats
de complexité, en commençant par les structures les plus
imbriquées.
Relations de récurrences :
T (n + 1) = T (n), complexité constante en 1.
T (b × n) = T (n) + c, (avec c > 0), complexité
logarithmique en logb (n) ≡ log2 (n) ≡ ln(n).
T (n + 1) = T (n) + c, (avec c > 0), complexité linéaire en n.
T (n + 1) = T (n) + ak nk + ak −1 nk −1 + · · · + a0 , (avec
ak > 0), complexité polynomiale en nk +1 .
T (n + 1) = c × T (n), (avec c > 0), complexité exponentielle
cn.
T (n + 1) = (n + 1) × T (n), complexité factorielle n!.
Attention aux Retourner en milieu de boucle, qui rendent
plus difficile le calcul de la complexité.

K Musumbu Composition d’Algorithmes


Techniques d’évaluation de la complexité

Deux techniques principales :


Appliquer pour chaque structure de contrôle les résultats
de complexité, en commençant par les structures les plus
imbriquées.
Relations de récurrences :
T (n + 1) = T (n), complexité constante en 1.
T (b × n) = T (n) + c, (avec c > 0), complexité
logarithmique en logb (n) ≡ log2 (n) ≡ ln(n).
T (n + 1) = T (n) + c, (avec c > 0), complexité linéaire en n.
T (n + 1) = T (n) + ak nk + ak −1 nk −1 + · · · + a0 , (avec
ak > 0), complexité polynomiale en nk +1 .
T (n + 1) = c × T (n), (avec c > 0), complexité exponentielle
cn.
T (n + 1) = (n + 1) × T (n), complexité factorielle n!.
Attention aux Retourner en milieu de boucle, qui rendent
plus difficile le calcul de la complexité.

K Musumbu Composition d’Algorithmes


Techniques d’évaluation de la complexité

Deux techniques principales :


Appliquer pour chaque structure de contrôle les résultats
de complexité, en commençant par les structures les plus
imbriquées.
Relations de récurrences :
T (n + 1) = T (n), complexité constante en 1.
T (b × n) = T (n) + c, (avec c > 0), complexité
logarithmique en logb (n) ≡ log2 (n) ≡ ln(n).
T (n + 1) = T (n) + c, (avec c > 0), complexité linéaire en n.
T (n + 1) = T (n) + ak nk + ak −1 nk −1 + · · · + a0 , (avec
ak > 0), complexité polynomiale en nk +1 .
T (n + 1) = c × T (n), (avec c > 0), complexité exponentielle
cn.
T (n + 1) = (n + 1) × T (n), complexité factorielle n!.
Attention aux Retourner en milieu de boucle, qui rendent
plus difficile le calcul de la complexité.

K Musumbu Composition d’Algorithmes


Pile d’exécution et passages de paramètres

Contenu et rôle d’une pile d’exécution


Pour l’algorithme appelé :
le nom de l’algorithme.
la valeur du compteur ordinal correspondant au “début de
programme”.
la liste des valeurs des variables passées en paramètres.

K Musumbu Composition d’Algorithmes


Pile d’exécution et passages de paramètres

Contenu et rôle d’une pile d’exécution


Pour l’algorithme appelé :
le nom de l’algorithme.
la valeur du compteur ordinal correspondant au “début de
programme”.
la liste des valeurs des variables passées en paramètres.

K Musumbu Composition d’Algorithmes


Pile d’exécution et passages de paramètres

Contenu et rôle d’une pile d’exécution


Pour l’algorithme appelé :
le nom de l’algorithme.
la valeur du compteur ordinal correspondant au “début de
programme”.
la liste des valeurs des variables passées en paramètres.

K Musumbu Composition d’Algorithmes


Pile d’exécution et passages de paramètres

Contenu et rôle d’une pile d’exécution


Pour l’algorithme appelé :
le nom de l’algorithme.
la valeur du compteur ordinal correspondant au “début de
programme”.
la liste des valeurs des variables passées en paramètres.

K Musumbu Composition d’Algorithmes


Exemple

Algorithme .17 : EvolutionPileExecution()


Données : Une liste de prédicats
Résultat : La branche exécutée
v1 ← . . . ;
v2 ← . . . ;
v3 ← Algorithme(v1);
v4 ← . . . ;
v2 ← . . . ;
v4 ← Algorithme(v2);
v2 ← . . . ;
v3 ← Algorithme(v2);

K Musumbu Composition d’Algorithmes

Vous aimerez peut-être aussi