n - Free

publicité
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 : Entier
Début
A←5
B←2
A←B
B←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
Instructions
FinSi
Si booléen Alors
Instructions 1
Sinon
Instructions 2
FinSi
Les tests

Expression booléenne :



Variable
Condition (comparaison)
Opérateurs de comparaison :
==, !=, <, >, <=, >=

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"
FinSi
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"
FinSi
FinSi
Fin
Les boucles
Tantque booléen
…
Instructions
…
FinTantque
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
FinTantque
Fin
Une autre structure de boucle
Pour Compteur ← Initial à Final Pas ValeurDuPas
…
Instructions
…
FinPour
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
FinPour
Ecrire "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
Exemple
Procédure CalculCarrés (debut, fin : ENTIER)
Variable nb : ENTIER
nb ← debut
Tantque nb <= fin
Ecrire nb, nb*nb
nb ← 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) : Entier
Retourner 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
Paramètres d’entrée
Procédure
appelante
Procédure
appelé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



Tableau
Structure de donnée linaire




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


Arbre
Graphe
Récursivité


Définition : une fonction/procédure qui
s'appelle elle-même
Fonction Fact (n : Entier) : Entier
Si n = 0 Alors
Retourner 1
Sinon
Retourner Fact(n-1) * n
FinSi
FinFonction
Version itérative
Fonction Fact (n : Entier) : Entier
Variable f, i : Entier
f←1
Pour i ← 2 à n
f ← f*i
FinPour
Retourner 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 : factorielle
Fonction Fact (n : Entier) : Entier
Si n = 0 Alors
Retourner 1
Sinon
Retourner Fact(n-1) * n
FinSi
FinFonction
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

Déclaration :
type





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équentielle
Fonction RechSeq (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
FinSi
FinTantque
Retouner 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 dichotomique
Fonction RechDic (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 RechDic(A,mid+1, max, val)
Sinon
Retourner RechDic(A,min, mid-1, val)
FinSi
FinSi
FinSi
FinFonction
Recherche dichotomique : complexité

Tableau A est trié !

RechDic(A,0,n,val)

C(n) : nombre de comparaisons
C(n) = 1 + C(n/2)
C(1) = 1
=> C(n) = O(logn)
Algorithmes de tri

Versions lentes : O(n2)






Tri
Tri
Tri
Tri
…
par sélection
à bulles
par insertion
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
FinPour
FinProcédure
Tri par sélection : complexité

Meilleur cas (le tableau est déjà trié) :

Nombre de comparaisons
Nombre d’échanges

Complexité : O(n²)


Pire cas (le tableau est trié en ordre inverse) :

Nombre de comparaisons
Nombre d’échanges

Complexité : O(n²)


: (n-1)+(n-2)+…+1 = n(n-1)/2
:0
Moyenne : O(n²)
: n(n-1)/2
: n-1
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 | 9
27 | 1 | 63 | 64 | 58 | 14 | 9 | 72
1 | 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 ← vrai
Tantque 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
FinPour
FinTantQue
FinProcédure
Tri à bulles : complexité

Meilleur cas (le tableau est déjà trié) :

Nombre de comparaisons
Nombre d’échanges

Complexité : O(n)


Pire cas (le tableau est trié en ordre inverse) :

Nombre de comparaisons
Nombre d’échanges

Complexité : O(n²)


: n-1
:0
Moyenne : O(n²)
: O(n²)
: O(n²)
Comparaisons des algorithmes de tri (lents)
Comparaisons des algorithmes de tri (rapides)
Téléchargement