Ilovepdf Merged
Ilovepdf Merged
Matière:
Algorithmique avancée
et complexité
Cours n° 03
1
Matière: Algorithmique avancé et complexité
(AAC)
Programme de la matière :
1- Introduction à la complexité algorithmique et notions préliminaires
2- Analyse de la complexité temporelle
3- Structures de données et complexité
1. Listes chainée,
2. Structures de données hiérarchiques
1. arbres,
2. graphes,
3. tas.
3. opérations courantes et complexité associée.
4- Techniques d'analyse de complexité
5- Complexité spatiale
6- Complexité et Preuve de Correction
7- Optimisation d'algorithmes
2
3- Structures de données et complexité
1. Listes chainée
Une liste chaînée est une structure de données dynamique composée de nœuds.
Chaque nœud contient :
→ une donnée
→ un lien vers le suivant
Contrairement aux tableaux, les éléments ne sont pas contigus en mémoire.
3
3- Structures de données et complexité
1. Listes chainée
Types principaux :
1. Simplement chaînée :
chaque nœud pointe vers le suivant.
2. Doublement chaînée :
chaque nœud pointe vers le suivant
et le précédent.
3. Circulaire :
le dernier nœud pointe vers le premier.
4
3- Structures de données et complexité
1. Listes chainée
5
3- Structures de données et complexité
1. Listes chainée
6
3- Structures de données et complexité
2. vs structures de données hiérarchiques
Exemple 1:
- Organisation du système de fichiers d’un ordinateur est arborescente. Les
fichiers sont organisés de manière hiérarchique à partir d’une racine, à laquelle
peuvent être rattachés des répertoires (dossiers) et des fichiers, les répertoire
pouvant eux-mêmes de manière récursive contenir d’autres répertoire et/ou
fichiers.
7
3- Structures de données et complexité
2. vs structures de données hiérarchiques
Exemple 2:
- Le DOM (Document Object Model) modèle objet de document du langage
HTML représente un document web de manière structurée sous forme d’un
arbre hiérarchique
8
3- Structures de données et complexité
2. vs structures de données hiérarchiques
9
3- Structures de données et complexité
2. vs structures de données hiérarchiques
Structure non-linéaire /
Critère Structure linéaire
hiérarchique
Hiérarchique ou réseau,
1. Organisation des données Séquentielle (ordre strict)
relations multiples
Plusieurs niveaux, souvent
2. Niveaux Un seul niveau
arborescents
Plus sophistiquée, nécessite
3. Implémentation Simple, intuitive
des algorithmes spécifiques
Utilisation d’algorithmes
4. Parcours / Traversée Parcours direct (boucle unique)
spécialisés (DFS, BFS…)
Moins efficace, nécessite
5. Utilisation de la mémoire Plus efficace, flexibilité accrue
souvent un espace contigu
Array, Stack, Queue, Linked Arbres (Tree), Graphes
6. Exemples
List (Graph)
Intelligence artificielle,
Développement d’applications
7. Applications typiques traitement d’image, systèmes
simples, workflows séquentiels
complexes
10
1. Structures
de données linéaires
vs structures de données hiérarchiques
2. Arbre
Un arbre est une structure de données hiérarchique non linéaire, composée de
nœuds reliés entre eux par des arêtes, selon une organisation arborescente. Elle est
fondée sur un principe parent-enfant, avec un unique chemin entre deux nœuds
donnés
Vocabulaire essentiel
1. Racine : nœud initial sans parent
2. Nœud interne : nœud disposant d’au moins un enfant
3. Feuille (ou nœud externe/terminal) : nœud sans enfants
4. Parent / enfant : relation directe ascendante / descendante entre deux
nœuds reliés
5. Frères (siblings) : nœuds partageant le même parent
6. Sous-arbre : région de l’arbre ayant pour racine un nœud quelconque avec
tous ses descendants
Propriétés structurelles
1. Chaque nœud, sauf la racine, a exactement un parent
2. Il n’existe aucun cycle : c’est une structure acyclique
3. L’arbre est souvent représenté graphiquement avec la racine en haut,
descendant en branches
11
1. Structures de données linéaires
vs structures de données hiérarchiques
2. Arbre
Terminologie quantitative
1. Profondeur (depth) d’un nœud : nombre d’arêtes entre la racine et ce nœud.
•Le nœud 5 est donc de profondeur « 0 »,
•Les nœuds 1 et 3 de profondeur « 1 »
•Les nœuds 4, 2, 6 et 7 de profondeur « 2 ».
2. Hauteur (height) d’un arbre: Est la profondeur maximale de ses feuilles
• La hauteur de cet arbre est « 2 »
3. Arity (arité) : nombre maximum d’enfants autorisés par nœud (ex. un arbre
binaire a une arité de 2) et dans cet arbre: 3
4. Taille : nombre total de nœuds de l’arbre: 7 nœuds
5. Définition récursive
6. Degré d'un nœud:Est égal au nombre de ses fils
•Le nœud 5 est de degré « 2 ».
•Le nœud 1 de degré « 1 ».
•Le nœud 3 de degré « 3 ».
•Les feuilles (4,2,6,7) de degré « 0 ».
Définition récursive
1. Un arbre peut être défini de manière récursive :
2. Un arbre vide,
3. Ou un nœud racine accompagné d'une liste (ou ensemble) de sous-arbres
12
1. Structures
de données linéaires
vs structures de données hiérarchiques
2. Arbre
Représentation d’un arbre :
La structure générale des nœuds d’un arbre est
illustré à la figure ci-après:
13
1. Structuresde données linéaires
vs structures de données hiérarchiques
2. Arbre
Le passage d'un arbre n-aire à un arbre
binaire:
Prochaine séance
14
Université Tahri Mohamed de Béchar
Faculté des sciences exactes
Département des Mathématiques et Informatique
1ère année Master (Intelligence Artificielle - Réseaux et Systèmes Distribués)
Matière:
Algorithmique avancée
et complexité
Cours n° 04
1
Matière: Algorithmique avancé et complexité
(AAC)
Programme de la matière :
1- Introduction à la complexité algorithmique et notions préliminaires
2- Analyse de la complexité temporelle
3- Structures de données et complexité
1. listes,
2. arbres,
3. graphes,
4. tas.
5. opérations courantes et complexité associée.
4- Techniques d'analyse de complexité
5- Complexité spatiale
6- Complexité et Preuve de Correction
7- Optimisation d'algorithmes
2
3. Les arbres binaires
Introduction: Il existe de nombreux types d'arbres
dans le domaine des structures de données. Voici
quelques-uns des types d'arbres les plus courants :
1. Arbres binaires
2. Arbres de recherche binaire
3. Arbres généalogiques
4. Arbres d'expression
4
3. Les arbres binaires
5
3. Les arbres binaires
4.4. Arbres d'expression : Les arbres d'expression sont utilisés pour représenter des
expressions mathématiques ou arithmétiques.
L’arbre est hétérogène, le genre d’information est pas le même sur chaque nœud (opérateur,
opérande).
Les feuilles contiennent les opérandes,
Les nœuds internes contiennent les opérateurs.
Ils permettent l'évaluation et la simplification des expressions.
Exemple:
Voici l’expression suivante :
(2*3+5)*(10*10+9*9)
6
3. Les arbres binaires
7
3. Les arbres binaires: Parcours
Utilisation:
8
3. Les arbres binaires: Parcours
A-1- Parcours Préfixe (Preorder Traversal) : (RGD)
Algorithme : L’ approche de parcours présenté est récursive utilisant une pile
d'appels système pour garder une trace des nœuds à visiter ensuite. C'est une
méthode simple et directe, mais elle peut entraîner des erreurs de débordement de
pile si l'arborescence est très profonde.
def recursive_pre_order_traverse (node):
if node is None:
return
node. visit ()
recursive_pre_order_traverse (node . left)
recursive_pre_order_traverse (node. right)
Oú
class Node:
def _init__ (self, key) :
self.key = key
self.left = None
self. right = None
def visit (self):
print (self . key , end=" ")
9
3. Les arbres binaires: Parcours
10
3. Les arbres binaires: Parcours
Représentation schématique :
11
3. Les arbres binaires: Parcours
12
3. Les arbres binaires: Parcours
Utilisation:
1. Affichage trié :
produit une séquence triée des éléments.
2. Validation de l'expression arithmétique :
récupérer l'expression dans l'ordre correct.
13
3. Les arbres binaires: Parcours
14
3. Les arbres binaires: Parcours
15
3. Les arbres binaires: Parcours
Exemple: Z=3x+1
Représentation schématique :
16
3. Les arbres binaires: Parcours
17
3. Les arbres binaires: Parcours
A-3- Parcours Postfixe (Postorder Traversal):
Visitez le sous-arbre gauche G
Visitez le sous-arbre droit D
Traitez le nœud courant R
Utilisation:
19
3. Les arbres binaires: Parcours
20
3. Les arbres binaires: Parcours
1 - (y)(+)=
2 - y(/)(z)+=
3 - y(+)(6)/z+=
4 - y(x)(y)+6/+=
21
Université Tahri Mohamed de Béchar
Faculté des sciences exactes
Département des Mathématiques et Informatique
1ère année Master (Intelligence Artificielle - Réseaux et Systèmes Distribués)
Matière:
Algorithmique avancée
et complexité
Cours n° 06
1
Matière: Algorithmique avancé et complexité
(AAC)
Programme de la matière :
1- Introduction à la complexité algorithmique et notions préliminaires
2- Analyse de la complexité temporelle
3- Structures de données et complexité
1. listes,
2. arbres,
3. graphes,
4. tas.
5. opérations courantes et complexité associée.
4- Techniques d'analyse de complexité
5- Complexité spatiale
6- Complexité et Preuve de Correction
7- Optimisation d'algorithmes
2
Les graphes
1.Définitions
Les graphes: Un graphe est une structure de données qui permet de
représenter des objets et des relations entre eux. Un graphe est composé
de sommets (ou nœuds) et d’arêtes (ou arcs) qui relient les sommets,
c'est-à-dire, Le graphe G = (V, E), où V représente l'ensemble des sommets
et E représente l'ensemble des arêtes.
4
Les graphes
1.Définitions : types de graphes
-Il existe deux types de graphes : les graphes non orientés et
les graphes orientés.
2. Graphe orienté:
Les arêtes ont un sens, c’est-à-dire
qu’on ne peut parcourir une arête
que dans une seule direction.
On représente les arêtes orientées
par des flèches.
Le digraphe représenté à la figure comporte six sommets et huit
arêtes dirigées :
V = {a, b, c, d, e, f },
E = {(a, c), (b, c), (b, f), (c, e), (d, a), ( d, e), (e, c), (e, f)}
Cardinalité : V =N =6 ; E = M =8
5
Les graphes
1.Définitions
Les graphes:
1. Un réseau social: Est une plateforme numérique en ligne ou un
service pour modéliser les relations sociales entre les individus.
De tels graphes
permettent ainsi aux sites
de réseaux sociaux de
vous proposer de
nouveaux contacts en
fonction de vos envies et
de vos connaissances.
D’après le diagramme
précédent, quelle visite
pourrait-on conseiller à
Bob ?
9
Les graphes
1.Définitions
Les graphes: Après avoir vu les notions des graphes revenons à les voir
dans l’exemple de réseau social
Conclusion: Ces concepts clés dans les réseaux sociaux fournissent une
perspective structurée pour comprendre les relations, les influences et les
dynamiques au sein de ces espaces interconnectés.
10
Les graphes
2.Représentation des graphes
11
Les graphes
2.Représentation des graphes
14
Les graphes
2.Représentation des graphes
➢Représentation d'un graphe :
3. Représentation chaînée : Les nœuds et les arcs seront codés
sous forme d'enregistrement, avec gestion dynamique de la mémoire.
15
Les graphes
2.Représentation des graphes
➢Représentation d'un graphe :
3. Représentation chaînée :
Exemple:
17
Les graphes
3.Parcours des graphes
➢Parcours des graphes :
1- Parcours en largeur (Breadth-first Search : BFS)
18
Les graphes
3.Parcours des graphes
➢Parcours des graphes :
1- Parcours en largeur (Breadth-first Search : BFS)
1. Commencez par n'importe
quel nœud, marquez-le
comme visité, et ajoutez-le à
la file d'attente.
2. Tant que la file d'attente n'est
pas vide :
a) Retirez le nœud en tête de la
file d'attente (défilement ou
dépilement).
b) Explorez tous les nœuds
adjacents non visités du nœud
actuel.
c) Marquez chaque nœud
adjacent comme visité et
ajoutez-le à la file d'attente.
3. Répétez les étapes 2a à 2c
jusqu'à ce que la file d'attente
soit vide.
19
Les graphes
3.Parcours des graphes
➢Parcours des graphes :
1- Parcours en largeur (Breadth-first Search : BFS)
Exemple: Soit le graphe suivant
Ainsi sa matrice d’adjacence
Question; Trouver la séquence de parcours
Avec le parcours BFS
20
Les graphes
3.Parcours des graphes
➢Parcours des graphes :
1- Parcours en largeur (Breadth-first Search : BFS)
Exemple: Soit le graphe suivant
Ainsi sa matrice d’adjacence
v6 0 0 0 1 1 0
24
Les graphes
3.Parcours des graphes
➢Parcours des graphes :
1- Parcours en largeur (Depth-first Search : DFS)
Exemple: Soit le graphe suivant Som v1 v2 v3 v4 v5 v6
m
Ainsi sa matrice d’adjacence
v1 0 1 1 0 0 0
v2 1 0 1 1 1 0
v3 1 1 0 1 1 0
v4 0 1 1 0 1 1
v5 0 1 1 1 0 1
la séquence de parcours
v6
est : v1, v2, v3, v4, v5,
1
v6
0 0 0 1 0
25
Les graphes
3.Parcours des graphes : complexités
➢Parcours des graphes :Complexité Dans le pire des cas
Le graphe possède:
V : nbre de sommets
E : nbre d’ arêtes
Complexité en temps
Parcours Matrice Matrice
Incidence d’adjacence
Parcours en profondeur : O(V . E) O(V2)
Depth-first Search : DFS
Parcours en largeur : O(V . E) O(V2)
Breadth-first Search : BFS
chaque sommet du graphe doit être visité une fois
chaque arête du graphe doit être examinée une fois
26
Université Tahri Mohamed de Béchar
Faculté des sciences exactes
Département des Mathématiques et Informatique
1ère année Master (Intelligence Artificielle - Réseaux et Systèmes Distribués)
Matière:
Algorithmique avancée
et complexité
Cours n° 01
Enseignant : Benyamina Ahmed
1
Matière: Algorithmique avancé et complexité
(AAC)
Programme de la matière :
1- Introduction à la complexité algorithmique et notions préliminaires
2- Analyse de la complexité temporelle
3- Structures de données et complexité
4- Techniques d'analyse de complexité
5- Complexité spatiale
6- Complexité et Preuve de Correction
7- Optimisation d'algorithmes
2
Références bibliographiques
3
Matière: Algorithmique avancé et complexité
(AAC)
Programme de la matière :
1- Introduction à la complexité algorithmique et notions
préliminaires
• Définition d'algorithme et d’algorithmique.
• Notion de problème algorithmique et sa résolution.
• Pourquoi analyser la complexité ? Comparaison d'algorithmes pour un même problème.
• Notions de base et types de complexité : temporelle et spatiale.
2- Analyse de la complexité temporelle
3- Structures de données et complexité
4- Techniques d'analyse de complexité
5- Complexité spatiale
6- Complexité et Preuve de Correction
7- Optimisation d'algorithmes
4
1- Introduction à la complexité algorithmique et notions
préliminaires
- Définition d'algorithme et d’algorithmique
5
1- Introduction à la complexité algorithmique et notions
préliminaires
- Définition d'algorithme et d’algorithmique
6
1- Introduction à la complexité algorithmique et notions
préliminaires
- Notion de problème algorithmique et sa résolution
1. Qu’est-ce qu’un problème algorithmique ?
Un problème algorithmique est une question bien définie, caractérisée par trois
éléments :
7
1- Introduction à la complexité algorithmique et notions
préliminaires
- Notion de problème algorithmique et sa résolution
2. Résolution d’un problème algorithmique:
Résoudre un problème ne signifie pas seulement écrire “un” algorithme, mais suivre
une démarche précise :
Exemple : pour trier une liste, le tri à bulles est correct mais coûteux (O(n²)),
tandis que le tri rapide est plus efficace (O(n log n)).
8
1- Introduction à la complexité algorithmique et notions
préliminaires
- Notion de problème algorithmique et sa résolution
3. Paradigmes de conception:
En algorithmique avancée, on classe les algorithmes selon des paradigmes, c’est-à-
dire des philosophies de résolution. Chaque paradigme regroupe une famille de
méthodes adaptées à certains types de problèmes.
9
1- Introduction à la complexité algorithmique et notions
préliminaires
- Pourquoi analyser la complexité ? Comparaison d'algorithmes pour un même problème
10
1- Introduction à la complexité algorithmique et notions
préliminaires
- Pourquoi analyser la complexité ? Comparaison d'algorithmes pour un même problème
2. Pourquoi l’analyser ?
Exemple :
11
1- Introduction à la complexité algorithmique et notions
préliminaires
- Pourquoi analyser la complexité ? Comparaison d'algorithmes pour un même problème
Si n = 1 000 000 :
Recherche linéaire → jusqu’à 1 000 000 comparaisons.
Recherche binaire → environ 20 comparaisons seulement.
12
1- Introduction à la complexité algorithmique et notions
préliminaires
- Notions de base et types de complexité : temporelle et spatiale
2. Complexité temporelle
Elle dépend de :
1. la taille de l’entrée (n),
2. la structure de l’algorithme (boucles, récursions, etc.).
Exemple :
13
1- Introduction à la complexité algorithmique et notions
préliminaires
- Notions de base et types de complexité : temporelle et spatiale
3. Complexité spatiale
Elle inclut :
1. les variables utilisées,
2. les structures de données temporaires,
3. la mémoire des appels récursifs.
Exemple :
14
1- Introduction à la complexité algorithmique et notions
préliminaires
- Notions de base et types de complexité : temporelle et spatiale
Exemple concret :
15
Université Tahri Mohamed de Béchar
Faculté des sciences exactes
Département des Mathématiques et Informatique
1ère année Master (Intelligence Artificielle - Réseaux et Systèmes Distribués)
Matière:
Algorithmique avancée
et complexité
Cours n° 05
1
Matière: Algorithmique avancé et complexité
(AAC)
Programme de la matière :
1- Introduction à la complexité algorithmique et notions préliminaires
2- Analyse de la complexité temporelle
2
5. Arbre binaire de recherche
1. Définition
30 80
12 60 90
3
3
5. Arbre binaire de recherche
3. Représentation mémoire
Comme tout arbre binaire, un BST peut être représenté : 75
30 80
En mémoire par pointeurs :
12 60 90
3
4
5. Arbre binaire de recherche
3. Représentation mémoire 75
5
5. Arbre binaire de recherche
2. Opérations sur les arbres binaires de recherche
6
5. Arbre binaire de recherche
2. Opérations sur les arbres binaires de recherche
1. Gérer la multiplicité des éléments
Signification :
Dans un arbre binaire de recherche, chaque nœud représente une valeur
unique. Cependant, il arrive qu’une même valeur apparaisse plusieurs fois
dans les données (par exemple plusieurs fois le nombre 15).
Pour éviter de créer plusieurs nœuds identiques, on ajoute à chaque nœud un
champ supplémentaire appelé compteur ou fréquence.
Rôle de ce champ :
Il indique combien de fois cette valeur a été insérée.
Cela simplifie la structure de l’arbre et évite la duplication de branches
inutiles.
Exemple :
Si l’on insère la valeur 10 trois fois, le nœud correspondant à 10 aura :
valeur = 10
fréquence = 3
Ainsi, on sait qu’il y a trois occurrences de la valeur 10 dans l’arbre sans
multiplier les nœuds. 7
5. Arbre binaire de recherche
2. Opérations sur les arbres binaires de recherche
2. Insérer un nouvel élément
Signification :
L’insertion dans un arbre binaire de recherche suit une règle d’ordre :
Si la nouvelle valeur est inférieure à celle du nœud courant, on descend dans le sous-
arbre gauche.
Si elle est supérieure, on descend dans le sous-arbre droit.
On répète cette comparaison récursivement jusqu’à trouver un pointeur nul.
C’est à cet endroit précis que l’on crée le nouveau nœud.
Exemple :
Si l’arbre contient :
et qu’on veut insérer 6 :
➡ on compare 6 avec 8 → plus petit → on va à gauche.
➡ on compare 6 avec 3 → plus grand → on va à droite.
➡ le pointeur droit de 3 est NULL → on insère 6 à cet emplacement.
Résultat :
8
5. Arbre binaire de recherche
2. Opérations sur les arbres binaires de recherche
3. Retrouver l’ordre des éléments
Signification :
Un parcours infixe permet d’extraire les valeurs de l’arbre dans l’ordre croissant.
Le principe consiste à visiter les nœuds dans cet ordre :
Le sous-arbre gauche,
Le nœud courant,
Le sous-arbre droit.
Pourquoi cela fonctionne ?
Parce qu’un arbre binaire de recherche est structuré de manière à ce que :
Toutes les valeurs du gauche soient inférieures à la racine,
Toutes celles du droit soient supérieures.
Le parcours infixe respecte donc naturellement l’ordre croissant.
Exemple :
Parcours infixe → 1, 2, 3, 5, 8, 9
→ Les valeurs apparaissent triées automatiquement.
9
5. Arbre binaire de recherche
2. Algorithme de recherche d’un élément :
La recherche d’un élément dans un arbre binaire de recherche est très facile si on
profite du caractère récursif d’un arbre binaire.
Programme de recherche dans un arbre binaire de recherche en Python
# Définition d'un nœud d'arbre binaire
class Noeud:
def __init__(self, data):
self.data = data
self.gauche = None
self.droit = None
# Fonction de recherche récursive
def Chercher(P, X):
if P is None: # Cas de base : l'arbre (ou la sous-branche) est vide
return 0
else:
if P.data == X: # Si l'élément courant correspond à X
return 1
elif X < P.data: # Si X est plus petit → aller à gauche
return Chercher(P.gauche, X)
else: # Sinon → aller à droite
return Chercher(P.droit, X)
10
5. Arbre binaire de recherche
2. Algorithme d’insertion d’un élément :
L’élément à ajouter est inséré là où on l’aurait trouvé s’il avait été présent dans
l’arbre. L’algorithme d’insertion recherche donc l’élément dans l’arbre et, quand il
aboutit à la conclusion que l’élément n’appartient pas à l’arbre (il aboutit à la terre), il
insère l’élément comme fils du dernier noeud visité.
11
5. Arbre binaire de recherche
2. Algorithme d’insertion d’un élément :
Programme d’insertion d’un élément dans un arbre binaire de recherche
# Fonction d'insertion récursive
def Inserer(P, X):
# Si l'arbre est vide, on crée un nouveau nœud pour X
if P is None:
return Noeud(X)
return P
12
5. Arbre binaire de recherche
2. Algorithme de suppression d’un élément :
La suppression d’un élément est plus compliquée que l’insertion, car si cet élément
est un père à qui confier ses fils ?
Il existe trois cas possibles :
13
5. Arbre binaire de recherche
2. Algorithme de suppression d’un élément :
1er cas : l’élément à supprimer n’a pas de fils il est terminal et il suffit de le
supprimer
Exemple : Suppression du nœud 13
14
5. Arbre binaire de recherche
2. Algorithme de suppression d’un élément :
2ème cas : l’élément a un fils unique on supprime le nœud et on relie son fils à son
père
Exemple : Suppression du nœud 16
15
5. Arbre binaire de recherche
2. Algorithme de suppression d’un élément :
3ème cas : l’élément à supprimer a deux fils on le remplace par son successeur qui
est toujours le minimum de ses descendants droits.
Exemple : Suppression du nœud 5
16
5. Arbre binaire de recherche
4. Complexités des opérations dans l’arbre binaire de recherche
Complexités
1. Complexité générale : O(h)
→ La complexité d’une opération dans un arbre binaire de recherche dépend
de la hauteur de l’arbre (h), car il faut au maximum parcourir un chemin
allant de la racine jusqu’à une feuille. Figure 1 : O(h) = O(2)
2. Arbre équilibré : O(log n)
→ Lorsque l’arbre est équilibré, sa hauteur est proportionnelle au logarithme
du nombre de nœuds, ce qui permet d’effectuer les opérations de recherche,
d’insertion ou de suppression très efficacement. figure 2 : O(log2(n)) =
O(log2(10)) ≈ O(3,3)
3. Arbre dégénéré : O(n)
→ Si l’arbre est déséquilibré (chaîne linéaire), sa hauteur devient égale au
nombre total de nœuds, rendant les opérations aussi coûteuses qu’un
parcours de liste. Figure 3 : O(n) = O(7)
1 2 3
17
Université Tahri Mohamed de Béchar
Faculté des sciences exactes
Département des Mathématiques et Informatique
1ère année Master (Intelligence Artificielle - Réseaux et Systèmes Distribués)
Matière:
Algorithmique avancée
et complexité
Cours n° 02
1
Matière: Algorithmique avancé et complexité
(AAC)
Programme de la matière :
1- Introduction à la complexité algorithmique et notions préliminaires
2- Analyse de la complexité temporelle
1. Notation de Landau (grand O )
2. Classification des algorithmes
3. Règles de calcul sur les O(n) :
4. Temps d’éxecution
3- Structures de données et complexité
4- Techniques d'analyse de complexité
5- Complexité spatiale
6- Complexité et Preuve de Correction
7- Optimisation d'algorithmes
2
II. Notion de complexité algorithmique
1- Notation de Landau grand O(n) :
3
II. Notion de complexité algorithmique
1- Notation de Landau O(n) :
Règle Preuve
Si f(n) O(kg(n)), alors f(n) Si f(n) O(kg(n)), alors k'>0 tels que :
O(g(n)) f(n)≤ kk'g(n)=Kg(n) n positif
Alors f(n) O(g(n))
5n2+3n+4 O(n2) On a: n>1 , 5n2+3n+4< 5n2+3n2+4n2 =12n2
Donc si on pose k=12 et n0=1
On obtient : n>n0, 5n2+3n+4<kn2
Ce qui prouve que 5n2+3n+4 O(n2)
2n+2 is O(2n). 2n+2 = 2n ·22 = 4·2n ; par conséquent, nous pouvons prendre c =
4 et n0 = 1 dans ce cas.
si f(n) = O(g(n)) et g(n) = Ce que nous devons montrer ici, c'est que f(n) ≤ c3 · h(n) pour n
O(h(n)), alors f(n) = > n3 étant donné que f(n) ≤ c1 · g(n) et g(n) ≤ c2 · h(n), pour n
O(h(n)). > n1 et n > n2, respectivement. En mettant en cascade ces
inégalités, on obtient ça f(n) ≤ c1 · g(n) ≤ c1c2 · h(n) pour n >
n3 = max(n1, n2).
4
II. Notion de complexité algorithmique
2- Classification des algorithmes
Cas d’utilisation courant Cas d’utilisation
courant
• Accéder au premier élément d’un ensemble de données G(n)=1 C est O(1)
1- O(4n + 3) O(n)
4- O(m).O(n)= 0(m.n)
5- O(n3).O(n2.log n) = O(n5n2.log n)
6- O(n2/2) = O(n2) =
6
II. Notion de complexité algorithmique
3- Règles de calcul sur les O(n)
Règle O(g(n))
11- Si f(n) O(kg(n)) Alors f(n) O(g(n)) c'est faux car n2 O(n3) mais n3O(n2)
7
II. Notion de complexité algorithmique
3- Règles de calcul sur les O(n)
Règle n°
17
8
II. Notion de complexité algorithmique
3- Règles de calcul sur les O(n)
Règle n° 18
Instructions de répétition
1. la complexité de la boucle for est calculée par la :
- complexité du corps de cette boucle
- multipliée par le nombre de fois qu’elle est répétée.
2. En règle générale, pour déterminer la complexité
d’une boucle while, il faudra avant tout déterminer :
- le nombre de fois que cette boucle est répétée,
- ensuite le multiplier par la complexité du corps de
cette boucle.
9
Cours n°03
II. Notion de complexité algorithmique
3- Règles de calcul sur les O(n)
Règle n° 19
Procédure et fonction:
10
II. Notion de complexité algorithmique
4- Temps d’exécution
Temps d'exécution :
12
II. Notion de complexité algorithmique
Conclusion
13
Structures de données
et complexité
PROCHAIN COURS
14
Université Tahri Mohamed de Béchar
Faculté des sciences exactes
Département des Mathématiques et Informatique
Deuxième Année Ingénieur Informatique
Matière : Algorithmiques et structures de données 3
Correction Test n° 01
Répondez aux questions suivantes par cocher la case du choix correcte
1. Question 1: Quelle est la profondeur du nœud racine (root node) ?
A. 0 ✅
B. 1
C. 2
D. 3
2. Question 2: Pour obtenir une expression préfixée, quel type de parcours d’arbre faut-il utiliser ?
A. Parcours en largeur (Level-order)
B. Parcours préfixé (Pre-order) ✅
C. Parcours postfixé (Post-order)
D. Parcours infixe (In-order)
3. Question 3: Quel est le nombre maximal d’enfants qu’un nœud d’un arbre binaire peut avoir ?
A. 0
B. 1
C. 2 ✅
D. 3
4. Question 4: Lequel des algorithmes de parcours suivants n’est pas utilisé pour parcourir un arbre
?
A. Parcours postfixé
B. Parcours préfixé
C. Parcours infixe
D. Parcours aléatoire (Randomized) ✅
6. Question 6: Laquelle des affirmations suivantes est fausse à propos d’un arbre binaire de
recherche (Binary Search Tree) ?
A. L’enfant gauche est toujours inférieur à son parent
B. L’enfant droit est toujours supérieur à son parent
C. Les sous-arbres gauche et droit doivent aussi être des arbres binaires de recherche
D. La séquence Inorder donne un ordre décroissant d’éléments ✅
7. Question 7: Dans la liste [10, 5, 20, 15, 30], combien de comparaisons sont nécessaires pour
déterminer que 25 n’est pas présent en utilisant la recherche linéaire ?
A. 6
B. 2
C. 4
D. 5 ✅
10. Question 10: Laquelle des structures de données suivantes est non linéaire ?
A. Piles (Stacks)
B. Listes (Lists)
C. Chaînes (Strings)
D. Arbres (Trees) ✅
11. Question 11: Dans une pile (stack), si TOP = MAX – 1, alors la pile est :
A. Vide
B. Pleine (Full) ✅
C. Contient quelques données
D. Aucune des réponses ci-dessus
15. Question 15: Quelle est la complexité dans le pire des cas de l’algorithme Quick Sort ?
A. O(N)
B. O(N²) ✅
C. O(log N)
D. O(N log N)
16. Question 16: Une machine met 200 secondes pour trier 1000 éléments avec Quick Sort.
Combien de temps approximatif faut-il pour trier 200 éléments ?
A. 31,11 secondes ✅
B. 45,54 secondes
C. 20 secondes
D. 60,2 secondes
17. Question 17: Quel algorithme de tri est le mieux adapté pour trier un tableau d’un million
d’éléments ?
A. Insertion sort
B. Quick sort ✅
C. Merge sort
D. Bubble sort
18. Question 18: Quelle est la complexité moyenne de l’algorithme Merge Sort ?
A. O(n log n) ✅
B. O(n²)
C. O(n² log n)
D. O(n log n²)
19. Question 19: Quelle est la complexité spatiale auxiliaire (mémoire utilisée en plus) de Merge
Sort ?
A. O(1)
B. O(log n)
C. O(n log n)
D. O(n) ✅
22. Question 22: Quelle est la complexité temporelle de la recherche binaire itérative ?
A. O(n log n)
B. O(n²)
C. O(log n) ✅
D. O(n)
23. Question 23: Quelle est la formule utilisée pour calculer la position dans la recherche par
interpolation ?
A. ((x − A[low]) × (high − low)) / (A[high] − A[low])
B. x + ((x − A[low]) × (high − low)) / (A[high] − A[low])
C. low + ((x − A[low]) × (high − low)) / (A[high] − A[low]) ✅
D. high + ((x − A[low]) × (high − low)) / (A[high] − A[low])
Évaluation d’une Expression Postfixée
Ce document explique comment évaluer une expression arithmétique en notation
postfixée (ou polonaise inversée) à partir d’un arbre binaire d’expression.
1. Expression donnée
Représentation postfixée : yxy+6/z+=
3. Étapes d’évaluation
Étape Élément lu Action Contenu de la Explication
pile
4. Résultat final
Résultat arithmétique final : y = ((x + y) / 6) + z