Les éléments de base de l’algorithmique Nga Nguyen - EISTI
Les éléments de base de l’algorithmique
Nga Nguyen - EISTI
Qu’est-ce que l’algorithmique ?
… c’est une suite d’instructions, qui une fois exécutée correctement, conduit à un résultat donné.
Etape essentielle qui précède la programmation indépendante des particularités de tel ou tel
langage pseudo-code
Plan
• Cours 1 : éléments de base • Cours 2 : procédures et fonctions• Cours 3 : notions complémentaires :
récursivité, complexité, …• Cours 4 : structure de données -
tableau
Cours 1 : Les éléments de base
Variable Expression Affectation Lecture Ecriture Tests Boucles
Les variables
stocker provisoirement des valeurs déclaration des variables
nom type de codage (entier, réel, booléen,
date, caractère, string, …) + taille
Instruction d’affectation une affectation : variable ← expression
quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?
Variable A, B : EntierDébut
A ← 5B ← 2A ← BB ← A
Fin comment faire pour échanger les valeurs de A
et B ?
Expressions et opérateurs
Une expression est un ensemble de valeurs, reliées par des opérateurs, et équivalent à une seule valeur
Opérateurs numériques : +, -, *, /, ^ alphanumériques : & booléens : et, ou, non, xor
Lecture et écriture Lecture : rentrer des valeurs au
clavier pour qu’elles soient utilisées par le programme
Ecriture : communiquer des valeurs à l’utilisateur en les affichant à l’écran
Ecrire "Entrez votre nom : "
Lire NomFamille
Les tests
Si booléen Alors InstructionsFinSi
Si booléen Alors Instructions 1Sinon Instructions 2FinSi
Les tests
Expression booléenne : Variable Condition (comparaison)
Opérateurs de comparaison : ==, !=, <, >, <=, >=
Opérateurs logique : et, ou, non, xor
Exemple
Variable m, n : EntierDébut
Ecrire "Entrez deux nombres : "Lire m, nSi (m > 0 ET n > 0) OU (m < 0 ET n <
0) Alors Ecrire "Leur produit est positif"
Sinon Ecrire "Leur produit est négatif"
FinSiFin
Tests imbriqués
Variable Temp : EntierDébut
Ecrire "Entrez la température de l’eau :"Lire TempSi Temp <= 0 Alors
Ecrire "C’est de la glace"Sinon
Si Temp < 100 Alors Ecrire "C’est du liquide" Sinon Ecrire "C’est de la vapeur" FinSi
FinSiFin
Les boucles
Tantque booléen … Instructions …
FinTantque
Exemple : contrôle de saisie
Variable Rep : CaractèreDébut
Ecrire "Voulez vous un café ? (O/N)"Lire RepTantque Rep <> "O" et Rep <>
"N" Lire Rep
FinTantqueFin
Une autre structure de boucle
Pour Compteur ← Initial à Final Pas ValeurDuPas…Instructions…
FinPour
Exemple : calculer la somme 1+2+…+N
Variable N, i, Som : EntierDébut
Ecrire "Entrez un nombre : "Lire NSom ← 0Pour i ← 1 à N
Som ← Som + iFinPourEcrire "La somme est : ", Som
Fin
Cours 2 : Procédures et fonctions
Procédure Fonction Variable globale et locale
Procédure une suite d’instructions réalisant une
certaine tâche, à la quelle on donne un nom pour qu’on puisse l’appeler ultérieurement
déclaration :Procédure nom(liste de paramètres)
Variables locales
Instructions
FinProcédure
ExempleProcédure CalculCarrés (debut, fin : ENTIER)
Variable nb : ENTIERnb ← debutTantque nb <= fin
Ecrire nb, nb*nbnb ← nb + 1
FinTantque FinProcédure
Appel d’une procédure nom(liste de paramètres effectifs)
CalculCarres(1,10)…CalculCarres(20,25)
Fonction Pour renvoyer une valeur à la procédure /
fonction appelante
Fonction nom(liste de paramètres) : type de retour
Variables locales
Instructions
Retourner …FinFonction
Exemple
Déclaration : Fonction CalculCarré (nb : ENTIER) :
EntierRetourner nb*nb
FinFonction
Appel : x ← CalculCarré(5)
Fonctions prédéfinies Fonctions de texte :
Len(chaîne) : nombre de caractères d’une chaîne
Mid(chaîne,n1,n2) : extrait de la chaîne, commençant au caractère n1 et faisant n2 caractères de long.
Trouve(chaîne1,chaîne2) : position de chaîne2 dans chaîne1
Ascii(c) Char(n) …
Fonctions prédéfinies Fonctions numériques :
Ent(n) : partie entière d’un nombre Mod(n1,n2) : reste de la division de n1 par
n2 Alea() : nombre aléatoire …
Fonctions de conversion …
2 types de paramètres
Procédure
appelante
Procédure
appelée
Paramètres d’entrée
Paramètres de sortie
Procédure CalculCarre(E nb : Entier, S res : Entier)
2 modes de passage Passage par valeur :
la procédure appelée dispose d'une copie de la valeur; elle peut la modifier, l'information initiale dans l’appelante n'est pas affectée par ces modifications
Passage par référence : la procédure appelée modifie directement la variable en utilisant sa référence (adresse mémoire)
Procédure Bidule(titi : Caractère par valeur, toto : Caractère par
référence)
Relation entre type et mode de passage
d’argument
passage par valeur
passage par référence
paramètre d’entrée
oui oui
paramètre de sortie
non oui
Variable locale et globale Variable locale (privée) :
déclarée au sein d'une procédure ou d'une fonction
N’est visible que par cette procédure / fonction
Variable globale (publique) : une autre possibilité de communiquer
entre les procédures Visible par tout le programme
Une application bien programmée ?
est une application à l'architecture claire, dont les différents modules font ce qu'ils disent, disent ce qu'il font, et peuvent être testés (ou modifiés) un par un sans perturber le reste de la construction.
limiter au minimum l'utilisation des variables globales.
regrouper sous forme de modules distincts tous les morceaux de code qui possèdent une certaine unité fonctionnelle
faire de ces modules des fonctions lorsqu'ils renvoient un résultat unique, et des sous-procédures dans tous les autres cas
Cours 3 : Notions complémentaires
Structures de données Récursif vs itératif Complexité
Structures de données Variable scalaire
Entier, réel, booléen, caractère, string Tableau Structure de donnée linaire
Pile : liste où l'insertion et la suppression ne se font que d'un seul et même côté (LIFO)
File : liste où l'insertion d'un côté, et la suppression de l'autre (FIFO)
Liste : insertions et suppressions se font non seulement aux extrémités, mais aussi à l'intérieur de la liste.
Structure de donnée non linaire Arbre Graphe
Récursivité Définition : une fonction/procédure qui
s'appelle elle-même
Fonction Fact (n : Entier) : EntierSi n = 0 Alors
Retourner 1Sinon
Retourner Fact(n-1) * nFinSi
FinFonction
Version itérative Fonction Fact (n : Entier) : Entier
Variable f, i : Entier f ← 1
Pour i ← 2 à n f ← f*i
FinPourRetourner f
FinFonction
Avantages vs inconvénients
très économique pour le programmeur : simple et intuitive
très dispendieuse de ressources machine : utilisation de pile
tout problème formulé en termes récursifs peut également être formulé en termes itératifs !
Complexité Un ’bon’ algorithme ?
Répond correctement au problème posé Rapide (complexité en temps) Pas trop de mémoire (complexité en espace)
La performance d’un algorithme Taille, structure de donnée d’entrée Nombre d’opérations élémentaires
opérations arithmétiques affectations instructions de contrôle etc.
Pire cas, meilleur cas et moyenne La complexité dans le “pire cas” :
Max C(d) d donnée de taille n
où C(d) est le nombre d’opérations élémentaires pour exécuter l’algorithme sur la donnée d’entrée d
La complexité dans le “meilleur cas” : Min C(d)
d donnée de taille n La complexité en moyenne :
∑ ∏(d)C(d) d donnée de taille n
où ∏(d) est la probabilité d’avoir en entrée une instance d parmi toutes les données de taille n
Notation asymptotique Soient f, g : Nat -> Nat
f(n) = O(g(n)) ssi il existe 2 constantes positives n0 et B t.q n ≥ n0, f(n) ≤ Bg(n)
Un algorithme en O(1) : complexité constante O(n) : complexité linaire O(na) : complexité polynomiale O(en) : complexité exponentielle …
Exemple 1 : le plus petit élément
int plusPetit (int[] x) {int k = 0;int n = length(x);for (int i = 1; i < n; i++) {
if (x[i] < x[k]) k = i;}return k;
} Au pire cas :
nombre d’affectations : 2 + n + (n-1) nombre de comparaisons : n + (n-1) complexité : O(n)
En moyenne ?
Exemple 2 : factorielleFonction Fact (n : Entier) : Entier
Si n = 0 AlorsRetourner 1
Sinon Retourner Fact(n-1) * n
FinSiFinFonction
C(n) : nombre de comparaisons C(n) = 1 + C(n-1)C(0) = 1
=> complexité : O(n)
Exemple 3 : Tours de Hanoi
Tours de Hanoi (suite)Procédure Déplacer (nombre : Entier, de : Entier, à :
Entier, par : Entier) Si nombre > 0 Alors
Déplacer (nombre-1, de, par, à); Bouger-un-disque de, à; Déplacer (nombre-1, par, à, de);
FinSi FinProcédure
C(n) : nombre de déplacements C(n+1) = 2C(n) + 1 => exponentielle
Cours 4 : Tableaux
Structure de données Algorithmes de recherche :
Séquentielle Dichotomique
Algorithmes de tri : Tri par sélection Tri à bulles
Tableaux But : regrouper dans une structure plusieurs valeurs de
même type
Déclaration : A[n] : Tableau de T nom du tableau : A taille de tableau : n type d’élément : T indice : A[i], 1 ≤ i≤ n
Exemple : Mois[12] : Tableau de Caractère Mois = {"janvier", "février", …, "décembre"}Mois[5] = "mai"
Recherche séquentielleFonction RechSeq (A : Tableau de T, n : Entier, val : T) : Booléen
Variable i : Entier, trouve : Booléen i ← 1trouve ← fauxTantque (i ≤n) ET (NOT trouve)
Si A[i] = val Alorstrouve ← vrai
Sinon i ← i+1
FinSiFinTantqueRetouner trouve
FinFonction
Recherche séquentielle : complexité
Pire cas : nombre de comparaisons : n complexité : O(n)
Moyenne : p : probabilité que val soit dans A places équiprobables complexité :
∑pii + (1-p)n = p(n+1)/2 + (1-p)n
Recherche dichotomiqueFonction RechDic (A:Tableau de T, min:Entier, max:Entier, val:T) : Booléen
Variable mid : Entier, Si (min > max) Alors Retourner fauxSinon
mid = (min + max) /2Si (A[mid] == val) Alors Retourner vraiSinon
Si (A[mid] > val) Alors Retourner RechDic(A,mid+1, max, val) Sinon
Retourner RechDic(A,min, mid-1, val) FinSi
FinSiFinSi
FinFonction
Recherche dichotomique : complexité
Tableau A est trié !
RechDic(A,0,n,val)
C(n) : nombre de comparaisonsC(n) = 1 + C(n/2)
C(1) = 1
=> C(n) = O(logn)
Algorithmes de tri Versions lentes : O(n2)
Tri par sélection Tri à bulles Tri par insertion Tri de shell (shell sort) …
Versions rapides :O(nlogn) Tri rapide (quick sort) Tri fusion (merge sort) Tri pas tas (heap sort) …
Tri par sélection Technique : à chaque étape, on met en
bonne position l’élément le plus petit. Exemple :
27 | 63 | 1 | 72 | 64 | 58 | 14 | 9
1 | 63 | 27 | 72 | 64 | 58 | 14 | 9
1 | 9 | 27 | 72 | 64 | 58 | 14 | 63
1 | 9 | 14 | 72 | 64 | 58 | 27 | 63
Tri par sélection : algorithme
Procédure TriSelection(ES A : Tableau de T, n : Entier)Variable i, j : Entier, temp : T Pour i ← 1 à n-1 posmin ← i Pour j ← i + 1 à n Si T[j] < T[posmin] Alors posmin ← j FinSi FinPour Si posmin ≠ i Alors temp ← T[posmin] T[posmin] ← T[i] T[i] ← temp FinSi
FinPourFinProcédure
Tri par sélection : complexité Meilleur cas (le tableau est déjà trié) :
Nombre de comparaisons : (n-1)+(n-2)+…+1 = n(n-1)/2
Nombre d’échanges : 0
Complexité : O(n²)
Pire cas (le tableau est trié en ordre inverse) : Nombre de comparaisons : n(n-1)/2 Nombre d’échanges : n-1
Complexité : O(n²)
Moyenne : O(n²)
Tri à bulles Principe :
tout élément est plus petit que celui qui le suit compare chaque élément avec l’élément qui le suit.
Si l’ordre n’est pas bon, on permute ces deux éléments. Et on recommence jusqu’à ce que l’on n’ait plus aucune permutation à effectuer
Exemple :27 | 63 | 1 | 72 | 64 | 58 | 14 | 927 | 1 | 63 | 64 | 58 | 14 | 9 | 721 | 27 | 63 | 58 | 14 | 9 | 64 | 72
Tri à bulles : algorithme Procédure TriBulle(ES A : Tableau de T, n : Entier)
Variable desordre : Booléen, i : Entier, temp : T desordre ← vraiTantque desordre desordre ← faux Pour i ← 1 à n-1 Si A[i] > A[i+1] Alors temp ← A[i] A[i] ← A[i+1] A[i+1] ← temp desordre ← vrai FinSi FinPourFinTantQue
FinProcédure
Tri à bulles : complexité Meilleur cas (le tableau est déjà trié) :
Nombre de comparaisons : n-1 Nombre d’échanges : 0
Complexité : O(n)
Pire cas (le tableau est trié en ordre inverse) : Nombre de comparaisons : O(n²) Nombre d’échanges : O(n²)
Complexité : O(n²)
Moyenne : O(n²)
Comparaisons des algorithmes de tri (lents)
Comparaisons des algorithmes de tri (rapides)