Vous êtes sur la page 1sur 73

Algorithmique et Programmation

by

Jordan F. Masakuna

Assistant
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Contact
• Jordan F. Masakuna, PhD
◦ masakunafelicien@gmail.com
◦ +27638499961 (WhatsApp)
◦ +243999734653 (Call)
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Objectif

• Développer des connaissances et compétences dans le domaine


des structures de données et des algorithmes.
• Comprendre les types de données abstraites (tableaux, listes,
piles, files d’attente, arbres, graphes) et les algorithmes
(recherche, tri, parcours d’arbres et de graphes, méthode de
Monte Carlo, méthodes de calcul).
• Acquérir une expérience en programmation avec le langage C.
• Analyser et mesurer la complexité des algorithmes.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Content layout

Introduction

Complexité des algorithmes

Structures de données

Tri et recherche

Méthodes heuristiques
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Aperçu général

• Les algorithmes sont des instructions pour résoudre un problème


ou accomplir une tâche.
• Le code informatique est algorithmique.
• Internet fonctionne sur des algorithmes et toutes les recherches en
ligne sont effectuées à travers eux.
• Les algorithmes sont utilisés dans tous les domaines de
l’informatique.
◦ Ils forment la colonne vertébrale de l’informatique.
◦ Un algorithme donne à l’ordinateur un ensemble spécifique
d’instructions, qui lui permet d’exécuter une tache (e.g. exécuter une
calculatrice ou faire fonctionner une fusée).
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Définition

• Un algorithme est une séquence finie d’instructions bien définies,


généralement utilisée pour résoudre une classe de problèmes
spécifiques ou pour effectuer un calcul.
• Il prend un ensemble d’entrées et produit une sortie souhaitée.
• Par example, un algorithme pour additionner deux nombres :
◦ prendre deux entrées numériques;
◦ additionner les deux nombres;
◦ afficher le résultat.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Qualités des bons algorithmes

• L’entrée et la sortie d’un algorithme doivent être définies avec


précision.
• Chaque étape de l’algorithme doit être claire et sans ambiguı̈té.
• Un algorithme devrait être efficace.
• Un algorithme ne doit pas inclure de code informatique.
◦ Il doit être écrit de manière à pouvoir être utilisé dans différents
langages de programmation.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Exemples d’algorithmes

• Trouver le plus grand parmi trois nombres.


• Trouver la factorielle d’un entier naturel.
• Vérifier si un nombre entier est premier.
• Trouver la série de Fibonacci.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Trouver le plus grand parmi trois nombres

1 : Debut
2 : Declarer les variables a , b , c et g .
3 : Lire les variables a , b et c .
4 : Si a >= b et a >= c alors
5 : g = a
6 : Sinon si b >= c alors
7 : g = b
8 : Sinon
9 : g = c
10: Afficher g est le plus grand nombre .
11: Fin
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Content layout

Introduction

Complexité des algorithmes

Structures de données

Tri et recherche

Méthodes heuristiques
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Définition

• La complexité d’un algorithme est la quantité de ressources


nécessaires pour exécuter un programme.
• Une attention particulière est accordée aux besoins en temps et en
mémoire.
• La complexité d’un problème est la complexité des meilleurs
algorithmes permettant de résoudre le problème.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Définition

• Vu que la quantité de ressources nécessaires pour exécuter un


algorithme varie généralement avec la taille de l’entrée n,
• la complexité est généralement exprimée comme une fonction

f (n) .
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Définition
• f (n) est la complexité soit dans
◦ le pire cas: le maximum de la quantité de ressources nécessaires
pour toutes les entrées de taille n;
◦ le cas moyen: la moyenne de la quantité de ressources sur toutes les
entrées de taille n;
◦ le meilleur cas: le minimum de la quantité de ressources nécessaires
pour toutes les entrées de taille n.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Types de complexité
• la complexité temporelle est le nombre d’opérations
élémentaires requises sur une entrée de taille n.
◦ où les opérations élémentaires sont supposées prendre un temps
constant sur un ordinateur donné et ne changer que par un facteur
constant lorsqu’elles sont exécutées sur un ordinateur différent.
• la complexité de l’espace est la quantité de mémoire requise par
un algorithme sur une entrée de taille n.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Notations

• La notation O est utile lors de l’analyse de l’efficacité des


algorithmes.
• Par exemple, le temps (ou le nombre d’étapes) qu’il faut pour
achever un problème de taille n peut être considéré comme

f (n) = 4n2 − 2n + 2 .
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Notations ...
• Au fur et à mesure que n croit, le terme n2 finira par dominer, de
sorte que tous les autres termes deviennent négligeables.
◦ Par exemple, lorsque n = 500, le terme 4n2 est 1000 fois plus grand
que le terme 2n.
◦ Ignorer ce dernier aurait un effet négligeable sur la valeur de
l’expression dans la plupart des cas
◦ Aussi, les coefficients deviennent sans importance si nous les
comparons à tout autre ordre d’expression.
• Donc
f (n) = O(n2 )
ou
f (n) ∈ O(n2 )
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Exemples

• si f1 (n) = 10, alors f1 (n) =?


• si f2 (n) = 15n + 7, alors f2 (n) =?
• si f3 (n) = 4n2 + 2n + 6, alors f3 (n) =?
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Exemples

• si f1 (n) = 10, alors f1 (n) ∈ O(1)


• si f2 (n) = 15n + 7, alors f2 (n) ∈ O(n)
• si f3 (n) = 4n2 + 2n + 6, alors f3 (n) ∈ O(n2 )
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Classes de complexité

O Complexité
O(1) constante
O(log(n)) logarithmique
O(n) linéaire
O(n × log(n)) quasi-linéaire
O(n2 ) quadratique
O(n3 ) cubique
O(2n ) exponentielle
O(n!) factorielle
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Calcul de complexité

factorielle ( n )
fact = 1
i = 2
tant que i <= n
fact = fact * i
i = i + 1
retourne fact
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Calcul de complexité

factorielle ( n )
fact = 1
i = 2
tant que i <= n
fact = fact * i
i = i + 1
retourne fact

• complexité temporelle = 1 + 1 + (n − 1) × 3 + 1 = 3n → O(n)


• complexité spatiale = 1 + 1 = 2 → O(1)
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Produit de deux matrices

• Proposer un algorithme pour le produit de deux matrices.


• Quelle est sa complexité temporelle?
• Quelle est sa complexité spatiale?
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

TD: Monte Carlo pour l’approximation de π

• Proposer un algorithme Monte Carlo pour l’approximation de la


valeur π.
• Analyser la complexité temporelle et la complexité spatiale (pour
pire, moyen et meilleur cas).
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Récursion

• Le processus dans lequel une fonction appelle soi-même


directement ou indirectement
• La fonction correspondante est appelée fonction récursive.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Approche itérative

• f (n) = 1 + 2 + 3 + · · · + n
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Approche récursive

Deux éléments importants


• condition d’arrêt
• récursion
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Approche récursive

• f (n) = 1 si n = 1
• f (n) = n + f (n − 1) si n > 1
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Exemple

• solution récursive de la factorielle de n


Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Factorielle récursive

factorielle ( n )
si n <=1 alors
retourner 1
sinon
retourner n * factorielle (n -1)
finsi
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Exemple

• solution récursive de la séquence de Fibonacci?


Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Content layout

Introduction

Complexité des algorithmes

Structures de données

Tri et recherche

Méthodes heuristiques
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Définition

• La structure de données est utilisé pour stocker et organiser les


données.
• C’est une façon d’organiser les données sur un ordinateur afin
qu’elles puissent être consultées et mises à jour efficacement.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Définition
• En fonction de vos besoins et de votre projet, il est important de
choisir la bonne structure de données pour votre projet.
◦ Par exemple, si vous souhaitez stocker des données de manière
séquentielle dans la mémoire, vous pouvez opter pour la structure de
données Tableaux.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Définition
• La structure des données et les types de données sont légèrement
différents.
◦ La structure de données est la collection de types de données
disposés dans un ordre spécifique.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Types de structures des données


• Fondamentalement, les structures de données sont divisées en
deux catégories :
◦ Structures de données linéaires
◦ Structures de données non linéaires
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Structures des données linéaires

• Les éléments sont disposés en séquence les uns après les autres.
• Étant donné que les éléments sont disposés dans un ordre
particulier, ils sont faciles à implémenter.
• Tous les éléments sont présents sur une seule couche.
• Cependant, lorsque la complexité du programme augmente, les
structures de données linéaires peuvent ne pas être le meilleur
choix en terme de complexités.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Structures des données linéaires

• Tableau (Array)
• Pile (Stack)
• Files d’attentes (Queue)
• Liste chaı̂née (Linked list)
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Tableau

• Les éléments en mémoire sont disposés en mémoire continue.


• Tous les éléments d’un tableau sont du même type.
• Le type d’éléments qui peuvent être stockés sous forme d’un
tableau est déterminé par le langage de programmation.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Pile
• Les éléments sont stockés selon le principe LIFO.
◦ Le dernier élément stocké dans une pile sera supprimé en premier.
• Cela fonctionne exactement comme une pile d’assiettes où la
dernière assiette conservée sur la pile sera retirée en premier.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Opérations de base de la pile

• Push : ajouter un élément en haut d’une pile.


• Pop : supprimer un élément du haut d’une pile.
• IsEmpty : vérifier si la pile est vide.
• IsFull : vérifier si la pile est pleine.
• Peek : obtenir la valeur de l’élément supérieur sans le supprimer.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Fonctionnement de la pile
• Les opérations fonctionnent comme suit:
◦ Un pointeur appelé TOP est utilisé pour garder une trace de
l’élément supérieur dans la pile.
◦ Lors de l’initialisation de la pile, TOP = -1.
◦ En push un élément, TOP = TOP + 1 et le nouvel élément est
placé dans la position pointée par TOP.
◦ Lors du pop d’un élément, nous renvoyons l’élément pointé par TOP
et réduisons sa valeur.
◦ Avant de push, on vérifie si la pile est déjà pleine.
◦ Avant de pop , on vérifie si la pile est déjà vide
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

File d’attentes

• Contrairement à la pile, la file d’attente fonctionne selon le


principe FIFO où le premier élément stocké dans la file d’attente
sera supprimé en premier.
• Cela fonctionne comme une file d’attente de personnes au guichet
où la première personne de la file d’attente recevra le billet en
premier.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Opérations de base de la file d’attentes

• Enqueue : ajouter un élément à la fin de la file d’attente.


• Dequeue : supprimer un élément du début de la file d’attente.
• IsEmpty : vérifier si la file d’attente est vide.
• IsFull : vérifier si la file d’attente est pleine.
• Peek : obtenir la valeur du début de la file d’attente sans la
supprimer.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Fonctionnement de la file d’attentes


• Les opérations de file d’attente fonctionnent comme suit :
◦ deux pointeurs FRONT et REAR
◦ FRONT pointe sur le premier élément de la file d’attente
◦ REAR pointe sur le dernier élément de la file d’attente
◦ initialiser les valeurs de FRONT et REAR à -1
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Opération enqueue

• Vérifier si la file d’attente est pleine.


• Pour le premier élément, définir la valeur de FRONT sur 0.
• Incrémenter l’index REAR de 1.
• Ajouter le nouvel élément à la position pointée par REAR.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Opération dequeue

• Vérifier si la file d’attente est vide.


• Renvoyer la valeur pointée par FRONT.
• Augmenter l’indice FRONT de 1.
• Pour le dernier élément, réinitialiser les valeurs de FRONT et
REAR.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Liste chaı̂née

• Les éléments sont connectés via une série de nœuds.


• Chaque nœud contient les éléments de données et l’adresse du
nœud suivant.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Structures des données non linéaires


• Contrairement aux structures de données linéaires, ici les éléments
ne sont dans aucune séquence.
◦ ils sont organisés de manière hiérarchique où un élément sera
connecté à un ou plusieurs éléments.
• Les structures de données non linéaires sont ensuite divisées en
structures de données basées sur des graphes et des arbres.
• Les éléments de données sont présents à différentes couches.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Graphe

• Chaque nœud est appelé sommet et chaque sommet est connecté


à d’autres sommets par des arêtes.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Arbre

• Semblable à un graphe, un arbre est également une collection de


sommets et d’arêtes.
• Cependant, dans un arbre, il ne peut y avoir qu’une seule arête
entre deux sommets.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Content layout

Introduction

Complexité des algorithmes

Structures de données

Tri et recherche

Méthodes heuristiques
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Tri
• Un algorithme de tri est utilisé pour organiser les éléments d’un
tableau/d’une liste dans un ordre spécifique.
• Par example,
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Tri

• Il existe différents algorithmes de tri qui peuvent être utilisés pour


effectuer cette opération.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Algorithmes de tri

• Tri rapide
• Tri à bulles
• Tri par insertion
• Tri par sélection
• Tri par fusion
• etc.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Tri rapide
• Basé sur l’approche diviser pour mieux régner
• Un tableau est divisé en sous-tableaux en sélectionnant un
élément pivot (élément sélectionné dans le tableau).
• Lors de la division du tableau, l’élément pivot doit être positionné
de manière à ce que les éléments inférieurs au pivot soient
conservés sur le côté gauche et les éléments supérieurs au pivot se
trouvent sur le côté droit du pivot.
• Les sous-tableaux gauche et droit sont également divisés en
utilisant la même approche.
• Ce processus se poursuit jusqu’à ce que chaque sous-tableau
contienne un seul élément.
• Enfin, les éléments sont combinés pour former un tableau trié.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Tri rapide
tri (A , lo , hi )
si ( lo < hi ) alors
p <- partition (A , lo , hi )
tri (A , lo , p - 1)
tri (A , p + 1 , hi )

partition (A , lo , hi )
pivot = A [ hi ]
i <- lo
pour j = lo a hi
si A [ j ] < pivot alors
A [ i ] <= > A [ j ]
i <- i + 1
A [ i ] <= > A [ hi ]
retourne i
• complexités?
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Tri rapide: pire cas


Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Complexité: pire cas

• utiliser
n
X n(n + 1)
k=
2
k=1
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Complexité: pire cas

• complexité temporelle: O(n2 )


Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Complexité: meilleur cas


Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Complexité: meilleur cas

• complexité temporelle: O(n log(n))


Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Complexité: moyen cas


Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Complexité: moyen cas

• complexité temporelle: O(n log(n))


Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Complexité

• complexité spatiale?
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Complexité

• complexité spatiale: O(n)


Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Tri à bulles

• Il compare deux éléments adjacents et les permute jusqu’à ce


qu’ils soient dans l’ordre prévu.
• Tout comme le mouvement des bulles d’air dans l’eau qui
remontent à la surface, chaque élément du tableau se déplace vers
la fin à chaque itération.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Tri à bulles

• A partir du premier indice, comparer le premier et le second


éléments.
• Si le premier élément est supérieur au deuxième élément, ils sont
permutés.
• Ensuite, comparer les deuxième et troisième éléments.
• Échanger les s’ils ne sont pas dans l’ordre.
• Le processus ci-dessus se poursuit jusqu’au dernier élément.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Tri par insertion

• Il place un élément non trié à sa place appropriée à chaque


itération.
• Le tri par insertion fonctionne de la même manière que
l’arrangement des cartes.
◦ On suppose que la première carte est déjà triée alors, on sélectionne
une carte non triée.
◦ Si la carte non triée est supérieure à la carte en main, elle est placée
à droite sinon, à gauche.
◦ De la même manière, d’autres cartes non triées sont prises et remises
à leur place.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Tri par insertion


• Le premier élément du tableau est supposé être trié.
• Prendre le deuxième élément et stocker le dans une clé.
• Comparer la clé avec le premier élément.
◦ Si le premier élément est supérieur à la clé, alors la clé est placée
devant le premier élément.
• Puisque les deux premiers éléments sont triés.
◦ Prendre le troisième élément et comparer le avec les éléments à sa
gauche.
◦ Placer le juste derrière l’élément plus petit que lui.
◦ S’il n’y a pas d’élément plus petit que lui, placer le au début du
tableau.
• Placer chaque élément non trié à sa position correcte.
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Recherche binaire

• Un algorithme de recherche permettant de trouver la position


d’un élément dans un tableau trié.
• Dans cette approche, l’élément est toujours recherché au milieu
d’une partie d’un tableau.
• L’algorithme de recherche binaire peut être mis en œuvre de deux
manières:
◦ Méthode itérative
◦ Méthode récursive
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Méthode itérative

faire jusqu a ce que low = high .


mid = ( low + high )/2
si ( x == arr [ mid ]) alors
retourne mid
sinon si ( x > arr [ mid ]) alors
low = mid + 1
sinon
high = mid - 1
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Méthode récursive

binarySearch ( arr , x , low , high )


si low > high alors
retourne Faux
sinon
mid = ( low + high ) / 2
si x == arr [ mid ] alors
retourne mid
sinon si x > arr [ mid ] alors
retourne binarySearch ( arr , x , mid + 1 , high )
sinon
retourne binarySearch ( arr , x , low , mid - 1)
Introduction Complexité des algorithmes Structures de données Tri et recherche Méthodes heuristiques

Content layout

Introduction

Complexité des algorithmes

Structures de données

Tri et recherche

Méthodes heuristiques

Vous aimerez peut-être aussi