Les lments de base de lalgorithmique Nga Nguyen
Les éléments de base de l’algorithmique Nga Nguyen - EISTI
Qu’est-ce que l’algorithmique ? n … c’est une suite d’instructions, qui une fois exécutée correctement, conduit à un résultat donné. n Etape essentielle qui précède la programmation n n indépendante des particularités de tel ou tel langage pseudo-code
Plan 1. 2. 3. 4. 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 n n n n Variable Expression Affectation Lecture Ecriture Tests Boucles
Les variables n n stocker provisoirement des valeurs déclaration des variables n n nom type de codage (entier, réel, booléen, date, caractère, string, …) + taille
Instruction d’affectation n une affectation : variable ← expression n quelles seront les valeurs des variables A et B après exécution des instructions suivantes ? Variable A, B : Entier Début A← 5 B← 2 A←B B←A Fin n comment faire pour échanger les valeurs de A et B ?
Expressions et opérateurs n n Une expression est un ensemble de valeurs, reliées par des opérateurs, et équivalent à une seule valeur Opérateurs n numériques : +, -, *, /, ^ alphanumériques : & booléens : et, ou, non, xor
Lecture et écriture n n 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 Nom. Famille
Les tests Si booléen Alors Instructions Fin. Si Si booléen Alors Instructions 1 Sinon Instructions 2 Fin. Si
Les tests n Expression booléenne : n n n Variable Condition (comparaison) Opérateurs de comparaison : ==, !=, <, >, <=, >= n Opérateurs logique : et, ou, non, xor
Exemple Variable m, n : Entier Début Ecrire "Entrez deux nombres : " Lire m, n Si (m > 0 ET n > 0) OU (m < 0 ET n < 0) Alors Ecrire "Leur produit est positif" Sinon Ecrire "Leur produit est négatif" Fin. Si Fin
Tests imbriqués Variable Temp : Entier Début Ecrire "Entrez la température de l’eau : " Lire Temp Si 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" Fin. Si Fin
Les boucles Tantque booléen … Instructions … Fin. Tantque
Exemple : contrôle de saisie Variable Rep : Caractère Début Ecrire "Voulez vous un café ? (O/N)" Lire Rep Tantque Rep <> "O" et Rep <> "N" Lire Rep Fin. Tantque Fin
Une autre structure de boucle Pour Compteur ← Initial à Final Pas Valeur. Du. Pas … Instructions … Fin. Pour
Exemple : calculer la somme 1+2+…+N Variable N, i, Som : Entier Début Ecrire "Entrez un nombre : " Lire N Som ← 0 Pour i ← 1 à N Som ← Som + i Fin. Pour Ecrire "La somme est : ", Som Fin
Cours 2 : Procédures et fonctions n n n Procédure Fonction Variable globale et locale
Procédure n n 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 Fin. Procédure
Exemple Procédure Calcul. Carrés (debut, fin : ENTIER) Variable nb : ENTIER nb ← debut Tantque nb <= fin Ecrire nb, nb*nb nb ← nb + 1 Fin. Tantque Fin. Procédure
Appel d’une procédure n nom(liste de paramètres effectifs) Calcul. Carres(1, 10) … Calcul. Carres(20, 25)
Fonction n Pour renvoyer une valeur à la procédure / fonction appelante Fonction nom(liste de paramètres) : type de retour Variables locales Instructions Retourner … Fin. Fonction
Exemple n Déclaration : Fonction Calcul. Carré (nb : ENTIER) : Entier Retourner nb*nb Fin. Fonction n Appel : x ← Calcul. Carré(5)
Fonctions prédéfinies n Fonctions de texte : n n n Len(chaîne) : nombre de caractères d’une chaîne Mid(chaîne, n 1, n 2) : extrait de la chaîne, commençant au caractère n 1 et faisant n 2 caractères de long. Trouve(chaîne 1, chaîne 2) : position de chaîne 2 dans chaîne 1 Ascii(c) Char(n) …
Fonctions prédéfinies n Fonctions numériques : n n n Ent(n) : partie entière d’un nombre Mod(n 1, n 2) : reste de la division de n 1 par n 2 Alea() : nombre aléatoire … Fonctions de conversion …
2 types de paramètres Paramètres d’entrée Procédure appelante Procédure appelée Paramètres de sortie Procédure Calcul. Carre(E nb : Entier, S res : Entier)
2 modes de passage n 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 n 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 paramètre de sortie non oui
Variable locale et globale n Variable locale (privée) : n n n 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) : n n une autre possibilité de communiquer entre les procédures Visible par tout le programme
Une application bien programmée ? n 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. n n n 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 n n n Structures de données Récursif vs itératif Complexité
Structures de données n Variable scalaire n n n Tableau Structure de donnée linaire n n Entier, réel, booléen, caractère, string 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 n n Arbre Graphe
Récursivité n n Définition : une fonction/procédure qui s'appelle-même Fonction Fact (n : Entier) : Entier Si n = 0 Alors Retourner 1 Sinon Retourner Fact(n-1) * n Fin. Si Fin. Fonction
Version itérative Fonction Fact (n : Entier) : Entier Variable f, i : Entier f← 1 Pour i ← 2 à n f ← f*i Fin. Pour Retourner f Fin. Fonction
Avantages vs inconvénients n n n 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é n Un ’bon’ algorithme ? n n Répond correctement au problème posé Rapide (complexité en temps) Pas trop de mémoire (complexité en espace) La performance d’un algorithme n n Taille, structure de donnée d’entrée Nombre d’opérations élémentaires n n opérations arithmétiques affectations instructions de contrôle etc.
Pire cas, meilleur cas et moyenne n 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 n La complexité dans le “meilleur cas” : Min C(d) d donnée de taille n 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 n Soient f, g : Nat -> Nat f(n) = O(g(n)) ssi il existe 2 constantes positives n 0 et B t. q n ≥ n 0, f(n) ≤ Bg(n) n Un algorithme en n n O(1) : complexité constante O(n) : complexité linaire O(na) : complexité polynomiale O(en) : complexité exponentielle …
Exemple 1 : le plus petit élément n int plus. Petit (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 : n n Þ n nombre d’affectations : 2 + n + (n-1) nombre de comparaisons : n + (n-1) complexité : O(n) En moyenne ?
Exemple 2 : factorielle Fonction Fact (n : Entier) : Entier Si n = 0 Alors Retourner 1 Sinon Retourner Fact(n-1) * n Fin. Si Fin. Fonction 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); Fin. Si Fin. Procédure C(n) : nombre de déplacements C(n+1) = 2 C(n) + 1 => exponentielle
Cours 4 : Tableaux n n Structure de données Algorithmes de recherche : n n n Séquentielle Dichotomique Algorithmes de tri : n n Tri par sélection Tri à bulles
Tableaux n But : regrouper dans une structure plusieurs valeurs de même n Déclaration : A[n] : Tableau de T type n n 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équentielle Fonction Rech. Seq (A : Tableau de T, n : Entier, val : T) : Booléen Variable i : Entier, trouve : Booléen i ← 1 trouve ← faux Tantque (i ≤n) ET (NOT trouve) Si A[i] = val Alors trouve ← vrai Sinon i ← i+1 Fin. Si Fin. Tantque Retouner trouve Fin. Fonction
Recherche séquentielle : complexité n Pire cas : n nombre de comparaisons : n complexité : O(n) Moyenne : n n n p : probabilité que val soit dans A places équiprobables complexité : ∑pii + (1 -p)n = p(n+1)/2 + (1 -p)n
Recherche dichotomique Fonction Rech. Dic (A: Tableau de T, min: Entier, max: Entier, val: T) : Booléen Variable mid : Entier, Si (min > max) Alors Retourner faux Sinon mid = (min + max) /2 Si (A[mid] == val) Alors Retourner vrai Sinon Si (A[mid] > val) Alors Retourner Rech. Dic(A, mid+1, max, val) Sinon Retourner Rech. Dic(A, min, mid-1, val) Fin. Si Fin. Fonction
Recherche dichotomique : complexité n Tableau A est trié ! n Rech. Dic(A, 0, n, val) n C(n) : nombre de comparaisons C(n) = 1 + C(n/2) C(1) = 1 => C(n) = O(logn)
Algorithmes de tri n Versions lentes : O(n 2) n n n Tri par sélection Tri à bulles Tri par insertion Tri de shell (shell sort) … Versions rapides : O(nlogn) n n Tri rapide (quick sort) Tri fusion (merge sort) Tri pas tas (heap sort) …
Tri par sélection n n 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 Tri. Selection(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 Fin. Si Fin. Pour Si posmin ≠ i Alors temp ← T[posmin] ← T[i] ← temp Fin. Si Fin. Pour Fin. Procédure
Tri par sélection : complexité n Meilleur cas (le tableau est déjà trié) : n Nombre de comparaisons Nombre d’échanges Þ Complexité : O(n²) n n Pire cas (le tableau est trié en ordre inverse) : n Nombre de comparaisons Nombre d’échanges Þ Complexité : O(n²) n n : (n-1)+(n-2)+…+1 = n(n-1)/2 : 0 Moyenne : O(n²) : n(n-1)/2 : n-1
Tri à bulles n Principe : n n n 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 | 9 27 | 1 | 63 | 64 | 58 | 14 | 9 | 72 1 | 27 | 63 | 58 | 14 | 9 | 64 | 72
Tri à bulles : algorithme Procédure Tri. Bulle(ES A : Tableau de T, n : Entier) Variable desordre : Booléen, i : Entier, temp : T desordre ← vrai Tantque desordre ← faux Pour i ← 1 à n-1 Si A[i] > A[i+1] Alors temp ← A[i] ← A[i+1] ← temp desordre ← vrai Fin. Si Fin. Pour Fin. Tant. Que Fin. Procédure
Tri à bulles : complexité n Meilleur cas (le tableau est déjà trié) : n Nombre de comparaisons Nombre d’échanges Þ Complexité : O(n) n n Pire cas (le tableau est trié en ordre inverse) : n Nombre de comparaisons Nombre d’échanges Þ Complexité : O(n²) n n : n-1 : 0 Moyenne : O(n²)
Comparaisons des algorithmes de tri (lents)
Comparaisons des algorithmes de tri (rapides)
- Slides: 56