Académique Documents
Professionnel Documents
Culture Documents
Introduction A L'algorithmique
Introduction A L'algorithmique
l’algorithmique
ATSA ETOUNDI Roger
Professeur Titulaire en Informatique
atsa.etoundi@ict4d.cm
La société se
digitalise!!!
La société se digitalise!!!
La société se digitalise!!!
• Réalité virtuelle
• Marketing digital
• Réalité augmentée • Internet
• Systèmes distribués
• Intelligence artificielle • etc
• Robotisation
• Algorithmes
• Génie logiciel
• Data science
• Réseaux informatiques
• Internet des objets
Résolution Informatique des Problèmes
• Nous vivons dans un monde digital, les ordinateurs et les robots sont désormais autour de nous.
• Les ordinateurs à travers les programmes informatiques ou logiciels et les robots permettent à l’homme de réaliser des travaux
répétitifs non cognitifs en faisant des économies en temps tout en minimisant les erreurs et maintenant une certaine qualité de
service.
• Les ordinateurs et les robots remplacent l’humain dans l’exécution de certaines activités au sein de l’entreprise.
• Les ordinateurs et les robots ont une chose en commun, c’est les programmes informatique qui tournent ou sont exécutés en leur
sein.
• Les programmes informatiques constituent la base de l’informatique et qui donnent un sens à l’informatique.
• Avant que l’ordinateur ou le robot ne résolve le problème, l’informaticien doit dans un premier temps comprendre comment ce
problème est résolu par l’homme.
• Un problème est résolu avec les définition des différentes étapes non conflictuelles qui permettent d’attendre le résultat souhaité.
• Les différentes étapes conflictuelles permettant l’atteinte d’un résultat escompté est appelé un algorithme.
• L’algorithme sera par la suite traduit dans un langage compréhensible par l’ordinateur.
• L’activité de traduction de l’algorithme en langage compréhensible par l’ordinateur est appelée programmation.
• La programmation se fait en utilisant un langage de programmation.
• C’est au terme de la programmation que l’informaticien va mettre en place une application ou logiciel devant être exécuté par un
ordinateur ou un robot.
• Retenons: Pas d’algorithme pas de programmation. Pas de programmation pas de logiciel. Pas de logiciel pas d’ordinateur et de
robot. Tout informaticien doit savoir écrire les algorithme et les programmes informatiques.
Résolution Informatique des Problèmes
• L’informaticien pour mener à bien son travail doit:
• Définir les étapes non conflictuelles a la résolution du problème
• Pour définir ces étapes, l’informaticien doit tres bien comprendre le problème.
• La compréhension du problème suppose la définition ou l’existence d’un cahier de charges.
• Le cahier de charges contient les différentes contraintes et différents besoins des utilisateurs finaux ou les
demandeurs ou ceux qui observent le problème.
• Chaque étapes de l’algorithme doit être maitrisée.
• La maitrise suppose la connaissance des données à prendre en compte des le départ (données d’entrée - Input) et
les données à l’arrivée (donnée en sortie – output)
• Les données de la première étape sont appelées données initiales.
• Les données de la dernière étape sont appelées données résultats.
• Pour les étapes intermédiaires, les données résultats de l’ étape précédentes constituent les les données d’entrée
pour l’ étape suivante.
• Un algorithme peut etre vu comme une boîte noire ou une boîte blanche.
• L’algorithme vu comme une boite noir es juste la définition des données initiales associées à leurs contraintes et les
données résultats associées à leurs contraintes.
• L’algorithme vu comme une boite blanche est la données des détails de toutes étapes et les conditions pour leurs
exécutions
Algorithme
Algorithme vu comme une boîte noire
Entrées sorties
Nom de l’algorithme
Résolution Informatique des Problèmes
• On en distingue trois:
• Pour
• Tant que
• repeter
Structures: Pour
• On
• On execute un nombre fini de fois un ensemble d’instructions
• Syntaxe
Pour cp = val-ini a valf, pas faire
Action(s)
Fin_pour
Cp represdnte le compteur
Val-ini représente la valeur initiale du compteur
Valf représente la valeur finale
Pas représente le saut a chaque iteration
Remarques
Si val-ini < valf, on va incrementer cp du pas à la fin de chaque interation
Si val-ini > valf, on decremengte cp du pas à la fin de chaque iteration
Si pas = 1 ou pas = -1, on ne le représente pas sur la boucle
Exemple
….
…. ….
P<- 1
P<- 1
Pour j =100 a 1 faire Pour j =0 a 100,2 faire
Pour j =1 a 100 faire
p<- p*j
p<- p*j afficher (j)
Finpour
Finpour Finpour
afficher (p)
afficher (p) ce bout de
La valeur du pas est 1
La valeur du pas est 1 programme affiche
tous les nombres pairs
Le bout de programme inferieur ou egal a 100
Le bout de programme calcule la factoriel de 100
calcule la factoriel de 100
Répéter
• Ce mot clé permet l’execution d’un ensemble d’instructions
jusqua ce que une condition soit satisfaite
Syntaxe
Répéter
action(s)
Jusqu’à cond
Sémantique
L’ensemble d’actions est executees jusqu’à ce que la condition cond
soit evaluee a vraie
Repeter
….
P<- 1
J<-1
repeter
p<- p*j
j <- j+1
Jusqu’à j>100
afficher (p)
Le bout de programme
calcule la factoriel de 100
Tant-que
• Ce mot cle permet d’executer un ensemble d’instruction tant
qu’une condition est satisfaite
Syntaxe
Tantque Cond faire
action(s)
Fintantque
Sémantique
On execute l’ensemble des actions tant que la condition cond est
evaluee a vraie
Exemple
….
P<- 1
J<-1
Tantque j<=100 faire
p<- p*j
j <- j+1
fintantque
afficher (p)
Le bout de programme
calcule la factoriel de 100
Ecriture d’algorithme
Pour écrire un algorithme simple, on a besoin de:
• Donner son nom
• Définir lorsque cela est nécessaire les types de données à manipuler
• Définir les variables si nécessaire à manipuler
• Donner la suite d’instructions commençant par le mot clé début et se
terminant par le mot clé fin
• La suite d’instruction peut contenir des structures de contrôle, des
structure itératives
• Dans chaque structure de contrôle ou itérative, on peut définir un bloc
d’instructions
• Un bloc d’instructions est un ensemble d’au moins deux instructions
• En règle général, chaque bloc est délimité par les mots clé début et fin
Structures de données
• Structures de données de base
• Structures de données évoluées
• Structures de données dynamiques
Structure de données de base
• Les entiers: 0,1,2, …, n, n+1
• Les nombres relatifs
• Les réels,
• Booléens,
• bit
• Caractère
• Chaine de caractères
Type abstrait de donnée
• Pour concevoir un algorithme complexe, on adopte une démarche
descendante : l'analyse procède par raffinements successifs.
• Au départ, on reste loin de toute implémentation ; en particulier, la
représentation concrète des données n'est pas fixée. On parle alors de
type abstrait de données.
• Un type de données abstrait est composé d’un ensemble d’objets,
similaires dans la forme et dans le comportement, et d’un ensemble
d’opérations sur ces objets.
• On se donne une notation qui décrit les données, des opérations
applicables à ces données (primitives), et les propriétés de ces opérations
(sémantique).
Principe d’abstraction
• Il permet de représenter un objet du monde réel en ne detant pas
compte du détail
• Plus on a des détails mois l’abstraction est élevée
• Moins on a des details sur un objet, plus l’abstraction est élevée.
• NB:
• le principe d’abstraction fait partie des outils important de tout
informaticien
• Il est très important dans la modélisation ou représentation en
informatique
Type abstrait de donnée
• Un type abstrait de donnée est une représentation formelle d’un type de données, le
type de données étant un ensemble de données ayant les mêmes opérations
• La représentation est dite formelle car elle utilise les concepts mathématiques
• Elle est définie par
• Son nom
• Son type d’ Intérêt ou ensemble de données ayany les memes proprietes
• Primitive (utilise, étendre)
• Les opérations
• Générateurs
• transformateur
• Constructeurs
• Observateurs
• prédicats
• Les propriétés
Type abstrait de donnée
• La primitive « Utilise » est suivie ou definit les types abstraits que l'on
va utiliser dans celui que l'on est en train de décrire
• Parmi les opération on a:
• Un générateur est une opération qui donne naissance au type que l’on est
entrain de définir
• les constructeurs permettent de créer un objet du type que l'on est en train de
définir ;
• les transformateurs permettent de modifier les objets et leur contenu;
• les observateurs sont des fonctions donnant des informations sur l'état de
l'objet.
Type Booléen
TAD Bool1
Tyepe: Bool
Générateur TAD Bool2
true:Bool étendre Bool1 avec
false:Bool
Constructeur
Constructeurs
non: Bool -> Bool
et: Bool xBool -> Bool
ou : Bool x Bool -> Bool Propriété
eq : Bool x Bool -> Bool P3: b:Bool non (non b))=b
Propriétés fin
P1: b:Bool b et b =b
p2: b,b’:Bool, b=/=b’ => b eq b’ = false
fin
Type abstrait des entiers naturels
TAD Nat0 TAD Nat1
Type Nat
utilise Bool2 etendre Nat0 avec
Générateur
0:Nat
observateur
1:Nat isnat: Nat -> Bool
Constructeur
succ : Nat -> Nat
Propriété
+ : Nat x Nat -> Nat P4: n:Nat isnat(n) => 0=n \/ 1=n \/
Propriété
P1: n:Nat Succ(n) = N+1 m:Nat succ(n)=m
p2: succ(0) = 1
P3: 0+1 = 1
fin
fin
Exercice
Définition informelle
On décrit une collection d’objets de même type, avec les
opérations d’ajout d’un élément, de suppression, d’appartenance et
de cardinalité (nombre d’éléments).
Notons:
un élément, s’il appartient à un ensemble n’y apparaît
qu’une fois et une seule.
Définition formelle d’un ensemble
Axiomes : o, o’:Obj, e:Ens
estVide(Vide()) = Vrai
TAD Ensemble estVide(ajoute(x; e)) = Faux
appartient(o,Vide()) = Faux
Type Ens. Obj
appartient(o; ajoute(o; e)) = Vrai
Utilise Bool
o =o’ => ajoute(o, ajoute(o’, e)) =
Opérations :
ajoute(o, e)
vide : → Ens
supprime(o,ajoute(o, e)) = e
estVide : Ens(T) → Booleen
ajoute : Obj x Ens → Ens oo’ => ajoute(o,ajoute(o’,e)) =
ajoute(o’ ajoute(o, e))
supprime : Obj x Ens → Ens
appartient : Obj x Ens → Booleen Supprime(o,ajoute(o’,e)) =
ajoute(o,supprime(o, e))
fin
Type chaine de caractères
TAD Ch1
Type: Ch, Char
utilise Nat
Générateur
chv:Ch
Constructeurs
concat: Ch x Ch -> Ch
sousch: ChxNatxNat -> Nat
long: Ch -> Nat
souschg: Ch x Nat -> Ch
souschd ChxNat -> Ch
observateur
char: ChxNat -> Char
Enregistrement
• Le tri rapide - aussi appelé "tri de Hoare" (du nom de son inventeur Tony Hoare) ou
"tri par segmentation" ou "tri des bijoutiers" ou, en anglais "quicksort" - est
certainement l’algorithme de tri interne le plus efficace.
• Le principe de ce tri est d’ordonner le vecteur T.(0)..T.(n) en cherchant dans celui-ci
une clé pivot autour de laquelle réorganiser ses éléments. Il est souhaitable que le
pivot soit aussi proche que possible de la clé relative à l’enregistrement central du
vecteur, afin qu’il y ait à peu près autant d’éléments le précédant que le suivant, soit
environ la moitié des éléments du tableau. Dans la pratique, comme dans la démo ci-
dessous, on prend souvent le dernier élément du tableau.
• On permute ceux-ci de façon à ce que pour un indice j particulier tous les éléments
dont la clé est inférieure à pivot se trouvent dans T.(0)...T.(j) et tous ceux dont la clé
est supérieure se trouvent dans T.(j+1)...T.(n). On place ensuite le pivot à la position j.
• On applique ensuite le tri récursivement à, sur la partie dont les éléments sont
inférieurs au pivot et sur la partie dont les éléments sont supérieurs au pivot.
Le tri rapide
• Le choix du pivot est déterminant pour l'efficacité de ce tri. Plusieurs
options sont possibles :
• Choisir le premier élément du tableau
• Choisir le dernier élément du tableau
• Choisir un élément au hasard
• Choisir l'élément au milieu du tableau
• Trouver le pivot optimal en recherchant la médiane
• Ces différentes options peuvent être testées avec l'application ci-
dessous. Choisir la médiane comme pivot est bien entendu la solution
optimale... sauf que, la recherche de cette médiane est elle-même
coûteuse.
Le tri rapide
Procedure tri_rapide (tableau [1:n], gauche, droit )
DEBUT
(* mur marque la separation entre les elements plus petits et ceux plus grands que
pivot*)
mur ← gauche;
(* On prend comme pivot l element le plus a droite *)
pivot ← tableau[droit];
placer a gauche de mur tout les elements plus petits
placer a droite de mur tout les element plus grands
(* On place correctement le pivot *)
placer le pivot a la place de mur
(* On poursuit par recursivite *)
SI (gauche<mur-1) ALORS tri_rapide(tableau,gauche,mur-1);
SI (mur+1<droit) ALORS tri_rapide(tableau,mur,droit);
FIN procedure
Différentes problématiques
• Terminaison : terminera en un temps fini.
• Complexité en temps : terminera en un temps borné
(raisonnable).
• Complexité en espace : terminera en utilisant une quantité de
mémoire bornée (raisonnable).
• Correction : si l’algorithme termine en donnant une proposition
de solution, alors cette solution est correcte.
• Complétude : pour un espace de problèmes donné, l’algorithme,
s’il termine, donnera toujours des propositions de solutions
Introduction à l’analyse des algorithmes
• Lors du développement d'un logiciel, de nombreux éléments importants doivent être pris
en compte:
• la convivialité
• la modularité
• la sécurité
• la facilité de maintenance
• L’aisance dans son utilisation
• Pourquoi se préoccuper des performances?
• La réponse à cette question est simple, nous ne pouvons avoir tous les attributs ci-dessus
que si nous avons des performances.
• Parler de la performance reviens a définir la quantité de ressources qu’il utilise:
1. son temps d’exécution ou l’efficacite
2. L’espace qu’il consomme pendant son exécution
• Deux types de complexité
• complexité temporelle
• complexité spatiale.
Introduction à l’analyse des algorithmes