Вы находитесь на странице: 1из 110

IT NISRO

Club Tutoriel Informatique

ALGORITHME

Dfinition nom masculin (d'Al Khrezmi, mdecin arabe). Suite de raisonnements ou d'oprations qui fournit la solution de certains problmes. Objectifs Un algorithme sert transmettre un savoir faire. Il dcrit les tapes suivre pour raliser un travail. Il permet d'expliciter clairement les ides de solution d'un problme indpendamment d'un langage de programmation. L'utilisateur d'un algorithme n'aura qu' suivre toutes les instructions, dans l'ordre pour arriver au rsultat que doit donner l'algorithme.

ALGORITHME

Le "langage algorithmique" que nous utilisons est un compromis entre un langage naturel et un langage de programmation.

Nous prsentons les algorithmes comme une suite d'instructions dans l'ordre des traitements. Ils sont toujours accompagns d'un lexique qui indique, pour chaque variable, son type et son rle. Nous manipulerons les types couramment rencontrs dans les langages de programmation : entier, rel, boolen, caractre, chane, tableau et type composite.

FORMALISME

Un algorithme doit tre lisible et comprhensible par plusieurs personnes.

Il doit donc suivre des rgles. Il est compos d'une entte et d'un corps.
L'entte comprend : - Nom : le nom de l'algorithme - Rle : ce que fait l'algorithme - Donnes : les donnes fournies l'algorithme - Rsultat : ce que l'on obtient la fin du traitement - Principe : le principe utilis dans l'algorithme Le corps : - il est dlimit par les mots cls dbut et fin. - il se termine par un lexique, dcrivant les variables utilises

FORMALISME

Par convention, tous les identifiants de variables seront nots en minuscule et auront un nom mnmonique

Il en va de mme pour les fonctions, dont l'identifiant doit tre le plus explicite sur son rle. Ce dernier peut tre une contraction de plusieurs mots, par consquent pour rendre la lecture plus facile, la premire lettre de chaque mot est mis en majuscule (exemple : CalculerAireRectangle).

FORMALISME

Exemple d'algorithme : Nom : AddDeuxEntiers. Rle : additionner deux entier et mmoriser le rsultat Donnes : les valeurs additionner. Rsultat : la somme des deux valeurs. Principe : Additionner deux entiers a et b et mettre le rsultat dans c.
dbut ca+b fin Lexique : a : entier b : entier c : entier

LES VARIABLES

Une variable est une entit qui contient une information, elle possde :
un nom, on parle didentifiant une valeur un type qui caractrise lensemble des valeurs que peut prendre la variable

Lensemble des variables est stock dans la mmoire de lordinateur

LES VARIABLES

Type de variable

entier pour manipuler des entiers

rel pour manipuler des nombres rels


boolen pour manipuler des valeurs boolennes

caractre pour manipuler des caractres alphabtiques et numriques


chane pour manipuler des chanes de caractres permettant de reprsenter des mots ou des phrases.

LES VARIABLES

A un type donn, correspond un ensemble d'oprations dfinies pour ce type. Une variable est l'association d'un nom avec un type, permettant de mmoriser une valeur de ce type.

OPRATEUR, OPRANDE ET EXPRESSION

Un oprateur est un symbole dopration qui permet dagir sur des variables ou de faire des calculs Une oprande est une entit (variable, constante ou expression) utilise par un oprateur Une expression est une combinaison doprateur(s) et doprande(s), elle est value durant lexcution de lalgorithme, et possde une valeur (son interprtation) et un type

OPRATEUR, OPRANDE ET EXPRESSION


Exemple dans a + b : a est loprande gauche + est loprateur b est loprande droite a + b est appel une expression Si par exemple a vaut 2 et b 3, lexpression a + b vaut 5

Si par exemple a et b sont des entiers, lexpression a + b est un entier

10

LES OPRATEURS

Un oprateur peut tre Unaire ou binaire :


Unaire sil nadmet quune seule oprande, par exemple loprateur non Binaire sil admet deux oprandes, par exemple loprateur +

Un oprateur est associ un type de donne et ne peut tre utilis quavec des variables, des constantes, ou des expressions de ce type
Par exemple loprateur + ne peut tre utilis quavec les types arithmtiques (naturel, entier et rel) ou (exclusif) le type chane de caractres

11

LES OPRATEURS
On ne peut pas additionner un entier et un caractre Toutefois exceptionnellement dans certains cas on accepte dutiliser un oprateur avec deux oprandes de types diffrents, cest par exemple le cas avec les types arithmtiques (2 + 3.5)

La signification dun oprateur peut changer en fonction du type des oprandes


loprateur + avec des entiers aura pour sens laddition, 2+3 vaut 5 avec des chanes de caractres il aura pour sens la concatnation "bonjour" + " tout le monde" vaut "bonjour tout le monde"

12

LES OPRATEURS BOOLENS

Pour les boolens nous avons les oprateurs non, et, ou, Exclusif

Non

Et

13

LES OPRATEURS BOOLENS

Ou

Ou exclusif

14

LES OPRATEURS BOOLENS

Rappels sur la logique boolenne... Valeurs possibles : Vrai ou Faux Associativit des oprateurs et et ou a et (b et c) = (a et b) et c Commutativit des oprateurs et et ou a et b = b et a a ou b = b ou a

15

LES OPRATEURS BOOLENS

Distributivit des oprateurs et et ou a ou (b et c) = (a ou b) et (a ou c) a et (b ou c) = (a et b) ou (a et c) Involution (homographie rciproque) (homos semblable et graphein crire) non non a = a Loi de Morgan non (a ou b) = non a et non b non (a et b) = non a ou non b

16

LES OPRATEURS SUR LES NUMRIQUES

On retrouve tout naturellemment +, -, *, /

Avec en plus pour les entiers div et mod, qui permettent respectivement de calculer une division entire et le reste de cette division,

par exemple : 11 div 2 vaut 5 11 mod 2 vaut 1

17

LES OPRATEURS SUR LES NUMRIQUES

Loprateur dgalit : Cest loprateur que lon retrouve chez tous les types simples qui permet de savoir si les deux oprandes sont gales Il est reprsent par le caractre = Le rsultat d'une expression contenant cet oprateur est un boolen On a aussi loprateur dingalit : Et pour les types possdant un ordre les oprateurs de comparaison <, , >,

18

PRIORITS DES OPRATEURS

Tout comme en arithmtique les oprateurs ont des priorits Par exemple * et / sont prioritaires sur + et Pour les boolens, la priorit des oprateurs est non, et, ouExclusif et ou Pour clarifier les choses (ou pour dans certains cas supprimer toutes ambiguts) on peut utiliser des parenthses

19

MANIPULATION DE VARIABLES

On ne peut faire que deux choses avec une variable : 1. Obtenir son contenu Cela seffectue simplement en nommant la variable 2. Affecter un (nouveau) contenu Cela seffectue en utilisant loprateur daffectation reprsenter par le symbole

La syntaxe de cet oprateur est : identifiant de la variable expression

20

MANIPULATION DE VARIABLES

Par exemple lexpression c a + b se comprend de la faon suivante : On prend la valeur contenue dans la variable a On prend la valeur contenue dans la variable b On additionne ces deux valeurs On met ce rsultat dans la variable c

Si c avait auparavant une valeur, cette dernire est perdue !

21

LES ENTRES / SORTIES

Un algorithme peut avoir des interactions avec lutilisateur

Il peut afficher un rsultat (du texte ou le contenu dune variable) demander lutilisateur de saisir une information afin de la stocker dans une variable

En tant quinformaticien on raisonne en se mettant la place de la machine, donc :

22

LES ENTRES / SORTIES

Instruction d'criture L'instruction de restitution de rsultats sur le priphrique de sortie (en gnral l'cran) est :
crire(liste d'expressions) Cette instruction ralise simplement l'affichage des valeurs des expressions dcrites dans la liste. Ces instructions peuvent tre simplement des variables ayant des valeurs ou mme des nombres ou des commentaires crits sous forme de chanes de caractres.

Exemple d'utilisation : crire(x, y+2, "bonjour")

23

LES ENTRES / SORTIES

Instructions de lecture L'instruction de prise de donnes sur le priphrique d'entre (en gnral le clavier) est : variable <- lire() L'excution de cette instruction consiste affecter une valeur la variable en prenant cette valeur sur le priphrique d'entre. Avant l'excution de cette instruction, la variable avait ou n'avait pas de valeur. Aprs, elle a la valeur prise sur le priphrique d'entre.

24

LES ENTRES / SORTIES

Exemple On dsire crire un algorithme qui lit sur l'entre standard une valeur reprsentant une somme d'argent et qui calcule et affiche le nombre de billets de 100 Euros, 50 Euros et 10 Euros, et de pices de 2 Euros et 1 Euro qu'elle reprsente. Nom : DcompSomme. Rle : Dcomposition d'une somme Donnes : la somme dcompose. Rsultat : les nombres de billets et de pices.

Principe : on commence par lire sur l'entre standard l'entier qui reprsente la somme d'argent et affecte la valeur une variable somme. Pour obtenir la dcomposition en nombre de billets et de pices de la somme d'argent, on procde par divisions successives en conservant chaque fois le reste.

25

LES ENTRES / SORTIES


dbut somme <- lire() billet100 <- somme div 100 reste100 <- somme mod 100 billet50 <- reste100 div 50; reste50 <- reste100 mod 50 billet10 <- reste50 div 10 reste10 <- reste50 mod 10 piece2 <- reste10 div 2 reste2 <- reste10 mod 2 piece1 <- reste2 crire (billet100, billet50, billet10, piece2, piece1) fin

26

LES ENTRES / SORTIES

Lexique - somme : entier, la somme d'argent dcomposer - billet100 : entier, le nombre de billets de 100 Euros - billet50 : entier, le nombre de billets de 50 Euros - billet10 : entier, le nombre de billets de 10 Euros - piece2 : entier, le nombre de pices de 2 Euros - piece1 : entier, le nombre de pices de 1 Euro - reste100 : entier, reste de la division entire de somme par 100 - reste50 : entier, reste de la division entire de reste100 par 50 - reste10 : entier, reste de la division entire de reste50 par 10 - reste2 : entier, reste de la division entire de reste10 par 2

27

INSTRUCTION CONDITIONNELLE

Linstruction si alors sinon permet de conditionner lexcution dun algorithme la valeur dune expression boolenne. Syntaxe : si expression boolenne alors suite dinstructions excutes si lexpression est sinon suite dinstructions excutes si lexpression est fausse finsi

vrai

28

INSTRUCTION CONDITIONNELLE

La deuxime partie de linstruction est optionnelle, on peut avoir la syntaxe suivante : si expression boolenne alors suite dinstructions excutes si lexpression est vrai finsi

29

INSTRUCTION CONDITIONNELLE

Exemple Nom : ValeurAbs Rle : Calcule la valeur absolue dun entier Donnes : La valeur calculer Rsultat : La valeur Absolue Principe : Si valeur < 0, on la multiplie par -1 dbut si valeur 0 alors valeurabsolue valeur sinon valeurabsolue valeur * -1 finsi fin

Lexique - valeur : entier, la valeur tester - valeurabsolue : la valeur absolue

30

L'INSTRUCTION CAS

Lorsque lon doit comparer une mme variable avec plusieurs valeurs, comme par exemple : si a=1 alors faire une chose sinon si a=2 alors faire une autre chose sinon si a=4 alors faire une autre chose sinon ... finsi finsi finsi
On peut remplacer cette suite de si par linstruction cas

31

L'INSTRUCTION CAS

Sa syntaxe est : cas o v vaut v1 : action1 v2 : action2 ... vn : actionn autre : action autre fincas
v1,. . . ,vn sont des constantes de type scalaire (entier, naturel, enumr, ou caractre) action i est excute si v = vi (on quitte ensuite linstruction cas) action autre est excute si quelque soit i, v vi

32

LES ITRATIONS

Il arrive souvent dans un algorithme qu'une mme action soit rpte plusieurs fois, avec ventuellement quelques variantes. Il est alors fastidieux d'crire un algorithme qui contient de nombreuses fois la mme instruction. De plus, ce nombre peut dpendre du droulement de l'algorithme. Il est alors impossible de savoir l'avance combien de fois la mme instruction doit tre dcrite. Pour grer ces cas, on fait appel des instructions en boucle qui ont pour effet de rpter plusieurs fois une mme instruction. Deux formes existent : la premire, si le nombre de rptitions est connu avant l'excution de l'instruction de rptition, la seconde s'il n'est pas connu. L'excution de la liste des instructions se nomme itration.

33

RPTITIONS INCONDITIONNELLES

Il est frquent que le nombre de rptitions soit connu l'avance, et que l'on ait besoin d'utiliser le numro de l'itration afin d'effectuer des calculs ou des tests. Le mcanisme permettant cela est la boucle Pour.

Forme de la boucle Pour :


Pour variable de valeur initiale valeur finale faire liste d'instructions fpour

34

RPTITIONS INCONDITIONNELLES

La variable dont on donne le nom va prendre successivement toutes les valeurs entires entre valeur initiale et valeur finale. Pour chaque valeur prise par la variable, la liste des instructions est excute. La valeur utilise pour numrer les itrations est appele valeur d'itration, indice d'itration ou compteur. L'incrmentation par 1 de la variable est implicite.

35

RPTITIONS INCONDITIONNELLES

Autre forme de la boucle Pour :

Pour variable dcroissante de valeur initiale valeur finale faire liste d'instructions fpour La variable d'itration est dcrmente de 1 aprs chaque itration.

36

LES RPTITIONS CONDITIONNELLES

L'utilisation d'une "boucle pour" ncessite de connatre l'avance le nombre d'itrations dsir, c'est--dire la valeur finale du compteur. Dans beaucoup de cas, on souhaite rpter une instruction tant qu'une certaine condition est remplie, alors qu'il est priori impossible de savoir l'avance au bout de combien d'itrations cette condition cessera d'tre satisfaite. Dans ce cas, on a deux possibilits : - la boucle Tant que - la boucle Rpter jusqu'

Syntaxe de la boucle Tant que : tant que condition faire liste d'instructions ftant

37

LES RPTITIONS CONDITIONNELLES

Cette instruction a une condition de poursuite dont la valeur est de type boolen et une liste d'instructions qui est rpte si la valeur de la condition de poursuite est vraie : la liste d'instructions est rpte autant de fois que la condition de poursuite a la valeur vraie. Le droulement pas pas de cette instruction quivaut : si condition alors liste d'instructions si condition alors liste d'instructions si condition alors liste d'instructions ...

38

LES RPTITIONS CONDITIONNELLES

Etant donn que la condition est value avant l'excution des instructions rpter, il est possible que celles-ci ne soient jamais excutes. Il faut que la liste des instructions ait une incidence sur la condition afin qu'elle puisse tre value faux et que la boucle se termine.

Il faut toujours s'assurer que la condition devient fausse au bout d'un temps fini. Exemple Un utilisateur peut construire des rectangles de taille quelconque, condition que les largeurs qu'il saisit soient suprieures 1 pixel.

39

LES RPTITIONS CONDITIONNELLES


Nom : saisirLargeurRectangle Rle : Vrification validit largeur saisie Donnes : La largeur Rsultat : Principe : Tant que la largeur est < 1, on demande de resaisir la largeur dbut crire ("indiquez la largeur du rectangle :") largeur <- lire() tant que largeur < 1 faire crire ("erreur : indiquez une valeur strictement positive") crire ("indiquez la largeur du rectangle :") largeur <- lire() ftant fin Lexique

40

LES RPTITIONS CONDITIONNELLES

Syntaxe de la boucle Rpter jusqu' : Rpter liste d'instructions jusqu' condition

La squence d'instructions est excute au moins une fois et jusqu' ce que l'expression soit vraie. Ds que la condition est vrai, la rptitivit s'arrte.

41

LES RPTITIONS CONDITIONNELLES


Nom : saisirLargeurRectangle Rle : Vrification validit largeur saisie Donnes : La largeur Rsultat : Principe : Tant que la largeur est < 1, on demande de resaisir la largeur
dbut Rpter crire ("indiquez la largeur du rectangle :") largeur <- lire() si largeur < 1 alors crire ("erreur : indiquez une valeur strictement positive") fin si jusqu' largeur >= 1 fin Lexique - largeur : entier, largeur courante saisie

42

LES RPTITIONS CONDITIONNELLES

Diffrences entre les boucles Tant que et Rpter jusqu' : - la squence d'instructions est excuter au moins une fois dans la boucle Rpter jusqu', alors qu'elle peut ne pas tre excuter dans le cas du Tant que.
- la squence d'instructions est excuter si la condition est vrai pour le Tant que et si la condition est fausse pour le Rpter jusqu'. - Dans les deux cas, la squence d'instructions doit ncessairement faire voluer la condition, faute de quoi on obtient une boucle infinie.

43

LES TABLEAUX

Lorsque les donnes sont nombreuses et de mme type, afin d'viter de multiplier le nombre des variables, on les regroupe dans un tableau Le type d'un tableau prcise le type (commun) de tous les lments. Syntaxe : tableau type_des_lments[borne_inf ... borne_sup] En gnral, nous choisirons toujours la valeur 0 pour la borne infrieure dans le but de faciliter la traduction de l'algorithme vers les autres langages (C, Java, ...). Pour un tableau de 10 entiers, on aura : tab : tableau entier[0..9]

44

LES TABLEAUX

Les tableaux une dimension ou vecteurs


0 45 1 54 2 1 3 -56 4 22 5 134 6 49 7 12 8 90 9 -26

Ce tableau est de longueur 10, car il contient 10 emplacements. Chacun des dix nombres du tableau est repr par son rang, appel indice

Pour accder un lment du tableau, il suffit de prciser entre crochets l'indice de la case contenant cet lment. Pour accder au 5me lment (22), on crit : Tab[4]

45

LES TABLEAUX

Les instructions de lecture, criture et affectation s'appliquent aux tableaux comme aux variables. x Tab[0] La variable x prend la valeur du premier lment du tableau, c'est dire : 45

Tab[6] 43
Cette instruction a modifie le contenu du tableau

46

LES TABLEAUX

Parcours complet d'un tableau La plupart des algorithmes bass sur les tableaux utilisent des itrations permettant de faire un parcours complet ou partiel des diffrents lments du tableau. De tels algorithmes tablissent le rsultat recherch par rcurrence en fonction des lments successivement rencontrs.

Les rptitions inconditionnelles sont le moyen le plus simple de parcourir compltement un tableau.

47

LES TABLEAUX
Dans l'exemple suivant, le programme initialise un un tous les lments d'un tableau de n lments : InitTableau dbut pour i de 0 n-1 faire tab[i] 0 fpour fin

Lexique : - i : entier, indice d'itration - n : entier, taille du tableau - tab : tableau entier[0..n-1]

48

LES TABLEAUX

Les tableaux deux dimensions ou matrices


Lorsque les donnes sont nombreuses et de mme nature, mais dpendent de deux critres diffrents, elles sont ranges dans un tableau deux entres.
0 0 12 1 28 2 44 3 2 4 76 5 77 6 32

1
2

23
43

36
21

51
55

11
67

38
83

54
41

25
69

Ce tableau a 3 lignes et 7 colonnes. Les lments du tableau sont reprs par leur numro de ligne et leur numro de colonne.
Tab[1, 4] = 38

49

LES TABLEAUX

La variable T[L, C] s'appelle l'lment d'indice L et C du tableau T.


T[0, 0] T[1, 0] T[2, 0] T[0, 1] T[1, 1] T[2, 1] T[0, 2] T[1, 2] T[2, 2] T[0, 3] T[1, 3] T[2, 3] T[0, 4] T[1, 4] T[2, 4]

Tableau T 3 lignes et 5 colonnes.

Les tableaux peuvent avoir n dimensions.

50

LES PROCDURES ET LES FONCTIONS

La mthodologie de base de linformatique est : 1. Abstraire Retarder le plus longtemps possible linstant du codage 2. Dcomposer "...diviser chacune des difficults que jexaminerai en autant de parties quil se pourrait et quil serait requis pour les mieux rsoudre." Descartes 3. Combiner Rsoudre le problme par combinaison dabstractions

51

LES PROCDURES ET LES FONCTIONS

Par exemple, rsoudre le problme suivant : Ecrire un programme qui affiche en ordre croissant les notes dune promotion suivies de la note la plus faible, de la note la plus leve et de la moyenne, revient rsoudre les problmes suivants : - Remplir un tableau de naturels avec des notes saisies par lutilisateur - Afficher un tableau de naturels - Trier un tableau de naturel en ordre croissant - Trouver le plus petit naturel dun tableau - Trouver le plus grand naturel dun tableau - Calculer la moyenne dun tableau de naturels

52

LES PROCDURES ET LES FONCTIONS


Chacun de ces sous-problmes devient un nouveau problme rsoudre. Si on considre que lon sait rsoudre ces sousproblmes, alors on sait quasiment rsoudre le problme initial.

Donc crire un programme qui rsout un problme revient toujours crire des sous-programmes qui rsolvent des sous parties du problme initial. En algorithmique il existe deux types de sousprogrammes : - Les fonctions - Les procdures

53

LES FONCTIONS RCURSIVES

Une fonction rcursive est une fonction qui pour fournir un rsultat, sappelle elle-mme un certain nombre de fois. Exemple : la formule de calcul de la factorielle dun nombre n scrit :
n!=1x2x3xxn Ce qui peut se programmer avec une boucle Pour.

54

LES FONCTIONS RCURSIVES


Une autre manire de voir les choses, serait de dire que :
n ! = n x (n-1) ! Do, la factorielle dun nombre, cest ce nombre multipli par la factorielle du nombre prcdent.

Pour programmer cela, il faut une fonction Facto, charge de calculer la factorielle. Cette fonction effectue la multiplication du nombre pass en argument par la factorielle du nombre prcdent. Et cette factorielle du nombre prcdent va bien entendu tre elle-mme calcule par la fonction Fact.

55

LES FONCTIONS RCURSIVES

Pour terminer, il nous manque la condition d'arrt de ces auto-appels de la fonction Facto. Dans le cas d'un calcul de factorielle, on sarrte quand on arrive au nombre 1, pour lequel la factorielle est par dfinition 1.
Fonction Facto (n : Entier) Dbut Si n = 1 alors Renvoyer 1 Sinon Renvoyer Facto(n - 1) * n Finsi Fin

56

LES FONCTIONS RCURSIVES

Le processus rcursif remplace en quelque sorte la boucle, cest--dire un processus itratif. Il est noter que l'on traite le problme lenvers : on part du nombre, et on remonte rebours jusqu 1, pour pouvoir calculer la factorielle.
Cet effet de rebours est caractristique de la programmation rcursive.

57

LES FONCTIONS RCURSIVES

Pour conclure sur la rcursivit, trois remarques fondamentales. - la programmation rcursive, pour traiter certains problmes, peut tre trs conomique, elle permet de faire les choses correctement, en trs peu de lignes de programmation. - en revanche, elle est trs dispendieuse de ressources machine. Car il faut crer autant de variable temporaires que de " tours " de fonction en attente. - toute fonction rcursives peut galement tre formule en termes itratifs ! Donc, si elles facilitent la vie du programmeur, elle ne sont pas indispensable.

58

LES ALGORITHMES DE TRI

Les algorithmes de tri, sont utiliss principalement pour les tableaux et les listes, ils peuvent aller du plus simple au plus compliquer.

Le tri bulle Cest un des algorithmes le plus connu. Bien quil soit rarement efficace en terme de temps de calcul, il est nanmoins correcte. Le principe consiste balayer tout le tableau, en comparant les lments adjacents et en les changeant sils ne sont pas dans le bon ordre.

59

LES ALGORITHMES DE TRI


Un seul passage ne dplacera un lment donn que dune position, mais en rptant le processus jusqu ce que plus aucun change ne soit ncessaire, le tri sera effectu. Ce tri va ncessiter un grand nombre de dplacements dlments, il est donc inutilisable dans les cas o ces dplacements sont coteux en temps.

Il peut par contre tre intressant quand le tableau initial est pr-tri, les lments ntant pas disposs trop loin de leur position finale, par exemple lors dun classement alphabtique, o les lments sont dj tris par leur premire lettre.

60

LES ALGORITHMES DE TRI

Le tri par insertion Plutt que de dplacer les lments dune position, on peut prendre un lment aprs lautre dans lordre initial, et le placer correctement dans les lments prcdents dj tris, comme on le fait lorsque lon classe ses carte jouer aprs la donne.

Le tri par insertion peut tre intressant pour des tableaux ayant dj t tris, mais o lon doit rajouter quelques nouveaux lments.

61

LES ALGORITHMES DE TRI

Le tri par slection Le but est dsormais de dplacer chaque lment sa position dfinitive. On recherche llment le plus petit. Il faut donc le placer en premier, or cette position est dj occupe, on change donc les deux lments. Il ne reste plus qu rpter lopration N fois. Chaque change met un lment en position dfinitive, lautre par contre est mal plac. Cependant, aucun change nest inutile, car un lment qui a t bien plac, ne sera plus test par la suite.

62

LES ALGORITHMES DE TRI

Le tri shell Cest une amlioration du tri par insertion, au lieu deffectuer une rotation de tous les lments entre la position initiale et finale dun lment, on peut faire des rotation par pas de P, ce qui rendra le fichier presque tri. Chaque lment sera moins de P positions de sa position exacte. On rpte ce tri pour P diminuant jusqu 1.

Une suite possible pour P est de finir par 1, les pas prcdents tant de 4, 13, 40, 121, 364, 1093.

63

LES ALGORITHMES DE TRI


Dautres suites sont possibles, condition de prendre des valeurs qui ne soient pas multiples entre elles, pour ne pas toujours traiter les mmes lments et laisser de ct les autres.

Les puissances successives de 2 ne traiteraient que les positions paires, sauf au dernier passage. Lintrt de ce tri, est quil cr rapidement un fichier presque tri, en appliquant un dernier par insertion, celuici sera beaucoup plus rapide.

64

LES ALGORITHMES DE TRI

Le tri rapide (Quick Sort) Ce tri est rcursif. On cherche trier une partie du tableau, dlimite par les indices gauche et droite. On choisit une valeur de ce sous tableau que lon appelle pivot (une valeur mdiane serait idale, mais sa recherche ralentit plus le tri que de prendre une valeur alatoire).

Puis on cherche la position dfinitive de ce pivot, cest-dire que lon effectue des dplacements de valeurs de telle sorte que tous les lments avant le pivot soient plus petit que lui et que tous ceux placs aprs lui soient suprieurs, mais sans chercher les classer, pour acclrer le processus.

65

LES ALGORITHMES DE TRI


Puis on rappelle rcursivement le tri de la partie avant le pivot et celle de la partie aprs le pivot. On arrte la rcursivit sur les parties un seul lment, dans ce cas, le tri obligatoirement t effectu.

Le tri par cration Lorsquil est ncessaire de disposer simultanment du tableau initial et du tableau tri, on peut recopier le tableau initial puis effectuer un tri sur la copie ou adapter un des algorithmes prcdents.

66

LES ALGORITHMES DE TRI

Les autres tris Suivant les donnes trier, il peut tre plus efficace de construire un algorithme de tri spcifique. Par exemple si un tableau contient un grand nombre de valeurs similaires, on peut utiliser un algorithme simple, consistant rechercher llment le plus petit, compter le nombre de ces lments, les mettre dans un tableau destination, et rpter lopration jusqu la fin du fichier. Cest le tri par comptage. Le tri par fusion utilise un algorithme de fusion de deux tableaux tris en un seul plus grand, appel rcursivement sur les deux moitis du tableau, jusqu une taille de tableau de 1.

67

LES ALGORITHMES DE RECHERCHE

La recherche squentielle A partir dun tableau tri, on parcours ce tableau lment par lment jusqu trouver le bon lment. La recherche dichotomique La recherche dichotomique recherche un lment dans un tableau tri et retourne lindice dune occurrence de cet lment. On compare llment cherch celui qui se trouve au milieu du tableau. Si llment cherch est plus petit, on continu la recherche dans la premire moiti du tableau, sinon dans la seconde moiti. On recommence ce processus sur la moiti. On sarrte lorsque lon a trouv llment, ou lorsque lintervalle de recherche est nul.

68

LES STRUCTURES DE DONNES DYNAMIQUES

Jusqu'ici, on a tudi des structures de donnes statiques, c'est--dire qui ont un nombre fixe d'informations, utilises pour la reprsentation de donnes dont la taille est connue l'avance et n'volue pas dans le temps.

Dans la pratique, il arrive souvent que l'on ait besoin de reprsenter des objets dont on ne connat pas priori la taille, ou dont la taille est variable selon les cas ou au cours du temps.
On utilise dans ce cas des structures de donnes dynamiques qui peuvent voluer pour s'adapter la reprsentation des ces objets.

69

LES STRUCTURES DE DONNES DYNAMIQUES

Exemple : On doit lire dans un fichier une suite de nombres sur lesquels on doit effectuer un traitement ultrieur. On ne connat pas la quantit de nombres lire et on ne veut pas les compter avant.

La premire solution consiste utiliser un tableau surdimensionner, au risque qu'il soit trop petit ou rellement trop grand, ce qui induit une occupation mmoire inutile.
L'autre solution consiste utiliser une structure dynamique qui s'agrandit au fur et mesure de la lecture des nombres.

70

LES STRUCTURES DE DONNES DYNAMIQUES

Le principe de base est de suivre les volution de la structure en lui attribuant de la place en mmoire quand elle grandit et en la rcuprant quand elle diminue Ceci est ralis par un mcanisme d'allocation et de libration dynamique d'espace mmoire qui utilise une zone mmoire particulire appele TAS (HEAP) dans laquelle on rserve des emplacements quand c'est ncessaire, Que l'on libre quand on en a plus besoin. On dispose de deux procdures standard d'acquisition et de libration de l'espace mmoire :RESERVE et LIBERE

71

LES POINTEURS

Les procdures RESERVE et LIBERE travaillent exclusivement avec des pointeurs.


Une variable de type pointeur est une variable dont le contenu est une adresse qui peut indiquer l'emplacement en mmoire d'une autre variable, cre dynamiquement et ayant un type de base prcis.
Pointeur Dupont 28

Pointeur contient l'adresse de dbut d'enregistrement

435

72

Quand une variable pointeur ne pointe sur rien, elle doit contenir la valeur NULL.

STRUCTURE AUTORFRENTIELLE

Une structure autorfrentielle (ou structure rcursive) correspond une structure dont au moins un des champs contient un pointeur vers une structure de mme type.
De cette manire, on cre des lments (appels nud ou lien) contenant des donnes, mais contrairement un tableau, celleci peuvent tre parpilles en mmoire et relies entre-elles par des liens logiques (des pointeurs). Un ou plusieurs champs dans chaque structure contient l'adresse d'une ou de plusieurs structures de mme type.

73

STRUCTURE AUTORFRENTIELLE

Si une structure contient des donnes et un pointeur vers la structure suivante, on parle de liste chane. Lorsque la structure contient des donnes, un pointeur vers la structure suivante et un pointeur vers la structure prcdente, on parle de liste chane double. Lorsque la structure contient des donnes, un pointeur vers une premire structure suivante et un pointeur vers une seconde, on parle d'arbre binaire.

74

LES LISTES CHANES

Une liste chane est une structure de donnes dans laquelle les lments sont rangs linairement. Chaque lment est li son successeur, il est donc impossible d'accder directement un lment quelconque de la liste
12 25 4 7 /

Bien videment, cette linarit est purement virtuelle. A la diffrence du tableau, les lments n'ont aucune raison d'tre contigus ni ordonns en mmoire.
25 12 7 / 4

75

LES LISTES CHANES

La faon dont on met en uvre ces structures dpend des langages, mme si la faon dont cela est reprsent ici ressemble fortement celle du langage C. Une mthode simple pour se reprsenter une liste, consiste se dire - qu'une liste L est soit vide, soit elle est constitue - d'une tte T (qui est donc la valeur du premier lment de la liste) et - d'une queue Q (qui est le reste de la liste).

76

LES LISTES CHANES

En terme de pointeurs et de structures, une liste peut se reprsenter grce au type suivant :

Structure Maillon Entier valeur Maillon suivant

77

LES LISTES CHANES

L'exemple prcdent peut se dfinir par


Maillon cell1, cell2, cell3, cell4 Dbut cell1.valeur 12 cell1.suivant #cell2 cell2.valeur 25 cell2.suivant #cell3 cell3.valeur 4 cell3.suivant #cell4 cell4.valeur 7 cell4.suivant NULL Fin

78

LES LISTES DOUBLEMENT CHANES

Une liste doublement chane est une liste chane, ceci prs que l'on peut accder son prdcesseur.
/ 12

25

Bien sr, cette linarit est purement virtuelle. Tout comme pour les listes chanes simples, les lments n'ont aucune raison d'tre contigus ni ordonns en mmoire.

25

12

79

LES LISTES DOUBLEMENT CHANES

En terme de pointeurs et de structures, on peut dfinir ce type de la faon suivante :


Structure Maillon Entier valeur Maillon suivant Maillon precedent

80

LES LISTES DOUBLEMENT CHANES


Maillon cell1, cell2, cell3, cell4 Dbut cell1.valeur 12 cell1.suivant #cell2 cell1.precedent NULL cell2.valeur 25 cell2.suivant #cell3 cell2.precedent #cell1 cell3.valeur 4 cell3.suivant #cell4 cell3.precedent #cell2 cell4.valeur 7 cell4.suivant NULL cell4.precedent #cell3 Fin

81

LES LISTES
Elles ont l'avantage d'tre rellement dynamiques, c'est dire que l'on peut loisir les rallonger ou les raccourcir, avec pour seule limite la mmoire disponible.
De plus, l'insertion d'un composant au milieu d'une liste ne ncessite que la modification des liens avec l'lment prcdent et le suivant. Le temps ncessaire pour l'opration sera donc indpendant de la longueur de la liste.

82

LES PILES ET LES FILES

Ce sont des structures de donnes ordonnes, mais qui ne permettent l'accs qu' une seule donne. Les piles (LIFO : Last In First Out) correspondent une pile d'assiettes : on prend toujours l'lment suprieur, le dernier emplil.
Les files (FIFO : First In First Out) correspondent aux files d'attente : on prend toujours le premier lment, donc le plus ancien. Elles sont trs souvent utiles, elles servent mmoriser des vnements en attente de traitement.

83

LES PILES ET LES FILES

Il n'y a pas de structures spcifiques prvues dans les langages de programmation, il faut donc les crer de toute pice. Pour les piles, on utilisera : - un tableau unidimensionnel en cas de piles de hauteur maximale prvisible (la hauteur de la pile est mmorise dans une variable entire). - une liste en cas de longueur trs variable. Attention au surcot de mmoire, d aux liens (pointeurs), il faudra en crer autant que d'lments empiler.

84

LES PILES ET LES FILES

Pour les files : - l'utilisation d'un tableau ncessite de mmoriser deux variables, la position du premier lment et celle du dernier. La suppression du premier lment ne se fait pas par dcalage des suivants, mais en incrmentant la variable indiquant le premier. La gestion est alors un peu plus complexe que pour les piles.

- l'utilisation d'une liste pour les files est aussi simple que pour une pile.

85

LES PILES ET LES FILES

Les fonctions de base

Pour les piles - l'empilage - le dpilage Pour les files - l'enfilage - le dfilage Dans les deux cas on prvoira galement une fonction d'initialisation et une fonction indiquant si la pile ou la file est vide. Seules ces deux fonctions dpendent de la mthode de mise en uvre (tableau ou liste).

86

LES PILES ET LES FILES


Structure Pile Entier sommet Rel tableau
Boolen Pile_Vide(Pile P) Dbut Retourner(P.sommet = -1) Fin Empiler(Pile P, Rel x) Dbut P.sommet P.sommet +1 P.tableau[P.sommet] x Fin

// test si pile vide

87

LES PILES ET LES FILES


Rel Dpiler(Pile P) Dbut Si Pile_Vide(P) Alors Ecrire("Pile vide!") Sinon P.sommet P.sommet -1 Retourner P.tableau[P.sommet + 1] Fin

88

LES ARBRES

Les listes sont des structures dynamiques unidimensionnelles. Les arbres sont leur gnralisation multidimensionnelle. Une liste est un arbre dont chaque lment a un et un seul fils. Chaque composante d'un arbre contient une valeur et des liens vers ses fils. Dfinition : Un arbre est form dun lment de type arbre appel racine et dun nombre fini darbres appels sous-arbres. Un lment quelconque peut avoir plusieurs successeurs, mais un seul prdcesseur. Seul le premier lment na pas de prdcesseur.

89

LES ARBRES

Terminologie
-

Les lments
-

Un sommet ou nud est un lment quelconque dun arbre. La racine est lunique sommet nayant pas de prdcesseur. Une feuille ou nud terminal est un lment nayant pas de successeur. Le prdcesseur unique dun nud est appel le pre. Les successeurs dun nud sont appels les fils. Les nuds qui ont le mme pre sont appels frres. Le frre plac le plus gauche est lan.

Les chemins
-

Un arc est un chemin reliant deux nuds Une branche est un chemin reliant la racine une feuille.

90

LES ARBRES

Qualification des arbres


-

Horizontale
-

Un arbre est dit n-aires, lorsque le nombre maximum de fils dun mme nud est n. Un niveau est dfini par un ensemble de nuds disposs gale distance de la racine. Le niveau dun arbre n-aire est qualifi de satur si tous ses nuds ont exactement n fils. Le prdcesseur unique dun nud est appel le pre. Un arbre n-aire est complet au sens strict, si tout niveau commenc est satur.

91

LES ARBRES
-

Verticale
-

La hauteur dun arbre binaire est le nombre de nuds qui constituent la plus longue branche de la racine une feuille. Un arbre constitu de seulement une racine a une hauteur de 1. Sil est constitu dune racine et dune feuille sa hauteur est de 2.

92

LES ARBRES
1

racine

33

35

nud

feuille

12 Arbre ternaire incomplet de hauteur 4

93

LES ARBRES
8

pre

33

35

frres

65

66

62

63

fils

Arbre binaire strictement complet de hauteur 3

94

LES ARBRES

Comme pour le premier d'une liste, l'adresse de la racine est ncessaire et suffisante pour accder l'intgralit d'un arbre. Une liste est un arbre unaire.

Tout arbre peut tre reprsent par un arbre binaire

95

LES ARBRES

De nombreux algorithmes ont t dvelopps pour les arbres binaires. Comme les listes les arbres sont compltement dynamiques, mais les liens (pointeurs) sont galement gourmands en mmoire.
L'accs au donnes reste squentiel, mais il est nanmoins rapide.

Le parcours des arbres, c'est--dire le passage par tous les nuds et feuilles se fait en gnral de manire rcursive.

92

LES ARBRES
Parcours dun arbre binaire 1

10

97

LES ARBRES

Mthodologie Plusieurs mthodes permettent daccder tous les nuds dun arbre binaire.
Son parcours complet peut-tre dcrit rcursivement par les actions : - traiter la racine - parcourir le sous-arbre gauche - parcourir le sous-arbre droit Il y a six squencements possibles pour ces actions. Les trois parcours suivant sont les plus classiques.

98

LES ARBRES

Parcours prfix Ce parcours est galement appel parcours en prordre ou descendant gauche droite.
Il traite dabord les nuds de la branche la plus gauche en descendant. - traiter la racine - parcourir le sous-arbre gauche - parcourir le sous-arbre droit

99

LES ARBRES
procedure prefixe(entree p : pointeur) Debut si p <> NULL alors afficher(p val) prefixe(p g) prefixe(p d) sinon afficher(f) fin si Fin
Premier appel : prefixe(racine) Rsultat : 1 2 4 7 f f 8 f f 5 f 9 f f 3 f 6 f 10 f f

100

LES ARBRES

Parcours postfix Ce parcours est galement appel parcours en postordre ou ascendant gauche droite ou en ordre terminal.
Il traite en dernier les nuds de la branche la plus droite en remontant. - parcourir le sous-arbre gauche - parcourir le sous-arbre droit - traiter la racine

101

LES ARBRES
procedure postfixe(entree p : pointeur) Debut si p <> NULL alors postfixe(p g) postfixe(p d) afficher(p val) sinon afficher(f) fin si Fin

Rsultat : f f 7 f f 8 4 f f f 9 5 2 f f f f 10 6 3 1

102

LES ARBRES

Parcours infix Ce parcours est galement appel parcours symtrique, projectif ou hirarchique canonique.

- parcourir le sous-arbre gauche - traiter la racine - parcourir le sous-arbre droit

103

LES ARBRES
procedure infixe(entree p : pointeur) Debut si p <> NULL alors infixe(p g) afficher(p val) infixe(p d) sinon afficher(f) fin si Fin

Rsultat : f 7 f 4 f 8 f 2 f 5 f 9 f 1 f 3 f 6 f 10 f

104

LES ARBRES
L'expression 2*5+2*(cos((5*3.14)/180)) peut se reprsenter de la faon suivante

+ *
2 5 2

*
COS /

*
5

180

105

3.14

LES GRAPHES

Un graphe est un ensemble de nuds relis par des liens.


Ce n'est plus un arbre ds qu'il existe deux parcours diffrents pour aller d'au moins un nud vers un autre. Un graphe est connexe, lorsqu'il est possible de trouver au moins un parcours permettant de relier les nuds deux deux (un arbre est un graphe connexe). Un graphe est dit pondr lorsqu' chaque lien est associ une valeur (appele poids).

106

LES GRAPHES

On utilisera les graphes pondrs par exemple pour : - grer des itinraires routiers (quelle est la route la plus courte pour aller d'un nud un autre). - grer des fluides (nuds relis par des tuyauteries de diamtre diffrents). - simuler un trafic routier. - simuler un circuit lectrique. - prvoir un ordonnancement Un graphe est dit orient lorsque les liens sont unidirectionnels.

107

LES GRAPHES

On peut reprsenter un graphe de manire dynamique, comme les arbres. Une autre solution consiste numroter les N sommets et d'utiliser une matrice carre NxN, avec en ligne i et en colonne j un 0 si les nuds i et j ne sont pas relis, le poids de la liaison sinon.
Un problme important est le parcours d'un graphe : il faut viter les boucles infinies, c'est--dire retourner sur un nud dj visit et repartir dans la mme direction. Pour cela, on utilise des indicateurs de passage (Boolen) ou une mthode jeton.

108

BONNE CHANCE

Вам также может понравиться