Vous êtes sur la page 1sur 7
IF109 : Algorithmique et structures de données Supports du cours Le cours s’inspire de :

IF109 : Algorithmique et structures de données

Supports du cours

Le cours s’inspire de :

Introduction à l’algorithmique.

Cormen, Leiserson, Rivest, Stein 2 e édition

How to think about algorithms. Jeff Edmond. 2008

Polycopié Prof. Robert Cori Supports de cours

Transparents Prof. A. Milani

Cori Supports de cours  Transparents Prof. A. Milani Algorithmique et structures de données Introduction aux

Algorithmique et structures de données

Introduction aux algorithmes

Qu’est ce qu’un algorithme?

Un algorithme est une procédure de calcul bien définie permettant de résoudre un problème donné

 

4

 

Problème

Un problème est la relation désirée entre l’entrée (une valeur ou un ensemble de valeurs) et la sortie (une valeur ou un ensemble de valeurs)

 

Une instance d’un problème est tout jeu de données de ce problème

L’algorithme est la suite d’étapes de calcul qui transforment l’entrée en sortie

2

5

 

Du problème à l’algorithme

Les étapes typiques dans la construction des algorithmes sont :

 

Spécifier formellement le problème

Séparer le problème en morceaux plus petits et typiquement plus faciles

 

Construction de l’algorithme: pour chaque sous-problème, un algorithme doit être construit pour le résoudre

6

De l’algorithme au programme

Implémenter un algorithme signifie le

traduire dans un

programmation (c, java, c++, etc.) pour

pouvoir l’exécuter

langage de

à

l’aide

d’un

ordinateur Pour implémenter l’algorithme il faut choisir la façon de représenter les donnéesstructures des données

7

Construction de l’algorithme

Concevoir et décrire l’algorithme Vérifier la correction: l’algorithme termine pour chaque instance en entrée en produisant la bonne sortie Analyser l’algorithme: comprendre les ressources nécessaires à un algorithme (temps de calcul, espace de mémoire etc); établir si un algorithme est plus efficace qu’un autre

8

Comme décrire un algorithme

Langage naturel description imprécise Langage de Description Algorithmique

aussi appelé LDA ou pseudo-code

syntaxe claire et concise

abstrait des langages de programmation (e.g., C, Java)

9

Pseudo-code Algorithme

Algo(a,b) ------; --------; --------------; ---------; ---------; --------------;

--------------; ---------; ---------; --------------;  Entête de l’algorithme  Nom de l’algorithme:

Entête de l’algorithme

Nom de l’algorithme:

Algo

entrée: a,b

Corps de l’algorithme:

instructions

; séparateur

d'instruction

10

Algorithme et données

Pour résoudre le problème un algorithme a besoin de représenter, organiser et manipuler les données (que ce soit des entrées, des données auxiliaires ou le résultat)

Variable

11

Une variable possède

un nom : un caractère ou une chaîne de caractères

un type : booléen, entier, réel, tableau, type complexe …

une valeur : Cette valeur peut varier pendant l’exécution de l’algorithme

12

Affectation d'un variable

xE

x est le nom de la variable E est une expression calculable

E peut inclure des variables des variables, y compris la variable x elle-même

range la valeur de E dans la

variable x

Affectation

xE;

13

1.évaluer E :

chaque variable de E est remplacée par sa valeur courante puis les opérations de E sont effectuées sur ces valeurs

1.La valeur de x devient égale au résultat de l'évaluation

Affectation: Exemples

entier x ; /* déclaration de variables */ /* x va contenir des entiers */ /* valeur initiale = 0 */ entier y; /* autre variable non-initialisée */ /* valeur initiale non définie */ yx+3; yy+1; yx*y;

15

Tableau

Un tableau permet de manipuler un grand nombre de variables de même type en utilisant un seul nom pour le tableau et un entier positif, appelé indice, qui permet d’avoir accès à toutes les variables

type T[1

n]

variable de type type

: déclaration d’un tableau de n

Les «cases» d’un tableau T de taille n sont repérées par: T[1], T[2], …T[n]

Chaque T[i] i{1,2,…,n} est une variable

16

Tableau : exemple

entier T[3];

/* déclaration d'un tableau d'entiers de taille 3*/

entier s ← 0 T[1] ← 1; T[2] ← 2; T[3] ← 3; s ← T[1] + T[2] + T[3];

Matrice

Une matrice est un tableau à deux dimensions

Soit M une matrice de taille n×m (n lignes et m colonnes), M[i][j] est la «case» de M correspondant à la i-ème ligne et à la j-ème colonne

Type M[1

n][1

m]

: déclaration d’une matrice

n×m dont les variables sont de type type

Chaque M[i][j] i{1,2,…,n} et j{1,2,…,m} est une variable

18

Instruction retourner

retourner E;

renvoie la valeur de l’expression E Lorsque cette instruction est exécutée, l’algorithme s’arrête

19

Instruction conditionnelle

si (condition)

alors

instruction1

finsi

condition est une expression booléenne

si condition est évaluée VRAI, exécute

instruction1

sinon ne fait rien

20

Instruction conditionnelle

si (condition)

condition est une

alors

expression booléenne

instruction1

sinon

instruction2

finsi

si condition est

évaluée VRAI,

exécute

instruction1

sinon exécute

instruction2

21

Expression Booléenne

C’est une expression qui s’évalue à

VRAI ou FAUX

Peut contenir des opérateurs de comparaisons

== égalité

!= différent de

<, ≤ inférieur, inférieur ou égal

>, ≥ supérieur, supérieur ou égal

 

22

Expression Booléenne E

On peut combiner des opérateurs de comparaison à l’aide des opérateurs ET, OU, NON

E(opérande1) ET (opérande2)

est évaluée à VRAI si et seulement si les deux opérandes sont évalués à VRAI

E

E(opérande1) OU (opérande2)

est évaluée à VRAI si et seulement si au moins un des deux opérandes est évalués à VRAI

E

ENON (opérande)

la valeur de E est l’opposée de la valeur de son

opérande

 

23

Boucle

Permet d’effectuer une instruction ou une suite d’instructions plusieurs fois

On utilisera les boucle tant que (while) et pour (for) pour structurer une suite d’instructions

24

Boucle tant que

Permet d’effectuer une instruction ou une suite d’instructions tant que une expression booléenne condition est évaluée VRAI

tant que(condition)

instruction1;

instruction2;

fin tant que

25

Boucle tant que

A chaque tour de boucle, la condition est évaluée, et tant que sa valeur est VRAI, les instructions sont effectuées

Attention : si la condition est incorrecte il est possible de boucler indéfiniment

26

Boucle pour

Permet de répéter une instruction ou une suite d’instructions un nombre donné de fois Pour (variable entière) de (expr. entière) à (expr. entière) faire

instruction1;

instruction2;

Fin pour

27

Un problème de calcul

Problème du Plus Grand Diviseur Commun Calculer le plus grand diviseur commun à deux nombre entiers positifs

Entrée: deux entiers positifs a,b Sortie: le plus grand diviseur commun à a et b

Exemple d’instance les deux entiers 2 et 5

28

Algorithme d’Euclide (1)

Soit a,b entiers positifs, a >= b

Si b divise a alors le PGDC est égal à b

Sinon pgcd(a,b) = pgcd(b, r) où r est le reste de la div. Euclidienne de a par b

29

Algorithme d’Euclide (2)

Idée de l'algorithme :

procèder par étapes, en remplaçant à chaque étape le couple (a,b) avec le couple (b,r) où r est le reste de la division de a par b

Le calcul termine quand r est égal à 0

Le PGDC est égal au dernier diviseur

Algorithme PGCD (ou d’Euclide)

Pgcd(x,y) /* x >= y entiers positifs */

entier

entier

tant que (b!=0) ra mod b;

ax;

by;

ab; br; fin tant que retourner a;

/* reste de la div. Eucl. de a par b */

 

Une exécution

31

Instance : 14, 8

 

Étape

a

b

a mod b

 

initialement

14

8

6

1

8

6

2

2

6

2

0

 

32

Problème Somme des n Premiers Entiers Positifs

Calculer la somme des n premiers entiers positifs

Entrée: Un entier positif nN

n

Sortie: S ( n )= 1 + 2 + 3 +

+n= i

i= 1

33

Algorithme

Somme_PremiersN

Somme_PremiersN(n)

{s0;

pour i de 1 à n faire ss+i;

fin pour

retourner s;

}

34

Problème du Tri

Entrée: suite de n entiers <a 1 , a 2 ,,a n >

Sortie: permutation <a 1 ,a 2 ,,a n > de la suite donnée en entré de façon que

a 1 a 2 a n

3535

Tri-Insertion(T,n)

Tri-Insertion(T,n)/* T représente la suite d'entiers à trier */ pour j de 2 à n faire

cléT[j];

ij-1;

tant que (i>0 ET T[i]>clé)

T[i+1]T[i]; ii-1; fin tant que T[i+1]clé; fin pour retourner T

36

Ecriture d’un nombre entier en base 2

Tout nombre entier s’écrit de façon unique sous la forme d’une somme de puissances de 2 toutes différentes. Par exemple 19=2 4 +2 1 +2 0 et son écriture en base 2 est 10011.

Plus généralement l’écriture du nombre n en base 2 est égale à c k c k-1 … c 2 c 1 c 0 si c i {0,1} i= {0,1,…,k} et si

k

n= c i 2 i

i= 0

37

Problème écriture en base 2

Calculer la représentation en base 2 d’un nombre entier

n

Entrée: un nombre entier n

Sortie: <c k c k-1 … c 2 c 1 c 0 > tel que

i= {0,1,…,k}, c i {0, 1}

et

k

n= c i 2 i

i= 0

38

Algorithme Écriture en base 2

Ecriture_base2(n)

booleen T[log2(n)]; /* tableau de log2(n) éléments dans {0,1} */ entier i 0 ; tant que (n!=0) T[i] (n mod 2); i

i+1;

nn/2;

fin tant que retourner T

39

Ici / dési ne la division entière de deux (ie 7/2 = 3)