les éléments de base de lalgorithmique nga nguyen - eisti

Post on 04-Apr-2015

119 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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)

top related