Powerpoint Templates Page 1 Powerpoint Templates Partie Informatique Algorithmique A. LOTFI...
-
Upload
come-pasquier -
Category
Documents
-
view
109 -
download
4
Transcript of Powerpoint Templates Page 1 Powerpoint Templates Partie Informatique Algorithmique A. LOTFI...
Powerpoint TemplatesPage 1
Powerpoint Templates
Partie InformatiqueAlgorithmique
A. LOTFI
Introduction
Powerpoint TemplatesPage 2
Objectifs
Algorithmique
Complexité algorithmique
Les types de données
Les structures de données
La récursivité
Les Arbres
Les algorithmes de Tri
Powerpoint TemplatesPage 3
AlgorithmiqueIntroduction
Un algorithme est une suite d’instructions, qui une fois exécutée correctement, conduit à un résultat donné.
L’algorithmique exprime les instructions à effectuer pour résoudre un problème donné indépendamment des particularités de tel ou tel langage.
Pour fonctionner, un algorithme doit donc contenir uniquement des instructions compréhensibles par celui qui devra l’exécuter.
La vérification méthodique, pas à pas, de chacun de vos algorithmes représente plus de la moitié du travail à accomplir... et la garantie de vos progrès.
Powerpoint TemplatesPage 4
AlgorithmiqueIntroduction
Donc :Un Algorithme : enchaînement des actions (instructions)
nécessaires pour résoudre un problème
On trouve différentes appellationslangage algorithmique pseudo-langage de programmation pseudo-code …
Powerpoint TemplatesPage 5
AlgorithmiqueIntroduction
Qu’est ce qu’un ordinateur ? Une machine totalement dénuée d'intelligence Capable d’effectuer un grand nombre de tâches Exécute très rapidement et sans erreurs les ordres qu'on lui
donne
Qu’est-ce qu’un programme ? Assemblage et enchaînement d’instructions élémentaires Écrit dans un langage de programmation Exécuté par un ordinateur afin de traiter les données d’un
problème Et renvoyer un ou plusieurs résultats
Un programme est réalisé dans le but d’effectuer un ensemble de traitements particuliers sur un ensemble de données
Définir sous quelle forme les données initiales seront fournies à l’application
Définir sous quelle forme les résultats seront communiqués Expliciter les différentes actions à effectuer pour réaliser cette
tâche
Powerpoint TemplatesPage 6
AlgorithmiqueDonnées et Mémoire
La mémoire : c'est l'espace où les données sont rangées pour fin d'utilisation par l'algorithme
La mémoire est comme un ensemble de casiers postauxUne case contient une donnéePour accéder à une donnée, on indique le numéro du casier (ou adresse mémoire)Pour stocker une donnée, on indique le numéro du casier et la valeur à stocker
1 2 3 4 5 64
33
567 8 9 10 11 12
Powerpoint TemplatesPage 7
AlgorithmiqueCodage des Nombres
Plusieurs bases de codage possibles Base 10 (décimale) : base de calcul usuelle Base 24 : heures Base 60 : minutes, secondes, degrés Base 12 : douzaine
Bases les plus utilisées Pour les êtres humains : base décimale Pour un ordinateur : Base binaire (2) et dérivées : base
hexadécimale (16) ou octale (8)
Origine de l'utilisation du binaire : absence ou présence de courant électrique (0 ou 1) comme base de codage
Powerpoint TemplatesPage 8
AlgorithmiqueCodage des Nombres
HistoriqueCodage des nombres : dans un but de calculApparition du calculDès la préhistoire on comptait avec des cailloux et
avec ses doigtsCalcul vient du latin calculi signifiant caillou
AntiquitéChaque civilisation (Musulmans, Grecs, Romains,
Chinois, Mayas ...) avait développé des : Systèmes et bases de numérotation Méthodes pour compter et calculer
Powerpoint TemplatesPage 9
AlgorithmiqueCodage des Nombres
Origine des systèmes de numérotation
Base 10 : nombre des doigts des 2 mainsChiffres romains : V = 5 et X = 10
Base 20 : mains et piedsMoins pratique, a disparu ...
Base 12 : 3 phalanges et 4 doigts (le pouce sert à positionner le chiffre)
Base 60 : les doigts de la deuxième main comptent le deuxième chiffre (60 = 5 x 12)
Powerpoint TemplatesPage 10
AlgorithmiqueCodage des Nombres
Pour une base B, il y a B symboles différents (les chiffres de cette base)Base 10 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9Base 2 : 0, 1 un chiffre = un bit (binary
digit)
Base 4 : ▲♦■●Base 8 : 0, 1, 2, 3, 4, 5, 6, 7Base 16 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,
C, D, E, F
Powerpoint TemplatesPage 11
AlgorithmiqueConversion des bases
Valeur en décimal (base 10) d'un nombre
« anan-1 ... a1a0 » codé dans une base B
anBn + an-1Bn-1 + ... a1B + a0
En prenant la valeur décimale de chaque chiffre ax
Exemples (1234)10 = 1 x 103 + 2 x 102 + 3 x 10 + 4
(11001)2 = 1 x 24 + 1 x 23 + 0 x 22 + 0 x 2 + 1
= 16 + 8 + 1 = 25 (1C04)16 = 1 x 163 + 12 x 162 + 0 x 16 + 4
= 4096 + 12 x 256 + 0 + 4 = 7172
avec A = 10, B = 11, C = 12, D = 13, E = 14, F = 15
Powerpoint TemplatesPage 12
AlgorithmiqueConversion des bases
Schéma de Horner Pour calculer la valeur décimale N de :
« anan-1...a1a0 » codé en base B
Pn = anB + an-1
Pn-1 = PnB + an-2
Pn-2 = Pn-1B + an-3
...P1 = P2B + a0 = N
Exemple : pour (1234)10, B=10, n=3p3 = a3 x B + a2 = 1 x 10 + 2 = 12
p2 = p3 x B + a1 = 12 x 10 + 3 = 123
p1 = p2 x B + a0 = 123 x 10 + 4 = 1234
Powerpoint TemplatesPage 13
AlgorithmiqueConversion des bases
Schéma de HornerExemples : (11001)2, B=2, n=4
p4 = 1 x 2 + 1 = 3
p3 = 3 x 2 + 0 = 6
p2 = 6 x 2 + 0 = 12
p1 = 12 x 2 + 1 = 25
(1C04)16, B=16, n=3p3 = 1 x 16 + 12 = 28
p2 = 28 x 16 + 0 = 448
p1 = 448 x 16 + 4 = 7172
Powerpoint TemplatesPage 14
AlgorithmiqueConversion des bases
Décimal base BExemple : (1234)10 en décimal
1234 / 10 = 123 reste 4123 / 10 = 12 reste 312 / 10 = 1 reste 21 < 10 donc on arrêteRésultat : 1234
Powerpoint TemplatesPage 15
AlgorithmiqueConversion des bases
Décimal base BExemple : (25)10 en binaire
25 / 2 = 12 reste 112 / 2 = 6 reste 06 / 3 = 2 reste 03 / 2 = 1 reste 11 < 2 donc on arrêteRésultat : (11001)2
Powerpoint TemplatesPage 16
AlgorithmiqueConversion des bases
Décimal base BCas Particuliers
Conversion du binaire à l'octal/hexadécimal ou inverse
1 chiffre octal = un groupe de 3 chiffres binaires 1 chiffre hexadécimal = un groupe de 4 chiffres
binaires (000)2 = 0, (001)2 = 1.... (110)2 = 6, (111)2 = 7
Avec 3 bits, on code les 8 chiffres de la base octale
(0000)2 = 0, (0001)2 = 1 .... (1110)2 = 14 = (E)16,
(1111)2 = 15 = (F)16
Avec 4 bits, on code les 16 chiffres de la base hexadécimale
Powerpoint TemplatesPage 17
AlgorithmiqueConversion des bases
Décimal base BCas Particuliers
Conversion du binaire à l'octal/hexadécimal ou inverse
Exemple : (10110001101)2 en octal
On regroupe par groupes de 3 bits :
010 110 001 101 On rajoute des zéros au début au besoin (010)2 = 2, (110)2 = 6, (001)2 = 1, (101)2= 5
(10110001101)2 = (2615)8
Powerpoint TemplatesPage 18
AlgorithmiqueConversion des bases
Décimal base BCas Particuliers
Conversion du binaire à l'octal/hexadécimal ou inverse
Exemple : (10110001101)2 en hexadécimal
On regroupe par groupes de 4 bits :
0011 1000 1101 (0011)2 = 5 , (1000)2 = 8, (1101)2 = 13
(10110001101)2 = (58D)16
Powerpoint TemplatesPage 19
AlgorithmiqueCodage des Nombres
On a vu le codage des nombres entiers positifs dans différentes bases. Mais on doit aussi pouvoir manipuler des :Nombres réelsNombres négatifs
Le signe … Représentation en virgule fixe:
(N)B = an an-1 ... a1 a0 , b1 b2 ... bm-1 bm
= anBn + an-1Bn-1 + ... a1B + a0 +
b1B-1 + b2B-2 + ... bm-1B-m+1 + bmB-m
Powerpoint TemplatesPage 20
AlgorithmiqueCodage des Nombres
Représentation en virgule flottante
Principe et intérêtsAvoir une virgule flottante et une précision limitéeNe coder que des chiffres significatifs
N = +/- M x BEN = nombre codéM = mantisse : nombre de X chiffres de la base BE = exposant : nombre de Y chiffres de la base B+/- = codage du signe : positif ou négatif
Le nombre est présenté sous forme normalisée pour déterminer la mantisse et exp.
Pas de chiffre avant la virgule : 0,XXXXX x BE
Powerpoint TemplatesPage 21
AlgorithmiqueCodage des Nombres
Représentation en virgule flottante
Exemples 1234,5 en base 10
On normalise pour n'avoir que des chiffres après la virgule : 0,12345 x 104
Mantisse codée = 12345, exposant = 4, signe = +
Standard IEEE 754 : codage binaire de réels en virgule flottante
Précision simple : 32 bits1 bit de signe, 8 bits exposant, 23 bits mantisse
Précision double : 64 bits1 bit de signe, 11 bits exposant, 52 bits mantisse
Powerpoint TemplatesPage 22
AlgorithmiqueCodage des Nombres
Les Entiers
Principe : considérer que le bit de poids fort code le signe
0 = entier positif, 1 = entier négatifBit de poids fort : le plus à gaucheBit de poids faible : le plus à droiteLes autres bits codent le nombre en valeur absolue
Nécessité de savoir sur combien de bits on code le nombre pour déterminer quel bit code quoi
Exemples si codage sur 4 bits (0111)2 = 7 car bit de poids fort à 0
(1111)2 = -7 car bit de poids fort à 1
Powerpoint TemplatesPage 23
AlgorithmiqueCodage des Nombres
Les Entiers Un ordinateur manipule des nombres binaires
sous forme de 8 bits = un Octet = 1 ByteDonnées codées sur un ou plusieurs octets :8 bits, 16 bits, 32 bits, 64 bits ...Avec p bits, on code N valeurs avec 0 ≤ N ≤ 2p - 1Avec 16 bits, on peut coder 216 = 65536 valeurs
différentesSoit les entiers de 0 à 65535 pour les entiers
positifs
Powerpoint TemplatesPage 24
AlgorithmiqueCodage des Nombres
Les Entiers Pour un entier signé sur 16 bits :
Nombres positifs : 0XXXXXXXXXXXXXXXNombres négatifs : 1XXXXXXXXXXXXXXXOn a 15 bits pour coder la valeur absolue du
nombre soit 215 = 32768 valeurs possiblesPour le positif : de 0 à 32767Pour le négatif : de -0 à -32767Pour p bits : -(2p-1 - 1) ≤ N ≤ 2p-1 - 1 Inconvénient : on code 2 fois le 0
Powerpoint TemplatesPage 25
AlgorithmiqueLes Variables
Dans un programme informatique, on va avoir en permanence besoin de stocker provisoirement des valeurs de types différents: utilisation de variables
Une variable est une boîte, que le programme (l’ordinateur) va repérer par une étiquette.
Pour avoir accès au contenu de la boîte, il suffit de la désigner par son étiquette.
Déclaration des variables => créer la boîte et de lui coller une étiquette.
Le nom de la variable (l’étiquette de la boîte) obéit à des impératifs changeant selon les langages:
Un nom de variable correct commence impérativement par une lettre.
Comporte des lettres et des chiffres, mais qui exclut la plupart des signes de ponctuation, en particulier les espaces.
Powerpoint TemplatesPage 26
AlgorithmiqueLe Type
Le type de la boite précise ce que l’on voudra mettre dedans, car de cela dépendent la taille de la boîte
Les principaux types de base sont :
Types numériques Type alphanumérique Type booléen
Le type est défini en fonction des besoins
Le type booléen est très économique en termes de place mémoire occupée, puisque pour stocker une telle information binaire, un seul bit suffit
Les autres types sont généralement composés à partir des types de base.
Powerpoint TemplatesPage 27
AlgorithmiqueL’instruction d’affectation
Affecter une variable c’est lui attribuer une valeur => mettre un contenu dans la boite.
En pseudo-code, l'instruction d'affectation se note avec le
signe ←maVariable ← 24 //Attribue la valeur 24 à la variable maVariable
Il faut vérifier :La comptabilité entre le contenant et le contenuLa variable désigné doit être au préalable déclarée
Powerpoint TemplatesPage 28
AlgorithmiqueL’instruction d’affectation
Différence avec le = mathématiques
Quand on dit qu'une variable prend pour valeur une autre variable, ça ne veut pas dire qu'elles seront toujours égales !
Cela veut seulement dire que la première variable va prendre la valeur de la seconde
Le contenu de la première boite sera le même celui de la seconde boite…
Mais si on modifie le contenu de la seconde boite après, ça n’a pas d’impact sur le contenu de la première boite !
Powerpoint TemplatesPage 29
AlgorithmiqueL’instruction d’affectation
Différence avec le = mathématiques
Exemples
Algo : x <- y différend de y <- xMaths : x = y équivaut à y = x
Algo : x + 12 <- y impossible !Maths : x + 12 = y a un sens
Algo : x <- x + 7 a un sensMaths : x = x + 7 impossible
Powerpoint TemplatesPage 30
AlgorithmiqueExemple de variables
Identificateur : XType : entierValeur : 25
Identificateur : YType : réelValeur : 3,7
Mémoire centrale(mémoire vive)
25X
3,7Y
Powerpoint TemplatesPage 31
AlgorithmiqueLes Opérateurs
Les opérations possibles sur les variables dépendent de leur type
On ne peux pas par exemple multiplier des mots…
Pour le Type Réel
Powerpoint TemplatesPage 32
AlgorithmiqueLes Opérateurs
Pour le Type Entier
Powerpoint TemplatesPage 33
AlgorithmiqueLes Opérateurs
Pour le Type Caractère
Pour le Type Chaîne de caractères
Powerpoint TemplatesPage 34
AlgorithmiqueLes Opérateurs
Pour le Type Booléen
Powerpoint TemplatesPage 35
AlgorithmiqueExemples
Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?Variables A, B en EntierDébut
A ← 5B ← 2A ← BB ← A
Fin
Moralité : les deux dernières instructions permettent-elles d’échanger les deux valeurs de B et A ? Si l’on inverse les deux dernières instructions, cela change-t-il quelque chose ?
Powerpoint TemplatesPage 36
AlgorithmiqueCorrection
Instruction Etat des Variables
A ← 5 A = 5 B = ?
B ← 2 A = 5 B = 2
A ← B A = 2 B = 2
B ← A A = 2 B = 2
Les deux dernières instructions ne permettent donc pas d’échanger les deux valeurs de B et A, puisque l’une des deux valeurs (celle de A) est ici écrasée.
Si l’on inverse les deux dernières instructions, cela ne changera rien du tout, hormis le fait que cette fois c’est la valeur de B qui sera écrasée.
DébutA ← 5B ← 2A ← BB ← A
Fin
Powerpoint TemplatesPage 37
AlgorithmiqueExemples
Un classique absolu, qu’il faut absolument maîtriser :
écrire un algorithme permettant d’échanger les valeurs de deux variables A et B, et ce quel que soit leur contenu préalable.
SolutionDébut
…C ← AA ← BB ← C
FinRemarque
On est obligé de passer par une variable dite temporaire (la variable C).
Powerpoint TemplatesPage 38
AlgorithmiqueExercice
On dispose de trois variables A, B et C. Ecrivez un algorithme transférant à B la valeur de A, à C la valeur de B et à A la valeur de C (toujours quels que soient les contenus préalables de ces variables).
SolutionDébut
…D ← CC ← BB ← AA ← D
FinRemarqueEn fait, quel que soit le nombre de variables, une seule variable temporaire suffit…
Powerpoint TemplatesPage 39
AlgorithmiqueLes Instructions
Les Branchements
Le test booléen
Si condition alors
Instruction(s)
Sinon Instruction(s)
Fin si (fsi)
Powerpoint TemplatesPage 40
AlgorithmiqueLes Instructions
Les Branchements
Sélection de cas
Cas [variable]
1er cas: Instruction(s)
2ème cas: Instruction(s)
…
Cas échéant: Instruction(s)
Fin cas
Powerpoint TemplatesPage 41
AlgorithmiqueLes Instructions
Les Boucles
La boucle pour
Pour [variable] de v_début à v_fin faire
Instruction(s)
Fin Pour (fpour)
Powerpoint TemplatesPage 42
AlgorithmiqueLes Instructions
Les Boucles
La boucle tant que (while … do)
Tant que condition(s) vérifiée faire
Instruction(s)
Fin tant que (ftq)
Autre forme (do … while)
Faire
Instruction(s)
Tant que condition(s) vérifiée
Powerpoint TemplatesPage 43
AlgorithmiqueLes Instructions
Les Boucles
La boucle répéter (repeat … until)
Répéter
Instruction(s)
Jusqu’à condition de sortie
Powerpoint TemplatesPage 44
AlgorithmiqueLes Instructions
Les Boucles
Choix de la boucle
La règle est simple :
Si le nombre d’itérations est connu à priori, alors on utilise une boucle Pour.
Sinon Si l’instruction est exécutée au moins une seule fois, on utilise Répéter…jusqu’à (ou sa version faire…tant que)
Sinon on utilise la boucle Tant que … faire
Powerpoint TemplatesPage 45
AlgorithmiqueLes Procédures
Une procédure est un sous-programme
Sert à découper un programme en plusieurs morceaux
Chaque procédure définit une nouvelle instruction qu’on peut appeler en tout endroit du programme réutilisation de code
Découpage de programme analyse descendante du plus général au détail
Syntaxe
Procédure nom_procédure([Paramètres])
Début
Instruction(s)
Fin
Powerpoint TemplatesPage 46
AlgorithmiqueLes Fonctions
Une fonction est une procédure qui renvoie un résultat, de manière à ce qu’on puisse l’appeler dans une expression : y cos(x)+1
Syntaxe
Fonction nom_fonction([Paramètres])
Début
Instruction(s)
Retourner(résultat)
Fin
Powerpoint TemplatesPage 47
AlgorithmiqueComplexité Algorithmique
L’exécution d’un programme a un coût Le temps d’exécution L’espace mémoire requi
Aujourd’hui, point sensible temps
La théorie de la complexité algorithmique s'intéresse à l'estimation de l'efficacité des algorithmes.
Elle s'attache à la question : entre différents algorithmes réalisant une même tâche, quel est le plus rapide et dans quelles conditions ?
Illustration : Etude de la complexité et mesure des performances de quelques algorithmes bien connus
Tri par sélection Tri par insertion Tri par bulles Tri rapide
Powerpoint TemplatesPage 48
AlgorithmiqueComplexité Algorithmique
DominationLa notation grand O de Landau dénote le caractère dominé d'une fonction par rapport à une autre.DéfinitionSoient f et g deux fonctions de la variable réelle x. On dit que f est dominée par g en +∞, ou que g domine f en +∞, et on note
Lorsqu'il existe des constantes N et C telles que
Intuitivement, cela signifie que f ne croît pas plus vite que g.
Powerpoint TemplatesPage 49
AlgorithmiqueComplexité Algorithmique
Voici une liste de catégories de fonctions couramment utilisées en analyse.
notation croissance
O(1) constante
O(log(n)) logarithmique
O((log(n))c) polylogarithmique
O(n) linéaire
O(n log(n))parfois appelée « linéarithmique », ou « quasi-linéaire »
O(n2) quadratique
O(nc) polynomiale
O(cn) exponentielle, parfois « géométrique »
O(n!) factorielle
Powerpoint TemplatesPage 50
AlgorithmiqueComplexité Algorithmique
Règles utilesRègle 1:
La complexité d’un semble d’instructions est la somme des complexités de chacune d’elles.
Règle 2: Les opérations élémentaires telle que l’affectation, test, accès à un tableau, opérations logiques et arithmétiques, lecture ou écriture d’une variable simple ... etc, sont en O(1)
Règle 3:
Instruction if: maximum entre le then et le elseLe switch: maximum parmi les différents cas
Powerpoint TemplatesPage 51
AlgorithmiqueComplexité Algorithmique
Règles utilesRègle 4: Instructions de répétition1. 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.
Règle 5: Procédure et fonctionLeur complexité est déterminée par celle de leur corps. L’appel à une fonction est supposé prendre un temps constant en O(1)Notons qu’on fait la distinction entre les fonctions récursive et celles qui ne le sont pasDans le cas de la récursivité, le temps de calcul est exprimé comme une relation de récurrence.
Powerpoint TemplatesPage 53
AlgorithmiqueRécursivité
Définition: Une fonction est récursive si elle fait appel à elle-même
d’une manière directe ou indirecte La récursivité est une technique de programmation très
utile qui permet de trouver des solutions d’une grande élégance à un certain nombre de problèmes.
Attention!
Lorsqu’elle mal utilisée, cette subtilité informatique peut créer un code totalement inefficace.
Propriétés
La récursivité (appels de la fonction à elle-même) doit s’arrêter à un moment donné (test d’arrêt). Autrement, l’exécution va continuer indéfiniment
Un processus de réduction: à chaque appel, on doit se rapprocher de la condition d’arrêt.
Powerpoint TemplatesPage 54
AlgorithmiqueRécursivité
Exemple
Vision itérative: Un escalier de hauteur h c’est :
une séquence de h marches Vision récursive: Un escalier de hauteur h c’est :
une marche suivie d’un escalier de hauteur h−1
Powerpoint TemplatesPage 55
AlgorithmiqueRécursivité
Recette de récursivité S’assurer que le problème peut se décomposer en un ou
plusieurs sous-problèmes de même nature
Identifier le cas de base qui est le plus petit problème qui ne se décompose pas en sous-problèmes
Résoudre(P) = si P est un cas de base, le résoudre directement sinon
décomposer P en sous-problèmes P1, P2,... résoudre récursivement P1, P2,... combiner les résultats obtenus pour P1, P2,
…, pour obtenir la solution et avoir la solution au problème de départ.
Powerpoint TemplatesPage 56
AlgorithmiqueRécursivité
Fonctionnement Création d’une pile pour la sauvegarde entre autres des
paramètres d’appels de la procédure et la l’adresse de retour.
ExempleCalculer le factoriel de n, noté n!
Le problème est: Calculer le factoriel d'un nombre entier donné en entrée.
En entrée: Nous avons n nombre entiers qui sont plus grands ou égaux à 0.
Sortie: Nous avons un nombre entier qui représente le factoriel de n.
Powerpoint TemplatesPage 57
AlgorithmiqueRécursivité
Factorielfonction fact (n : Naturel) : NaturelDebut
si n=0 ou n=1 alorsretourner 1
sinonretourner n*fact(n-1)
FinsiFin
Exemple
Fact(4)=4*Fact(3) Fact(3)=3*Fact(2) Fact(2)=2*Fact(1) Fact(1)=1
4*6=243*2=62*1=2
1
Powerpoint TemplatesPage 58
AlgorithmiqueRécursivité
Empilage du contexte local Chaque procédure stocke dans une zone mémoire
les paramètres les variables locales
Cette zone s’appelle la pile car les données sont empilées lors de l ’appel d’une procédure
désempilées à la fin de la procédure
A chaque appel récursif, l ’ordinateur empile donc les variables locales les paramètres qui doivent changer à chaque appel
Powerpoint TemplatesPage 59
AlgorithmiqueRécursivité
Inverser une chaîne Fonction inverse(ch : chaîne)
débutl= Longueur(ch);
Si (l<=1) retourner ch;Sinon retourner
inverse(Sous-Chaîne(ch,2,l))& Ch(1);Fin SiFin
Exempleinverse(“abcd”)-> inverse(“bcd”)&”a”
inverse(“bcd”)-> inverse(“cd”)&”b”inverse(“cd”)->
inverse(“d”)&”c”dc
dcbdcba
Powerpoint TemplatesPage 60
AlgorithmiqueRécursivité
Récursivité terminaleDéfinition :
L'appel récursif est la dernière instruction et elle est isolée.
Exemple :fonction plus (a,b : Naturel) : natuel
débutsi b=0 alors
retourner asinon
retourner plus(a+1,b-1)Finsi
FinExécution
plus(4,2)=plus(5,1)=plus(6,0)=6
Powerpoint TemplatesPage 61
AlgorithmiqueRécursivité
Récursivité non terminaleDéfinition :L'appel récursif n'est pas la dernière instruction et/ou elle n'est pas isolée (fait partie d'une expression)Exemple :fonction plus (a,b : Naturel) : natuel
débutsi b=0 alors
retourner asinon
retourner 1+plus(a,b-1)Finsi
FinExécution
plus(4,2)=1+plus(4,1)=1+1+plus(4,0)=1+1+4=6
Powerpoint TemplatesPage 62
AlgorithmiqueRécursivité
Les Tours de Hanoï
Les tours de Hanoï est un jeu solitaire dont l'objectif est de déplacer les disques qui se trouvent sur une tour (par exemple ici la première tour, celle la plus a gauche) vers une autre tour (par exemple la dernière, celle la plus a droite) en suivant les règles suivantes :
on ne peut déplacer que le disque se trouvant au sommet d'une tour ;
on ne peut déplacer qu'un seul disque a la fois ; un disque ne peut pas être posé sur un disque plus petit.
Powerpoint TemplatesPage 63
AlgorithmiqueRécursivité
Les Tours de Hanoï
Etude du problème
Un peu de jeu
Pilier 1 Pilier 2 Pilier 3 Pilier 1 Pilier 2 Pilier 3
Pilier 1 Pilier 2 Pilier 3 Pilier 1 Pilier 2 Pilier 3
Powerpoint TemplatesPage 64
AlgorithmiqueRécursivité
Les Tours de Hanoï
Etude du problème
Ceci correspond à Hanoï avec n-1 disques
Reformulation du problème
Si on a "n" disques à déplacer alors :on déplace "n-1" disques vers le pilier intermédiaireon déplace le disque "n" du pilier initial vers le pilier finalon déplace les "n-1" disques du pilier intermédiaire vers le pilier final
Pilier 1 Pilier 2 Pilier 3 Pilier 1 Pilier 2 Pilier 3
Powerpoint TemplatesPage 65
AlgorithmiqueRécursivité
Les Tours de Hanoï
Algorithme
Procedure hanoi(nbdisk, source, destination: Naturels)Débutintermediaire = 6-(source+destination);Si (nbdisk > 0) Alors hanoi(nbdisk -1, source, intermediaire); Afficher("disque “& nbdisk &" de “&Source & "- >" & destination); hanoi(nbdisk-1, intermediaire, destination);Fin SiFin
Voir le programme en PHP par exemple
Powerpoint TemplatesPage 66
AlgorithmiqueRécursivité
Hanoï - Complexité
En général, on a 2n-1 déplacements pour n disques Soit O(2n) : complexité exponentielle Si par exemple un déplacement coûte 1 seconde Pour 64 disques, on a : 264-1=18.446.744.073.709.551.615 secondes C’est 584.942.417.355 soit 585 milliard années
disques 1 2 3 4 5 …
déplacements 1 3 7 15 31 …
Powerpoint TemplatesPage 67
AlgorithmiqueRécursivité
Efficacité de la Récursivité Un algorithme récursif est légèrement moins rapide qu’un
algorithme itératif équivalent Temps nécessaire à l ’empilage et au dépilage des données
La récursivité utilise plus de ressources mémoire pour empiler les contextes
La récursivité est plus « élégante » Les algorithmes récursifs sont souvent plus faciles à écrire
Powerpoint TemplatesPage 68
AlgorithmiqueLes Arbres
Structures de données En informatique, une structure de données est une
structure logique destinée à contenir des données, afin de leur donner une organisation permettant de simplifier leur traitement. Une structure de données implémente concrètement un type abstrait.
Différentes structures de données existent : Structures finies
constantes variables enregistrements structures composées finies
Structures indexées tableaux sur [1..n] tableaux sur [1..n][1..m] tableaux associatifs
Structures récursives listes arbres graphes
Powerpoint TemplatesPage 69
AlgorithmiqueStructures
Les Tableaux Un tableau de taille n est une structure très simple
constituée de emplacements consécutifs en mémoire. Il est donc possible d'accéder à un élément d'un tableau en temps constant O(1) pourvu que l'on connaisse sa position (ou indice). Un tableau est donc une structure très simple et très efficace.
Il n'est cependant pas possible de modifier la taille d'un tableau, ce qui est gênant pour un certain nombre d'algorithmes. On dit cette structure est statique. Le nombre d'éléments qu'elle contient ne peut pas varier.
Le principe d'un tableau est donc très simple : on stocke les éléments dans des cases, chaque case étant étiquetée d'un numéro (généralement appelé indice). Pour accéder à un élément particulier d'un tableau, on donne son indice.
Powerpoint TemplatesPage 70
AlgorithmiqueStructures
Les Listes Chaînées Une liste chaînée est une liste à accès séquentiel, où chaque
élément contient une valeur et une référence à l'élément suivant. L'intérêt d'une telle liste est que sa taille peut varier
dynamiquement sans soucis de la fragmentation de son stockage mémoire.
S'il est vrai que les tableaux sont stockés de manière contiguë en mémoire, il n'en va pas de même pour la liste chaînée, d'où sa plus grande souplesse d'emploi.
Agrandir la liste revient à créer un nouvel élément en mémoire et à le lier à la liste chaînée par une référence vers son emplacement mémoire.
A une liste chaînée sont associée les primitives ou fonctions de service suivantes:
Insérer Supprimer La liste est-elle vide ? Nombre d'éléments dans la liste
Powerpoint TemplatesPage 71
AlgorithmiqueStructures
Les Listes Chaînées
Liste simplement chaînée Un élément d'une liste simplement chaînée est constitué
d'une clé (la valeur de l'élément) et d'une référence à l'élément suivant (pointeur vers élément). Par convention, l'accès à une liste simplement chaînée est simplement un pointeur vers le premier élément de cette liste.
Primitives tete[L] qui a une liste L renvoie l'adresse de son premier
élément. succ[x] qui a un élément x renvoie l'adresse de son
successeur. cle[x] qui a un élément x renvoie sa valeur.
Powerpoint TemplatesPage 72
AlgorithmiqueStructures
Les Listes Chaînées
Liste simplement chaînée Insertion: Attention à l’ordre
Suppression: N’oubliez pas de supprimer l’élément de la mémoire.
Powerpoint TemplatesPage 73
AlgorithmiqueStructures
Les Listes Chaînées
Liste doublement chaînée Un élément d'une liste doublement chaînée est constitué
d'une clé, d'une référence à l'élément suivant et d'une référence arrière vers l'élément précédent. Par convention l'accès à une liste doublement chaînée est simplement un pointeur vers le premier élément de cette liste.
Powerpoint TemplatesPage 74
AlgorithmiqueStructures
Les Piles En informatique, une pile (stack) est une structure de
données de type LIFO (Last In, First Out), c'est à dire fonctionnant sur le principe «dernier arrivé, premier sorti». Les derniers éléments ajoutés à la pile seront les premiers à être récupérés.
On peut représenter une pile par une liste chaînée. Les insertions et suppressions sont faites seulement dans la queue de la liste.
Empiler/Dépiler sont les fonctions de base.
Powerpoint TemplatesPage 75
AlgorithmiqueStructures
Les Files En informatique, une file (queue) est une structure de
données de type FIFO (First In, First Out), c'est à dire fondée sur le principe «premier arrivé, premier sorti » . Les premiers éléments ajoutés à la file seront les premiers à être récupérés..
On peut représenter une file par une liste chaînée. Les insertions sont en queue et les suppressions sont faites dans la tête de la liste.
Enfiler/Défiler sont les fonctions de base.
Powerpoint TemplatesPage 76
AlgorithmiqueStructures
Les Arbres Définition : un arbre est une structure de données
composée d’un ensemble de nœuds. Chaque nœud contient l’information spécifique de l’application et des pointeurs vers d’autres nœuds (d’autres sous-arbres).
Définition récursive d'un arbre : Arbre vide Un seul noeud = racine Si on dispose d'un certain nombre d'arbres, on peut les
"raccrocher" à un nouveau nœud, qui devient racine.
A1 A2 A3
R
Sous arbre
Powerpoint TemplatesPage 77
AlgorithmiqueLes Arbres
NotionsRacine : C'est le noeud qui n'a pas de prédécesseur. La racine constitue la caractéristique d'un arbre. Dans l'exemple c'est a
Feuille : c'est le noeud qui n'a pas de successeur. Une feuille est aussi appelée un noeud externe. Dans l'exemple, les feuilles sont : c, i, j, e, g et h.
Nœud interne : c'est tout noeud qui admet au moins un successeur. Dans l'exemple, les noeuds internes sont : a, b, f et d.
Fils : c’est le successeur. Dans l'exemple, c, d et e sont les fils du noeud b.
a
fb
dc e g h
i j
Powerpoint TemplatesPage 78
AlgorithmiqueLes Arbres
NotionsFrères : ce sont les successeurs issus d'un même nœud. Dans l'exemple, c, d et e sont des frères.
Père : c'est un nœud qui admet au moins un successeur. Dans l'exemple, b est le père des nœuds c, d et e.
Sous arbre : C'est une portion de l'arbre. Dans l'exemple, le noeud f avec ces deux fils g et h constituent un sous arbre.
Descendants d’un nœud : ce sont tous les noeuds du sous arbre de racine noeud. Dans l'exemple, les descendants de h sont h, c, d, e, i et j.
a
fb
dc e g h
i j
Powerpoint TemplatesPage 79
AlgorithmiqueLes Arbres
Ascendants d’un nœud : ce sont tous les nœuds se trouvant sur la branche de la racine vers ce nœud. Dans l'exemple, les ascendants de d sont d, b et a. Les ascendants de g sont f et a.
Branche : Les ascendants d'une feuille constituent une branche de l'arbre. Dans l'exemple, les branches de l'arbre sont a-b-c, a-b-d-i, a-b-d-j, a-b-e, a-f-g et a-f-h.
Degré d’un nœud : C'est le nombre de ses fils. Dans l'exemple, le degré de b est 3.
Niveau d’un nœud : On dit que la racine a le niveau 0, ses fils ont le niveau 1, les fils des fils ont le niveau 2. etc... Dans l'exemple, a est de niveau 0, d est de niveau 2 et j est de niveau 3.
a
fb
dc e g h
i j
Powerpoint TemplatesPage 80
AlgorithmiqueLes Arbres
NotionsProfondeur de l’arbre : C'est le niveau maximal des feuilles de l'arbre. L'arbre de l'exemple est de profondeur 3.
Arité ou degré d’un arbre : c’est le maximum de fils qu’un nœud peut avoir (arité 3 dans l’exemple).
Arbre binaire : Un arbre binaire est un arbre tel que chaque nœud a au plus deux fils (ou successeurs). On parle de fils gauche et fils droit.
Dans la suite, on va étudier que les arbres binaires.
a
fb
dc e g h
i j
Powerpoint TemplatesPage 81
AlgorithmiqueLes Arbres
Représentation en mémoire On peut représenter un arbre binaire par une liste chaînée
A
C D
E
NULL NULL NULL
NULL NULL
Powerpoint TemplatesPage 82
AlgorithmiqueLes Arbres
Stratégies de parcours Il existe 2 méthodes classiques de parcours d'arbre :
Parcours en Profondeur, on part de la racine et on descend jusqu'à une première feuille avant de passer aux nœuds suivant puis remonter. Dans cette représentation, les feuilles apparaissent aux côtés de leur arborescence.
Parcours en Largeur, l’élément du niveau courant est noté puis on passe au fils de chacun d'eux. Cela peut s'apparenter à la vue dans un navigateur de fichier (Explorer Windows, Nautilus...).
Pour les parcours en profondeur, on a : La notation préfixée La notation infixée La notation post-fixée
Powerpoint TemplatesPage 83
AlgorithmiqueLes Arbres
Algorithmes de parcours Parcours Préfixé
Procédure Préfixé(racine)Début
Afficher(Racine);Préfixé(Racine->Gauche);Préfixé(Racine->Droite);
Fin Parcours Post-fixé
Procédure Postfixé(racine)Début
Postfixé(racine->Gauche);Postfixé(racine->Droite);Afficher(Racine);
Fin
Powerpoint TemplatesPage 84
AlgorithmiqueLes Arbres
Algorithmes de parcours Parcours Infixé
Procédure Infixé(racine)Début
Infixé(Racine->Gauche);Afficher(Racine);Infixé(Racine->Droite);
Fin