Vous êtes sur la page 1sur 182

Informatique 1

1
re
Anne GC
Ecole Hassania des Travaux Publics

Karim Guennoun
1
Plan du cours
Partie 1: Algorithmique gnrale
Cest quoi un algorithme?
Notions de variables, dactionsetc
Structures de contrle
Structures de donnes avances
Fonctions et procdures
Partie 2: Le langage C
Passer de lalgorithme la programmation

2
Partie 1:
Algorithmique

3
Un algorithme, cest quoi?
Origine tymologique:
Vient du nom du mathmaticien Al Khawarizmi latinis en
algoritmi
Dfinitions:
Acadmie Franaise: Mthode de calcul qui indique la
dmarche suivre pour rsoudre une srie de problmes
quivalents en appliquant dans un ordre prcis une suite
finie de rgles.
Wikipedia: Un algorithme est un moyen pour un humain de
prsenter la rsolution par calcul dun problme une autre
personne physique (un autre humain) ou virtuelle (un
calculateur)

4
Pour faire simple:
Un algorithme est une suite dinstructions, dactions permettant de
rsoudre un problme donn
Aller quelque part: le chemin
Raliser un plat de cuisine: la recette
Faire un calcul mathmatique: la mthode
La granularit des instructions correspond au contexte dutilisation
de lalgorithme
Le chemin: linterlocuteur
La recette : Le cuisiner
Le calcul: Les bibliothques et la puissance de lordinateur
Heureusement, les ordinateurs sont peu prs aussi idiots les uns
que les autres: mme types dinstructions lmentaires
comprhensibles

5
Qualits dun bon concepteur
dalgorithmes
Lintuition:
Pas de mthode universelle absolue pour rsoudre
un problme
La rigueur et la logique
La mthodologie, la capacit se mettre la place
de la machine et dtre aussi idiot quelle!
Lexprience
Renforce les deux premiers points
Plus on crit dalgorithmes, plus on est performant
le faire
6
Algorithmique Vs programmation
Un langage de programmation nest que loutil de
ralisation de lalgorithme
Lalgorithme permet de concevoir la solution alors
que la programmation permet de la mettre en uvre
Lalgorithme est gnralement un niveau
dabstraction plus haut que la programmation
Il est, cependant, ncessaire de prendre en compte
la nature, la puissance et lexpressivit du langage
de programmation avant de concevoir lalgorithme


7
Les variables
8
Lintrt des variables
Parfois, il est ncessaire de stocker de linformation
au cours du calcul effectu par un algorithme
Pour additionner deux valeurs, jai besoin de stocker ces
deux valeurs
Pour additionner trois valeurs, jai besoin de stocker, en
plus, le rsultat intermdiaire
Une variable est donc une case o on peut stocker
de linformation repre par une tiquette permettant
dcrire dedans et de lire depuis.
Physiquement, cest une case de la mmoire vive de
lordinateur repre par une adresse binaire
9
Cycle de vie dune variable
La dclaration

Linstruction daffectation

La lecture/criture et les oprations
10
La dclaration dune
variable
11
La dclaration
Avant de pouvoir utiliser une variable, il faut
La crer
Lui associer une tiquette
Ltiquette dune variable correspond en gros
au nom quon lui associe
Prciser le type dinformation quon souhaite
lui associer.

12
Bonnes pratiques pour les
tiquettes
Pour plus de lisibilit,
Toujours privilgier les tiquettes qui ont du sens
viter des tiquettes rallonge
Le nom doit observer certaines rgles
dpendantes du langage de programmation
cibl. Rgles absolues:
Une suite de lettres et de chiffres
Pas de signes de ponctuation
Surtout pas despaces
13
Les types classiques
Les types numriques

Les types alphanumriques

Le type boolen

14
Les types numriques
Correspondent des variables destines
recevoir des nombres
La taille de lespace rserv pour le stockage
dtermine
Les valeurs maximales et minimales des nombres
pouvant tre stocks dans la variable
La prcision des valeurs dcimales
E.g. pour un octet, on pourra coder 2
8
nombres
c-a-d 256 nombres
15
Types numriques
En gros, on retrouve pour la plus part des
langages, les types classiques suivants:

Type Numrique Plage
Byte (octet) 0 255
Entier simple -32 768 32 767
Entier long -2 147 483 648 2 147 483 647
Rel simple
-3,40x10
38
-1,40x10
-45
pour les valeurs ngatives
1,40x10
-45
3,40x10
38
pour les valeurs positives
Rel double
1,79x10
308
-4,94x10
-324
pour les valeurs ngatives
4,94x10
-324
1,79x10
308
pour les valeurs positives
16
Types numriques
Question:
Pourquoi, pour viter tout problme, ne pas tout dclarer
en Rel double?
Rponse:
Parce que les ressources dun programme sont limites
Bonne nouvelle:
en algorithmique, on se contentera de faire le distinguo
entier/rel (existence de la virgule ou non)
Le raffinement vers les autres sous-types numriques
sont laisss ltape de programmation
17
Pseudo-code
En Pseudo-code, nous crivons la dclaration
dune variable numrique :
Variable v: Entier
Variable v1, v2, v3: Rel
Variable v1: Entier
Variable v2: Rel
Variable v3: Entier

18
Types alphanumriques
On dispose, en plus du type numrique, du
type caractres ou chane de caractres
En Anglais, string
Pour ce type de variables, on peut stocker
des caractres, quil sagisse de lettres, de
signes de ponctuation, despaces, ou mme
de chiffres.
Le nombre maximal de caractres pouvant
tre stocks dans une seule variable string
dpend du langage utilis.

19
Types alphanumriques
En Pseudo-code, la valeur est dclare entre
guillemets "chane de caractres"
"bonjour"
"Mesdames, messieurs, bonjour!"
"1234"
Dclaration
Variable v: caractres

20
Type boolen
Permet de stocker les valeurs logiques
Vrai/Faux (True/False)
Peut tre remplac par les valeurs
numriques 0 et 1, mais lutilisation des
boolens:
Rend lalgorithme plus lisible
Est plus conomique en terme dutilisation de la
mmoire, un bit suffit pour le stocker (deux octets
pour un entier)
21
Les instructions
daffectation
22
Laffectation
Une variable nest exploitable que si elle est
instancie.
Linstruction daffectation permet dassocier
une valeur la variable
Une variable ne peut recevoir que des
valeurs correspondant au type avec lequel
elle a t dclare
En pseudo-code, linstruction daffectation se
note
23
Exemples
Variable ecole1: caractres
ecole1 "EHTP"
On peut aussi crire.
Variable ecole2: caractres
ecole2 ecole1
ecole2 "ecole1"
Mais linstruction suivante nest pas
consistante:
ecole2 1

24
Exemples
Linstruction daffectation naltre que la
variable se situant gauche
Variable e1, e2: entier
e1 5
e2 e1 * 2
e1 e1+10
e2e1+e2

25
Ordre des instructions
Lordre des instructions est dterminant:
Elles sexcutent squentiellement dans lordre o elles
apparaissent
Variable e1: entier
e110
e15
Vs
e1 5
e110
Les deux algorithmes sont pour illustration, si vous crivez
quelque chose de semblable, posez-vous des questions!

26
Pause exercices
27
Exo1
Quelles seront les valeurs des variables A et
B aprs excution des instructions
suivantes ?
Variables A, B: Entier
Dbut
A 1
B A + 3
A 3
Fin

28
Exo2
Quelles seront les valeurs des variables A, B
et C aprs excution des instructions
suivantes ?
Variables A, B, C : Entier
Dbut
A 5
B 3
C A + B
A 2
C B A
Fin

29
Exo3
Quelles seront les valeurs des variables A et
B aprs excution des instructions
suivantes ?
Variables A, B en Entier
Dbut
A 5
B A + 4
A A + 1
B A 4
Fin

30
Exo4
Quelles seront les valeurs des variables A, B
et C aprs excution des instructions
suivantes ?
Variables A, B, C en Entier
Dbut
A 3
B 10
C A + B
B A + B
A C
Fin

31
Exo5
Quelles seront les valeurs des variables A et B aprs
excution des instructions suivantes ?
Variables A, B en Entier
Dbut
A 5
B 2
A B
B A
Fin
Les deux dernires instructions permettent-elles dchanger
les deux valeurs de B et A ?
Si lon inverse les deux dernires instructions, cela
change-t-il quelque chose ?
32
Exo6
Problme classique
crire un algorithme permettant dchanger les
valeurs de deux variables A et B, et ce quel que
soit leur contenu pralable.

33
Exo7
On dispose de trois variables A, B et C.
Ecrivez un algorithme transfrant B la
valeur de A, C la valeur de B et A la
valeur de C (toujours quels que soient les
contenus pralables de ces variables).

34
Expressions et oprateurs
Dans une instruction daffectation
gauche, une variable
cest toujours le cas!, sinon il y a un problme!
droite, une expression
Suite de variables et de constantes relies par des
oprateurs
quivalent une valeur unique!
La partie gauche et la partie droite sont
videmment du mme type
35
Oprateurs numriques
Les plus classiques:
+ : addition
- : soustraction
* : multiplication
/ : division
^ : puissance
Priorits
* et / sont prioritaire par rapport + et
valuation de gauche droite
Lutilisation des parenthses force les priorits

36
Exemples
3*4/2
3+2*5
3+4-2*3
3+(4-2)*3
(3+(4-2))*3

37
Oprateurs alphanumriques
Oprateurs de concatnation
En pseudo code: & ou + ou ^
Exemples
Variable v: caractres
v " Bon" + "jour"

38
Oprateurs boolens
Le ET:
Le OU: v
La ngation:
Exemples
Vrai Faux
Vrai v Faux
Faux v Faux
Ordre de priorit: puis puis v

39
Les oprateurs de comparaison
Renvoient un boolen comme rsultat
galit: =
Diffrents: <>
strictement infrieur: <
Infrieur ou gal: <=
strictement suprieur: >
Suprieur ou gal:>=
40
Mathmatique Vs Informatique
Quelques piges viter pour les grands mathmaticiens
que vous tes:
La notion de variable nest pas vraiment la mme dans les deux
cas:
x=2*y en mathmatique est une quation rsoudre ou une assertion
liant deux variables
En informatique,
cette expression na de sens que si "y" possde une valeur fixe
Le rapport entre x et y nest plus maintenu aprs lexcution de cette
affectation
Loprateur nest pas symtrique:
x=y et y=x sont deux expressions identiques
x y et yx ne le sont absolument pas!
41
Lecture et criture
42
Motivation
Un programme effectue des calculs mais, au
final, il serait intressant de voir le rsultat
quelque part:
Un programme qui additionne 2 et 3 puis laffiche
lcran est un peu plus intressant quun programme
qui garde le rsultat pour lui-mme!
Il est parfois intressant de pouvoir lui fournir des
entres pendant son excution
Un programme qui additionne deux valeurs que vous
lui donnez en entre est un peu plus intressant quun
programme qui additionne toujours 2 et 3!


43
Lopration dcriture
Permet un programme dafficher une
valeur par exemple sur lcran
En pseudo-code:
Variable V: caractres
V "bonjour"
Ecrire V
Ecrire " Le monde"
A la rencontre dune telle instruction, le
programme affiche la valeur courante de
lexpression droite
44
Lopration de Lecture
Permet un programme de lire une valeur
saisie par exemple au clavier
En pseudo-code:
Variable V: caractres
Lire V
A la rencontre dune telle instruction, le
programme sarrte jusqu la saisie dune chane
de caractres au clavier
Le programme continue son excution aprs la
saisie de la touche entre

45
Bonne pratique
Il est fortement conseill, avant une
instruction de lecture, de prvenir lutilisateur
et de lui indiquer ce quil doit faire
Exemple:
Variable N: caractres
Ecrire "Veuillez renseigner votre nom, svp!"
Lire N
Ecrire "Merci" + " " + N
46
Re-pause exercices
47
Exo1
Quel rsultat produit le programme suivant ?
Variables val, Double: Rel
Dbut
Val 231
Double Val * 2
Ecrire Val
Ecrire Double
Fin

48
Exo2
Ecrire un programme qui demande un
nombre lutilisateur, puis qui calcule
et affiche le carr de ce nombre.

49
Exo3
Ecrire un programme qui lit le prix HT dun
article, le nombre darticles et le taux de TVA,
et qui fournit le prix total TTC correspondant.
Faire en sorte que des libells apparaissent
clairement.
50
Les Tests
51
Motivation
Prenons lexemple de la recette de cuisine et un
algorithme pour se faire cuire un uf la coque
Prenez un bel uf frais. Si vous avez un micro-ondes,
mettez le dedans 20s, sinon utilisez une casserole et
mettez-le dans de leau bouillante pendant 5min
Lalgorithme prcdent prend en compte les deux
situations o le cuisinier possde ou non un micro-
ondes
Les ordinateurs sont aussi capable dvaluer une
situation et de raliser les calculs adquats en
consquence
52
Structure dun Test
Deux structures:
Si expression boolenne Alors
Instructions
Finsi
Si boolen Alors
Instructions 1
Sinon
Instructions 2
Finsi
Lexpression conditionnelle peut tre une
variable de type boolen ou une condition

53
La condition
Une condition est le rsultat dune
comparaison
Gnralement,
Une valeur
Un oprateur de comparaison
Une autre valeur
On retrouve les oprateurs: =, <, >, <>, <=,
>=
54
Smantique
Dans le premier cas,
Si lexpression boolenne est vraie, alors la
squence comprise dans instructions sera
excute puis les autres instructions qui suivent
seront excutes
Sinon, le programme saute la squence
instructions, et excute directement les
instructions qui suivent le bloc de test
55
Smantique
Dans le deuxime cas,
Si lexpression boolenne est vraie, alors le
programme:
excute la squence dinstructions instructions1 ,
Saute la squence dinstructions instuctions2 ,
Puis excute les instructions suivantes
Sinon, alors le programme:
saute la squence dinstructions instructions1
Excute la squence dinstructions instructions2
Puis continue en excutant les instructions suivantes
56
Luf la coque
Prendre un uf frais, Beldi de prfrence
Si vous avez un micro-ondes Alors
Mettre luf dans ce micro-ondes
Le sortir aprs 20s
Sinon
Prendre une casserole
Remplir la casserole deau
Mettre luf dans la casserole
Le sortir aprs 5min
FinSi
Mettre luf dans un coquetier
Le dguster

57
Un petit exo
Ecrire un algorithme qui demande un nombre
lutilisateur, et linforme ensuite si ce
nombre est positif ou ngatif (on laisse de
ct le cas o le nombre vaut zro).
58
Les conditions composes
Parfois, il nest pas possible dnoncer une
condition en utilisant une forme simple (de
type V>0)
Dans ces cas (e.g. 0<V<10), on utilisera les
oprateurs logiques: ET, OU, NON,


59
Tables de vrit
C1 et C2 C2 Vrai C2 Faux
C1 Vrai Vrai Faux
C1 Faux Faux Faux
C1 ou C2 C2 Vrai C2 Faux
C1 Vrai Vrai Vrai
C1 Faux Vrai Faux
C1 xor C2 C2 Vrai C2 Faux
C1 Vrai Faux Vrai
C1 Faux Vrai Faux
60
Encore deux petits exos
Ecrire un algorithme qui demande deux
nombres lutilisateur et linforme ensuite si
leur produit est ngatif ou positif (on laisse
de ct le cas o le produit est nul). Attention
toutefois : on ne doit pas calculer le produit
des deux nombres.
Ecrire un algorithme qui demande trois noms
lutilisateur et linforme ensuite sils sont
rangs ou non dans lordre alphabtique.
61
Tests imbriqus: motivation
Prenons, un autre exemple:
Un programme qui dtermine ltat de leau selon la temprature:
Une solution:
Variable Temp: Entier
Dbut
Ecrire "Entrez la temprature de leau :"
Lire Temp
Si Temp <= 0 Alors
Ecrire "Cest de la glace"
FinSi
Si Temp > 0 Et Temp =< 100 Alors
Ecrire "Cest du liquide"
Finsi
Si Temp > 100 Alors
Ecrire "Cest de la vapeur"
Finsi
Fin

62
Tests imbriqus
Pour notre exemple, en imbriquant les tests, il est plus lgant
dcrire:
Variable Temp: Entier
Dbut
Ecrire "Entrez la temprature de leau :"
Lire Temp
Si Temp <= 0 Alors
Ecrire "Cest de la glace"
Sinon
Si Temp =< 100 Alors
Ecrire "Cest du liquide"
Sinon
Ecrire "Cest de la vapeur"
Finsi
Finsi
Fin

63
Utilit
Lutilisation des tests imbriqus nest pas
indispensable, cependant elle permet davoir:
des programmes plus lisibles
des conditions moins complexes
des programmes "plus performants"
64
La pause exos!
65
Exo1
Ecrire un algorithme qui demande un nombre
lutilisateur, et linforme ensuite si ce
nombre est positif ou ngatif (on inclut cette
fois le traitement du cas o le nombre vaut
zro).
66
Exo2
Ecrire un algorithme qui demande deux
nombres lutilisateur et linforme ensuite si
le produit est ngatif ou positif (on inclut cette
fois le traitement du cas o le produit peut
tre nul). Attention toutefois, on ne doit pas
calculer le produit !

67
Exo3
Ecrire un algorithme qui demande lge dun
enfant lutilisateur. Ensuite, il linforme de
sa catgorie sachant quun enfant g de
moins de 6 ans nest pas admis (lutilisateur
est suppos coopratif et ne rentrera pas de
valeur infrieure 6):
"Poussin" de 6 7 ans
"Pupille" de 8 9 ans
"Minime" de 10 11 ans
"Cadet" aprs 12 ans
68
Exo4
Un magasin de reprographie facture 1DH les
dix premires photocopies, 0,75 DH les vingt
suivantes et 0,50 DH au-del. Ecrire un
algorithme qui demande lutilisateur le
nombre de photocopies effectues et qui
affiche la facture correspondante.

69
Exo5
Les habitants de Mars paient limpt selon
les rgles suivantes :
les hommes de plus de 20 ans paient limpt
les femmes paient limpt si elles ont entre 18 et
35 ans
les autres ne paient pas dimpt
Le programme demandera donc lge et le
sexe du Marcien, et se prononcera donc
ensuite sur le fait que lhabitant est
imposable.

70
Exo6
Les lections lgislatives sur Jupiter obissent la rgle
suivante :
lorsque l'un des candidats obtient plus de 50% des suffrages, il est
lu ds le premier tour.
en cas de deuxime tour, peuvent participer uniquement les
candidats ayant obtenu au moins 12,5% des voix au premier tour.
Ecrire un algorithme qui permette la saisie des scores de
quatre candidats au premier tour. Cet algorithme traitera
ensuite le candidat numro 1 (et uniquement lui) : il dira s'il est
lu, battu, s'il se trouve en ballottage favorable (il participe au
second tour en tant arriv en tte l'issue du premier tour) ou
dfavorable (il participe au second tour sans avoir t en tte
au premier tour).

71
Les boucles
72
Justification, un exemple
Posons le problme suivant:
Nous voulons raliser un programme qui renvoie linverse dun
chiffre: pour N, renvoyer 1/N.
En bon concepteur, le programmeur veut prendre en compte le
fait que lutilisateur ne doit pas rentrer un 0.
En utilisant une structure conditionnelle, on peut crire:
Variable UnChiffre: Entier
Ecrire "donner un chiffre et je vous renvoie son inverse"
Lire UnChiffre
Si UnChiffre =0 Alors
Ecrire "Saisie erronne. Donner un chiffre non nul !"
Lire UnChiffre
FinSi
Ecrire 1/UnChiffre

73
Justification
Quest-ce qui se passe si lutilisateur donne
encore un zro?
Combien de Tests il faut inclure pour
rsoudre le problme dun utilisateur ttu?
Conceptuellement, quelle serait la solution?
74
La solution: une boucle itrative
Structure:
TantQue boolen

Instructions

FinTantQue
Pour notre problme, cela donnerait:
Variable UnChiffre: Entier
Ecrire "donner un chiffre et je vous renvoie son inverse"
Lire UnChiffre
TantQue (UnChiffre=0)
Ecrire "Saisie errone. Donner un chiffre non nul !"
Lire UnChiffre
FinTantQue
Ecrire 1/UnChiffre

75
Principe de la boucle
Le principe est simple :
le programme arrive sur la ligne du TantQue.
Il examine alors la valeur du boolen (qui peut
tre une variable boolenne ou une condition).
Si cette valeur est VRAI, le programme excute les
instructions qui suivent, jusqu ce quil rencontre la ligne
FinTantQue.
Il retourne ensuite sur la ligne du TantQue, procde au mme
examen, et ainsi de suite.
Le Programme poursuit lexcution des
instructions qui suivent la boucle ds que le
boolen prend la valeur FAUX.

76
Exo1
Ecrire un algorithme qui demande
lutilisateur un nombre compris entre 1 et 3
jusqu ce que la rponse convienne.

77
Exo2
Ecrire un algorithme qui demande un nombre
compris entre 10 et 20, jusqu ce que la
rponse convienne. En cas de rponse
suprieure 20, on fera apparatre un
message : Plus petit ! , et inversement,
Plus grand ! si le nombre est infrieur
10.

78
Exo3
Ecrire un algorithme qui demande un nombre
de dpart, et qui ensuite affiche les dix
nombres suivants. Par exemple, si
l'utilisateur entre le nombre 17, le programme
affichera les nombres de 18 27.

79
Les boucles Pour :
Boucler en comptant
Parfois le nombre de boucles peut tre
dtermin lavance, exemple de lexo3
Dans ce cas on peut utiliser une structure
itrative qui utilise une variable entire qui
sincrmente chaque itration. Structure:
Pour Compteur <- ValeurInitiale ValeurFinale

Instructions

Compteur Suivant
80
Les pas dincrmentation
Par dfaut, le compteur est incrment de 1
Parfois, on peut avoir besoin dincrmenter le
compteur dune valeur diffrente
Dans ce cas, lincrment est spcifi explicitement:
Pour Compteur <- ValeurInitiale ValeurFinale PAS ValeurDuPas

Instructions

Compteur Suivant


81
Arbitrage,
boucle TantQue Vs boucle Pour
La boucle "TantQue" sera utilise lors du
traitement densembles dont on ne connat pas la
taille, e.g. :
Contrle de saisie
Lecture dans un fichier/ une base de donne
Gestion dapplications interactives,
La boucle "Pour" sera privilgie lors du traitement
densembles dont la taille est connue, e.g.:
Un intervalle dentiers
Un tableau,

82
Les boucles imbriques
De la mme manire que les structures de tests
imbriques, on peut imbriquer des boucles
Exemple:
Variables i,j : Entier
Pour i0 3
Ecrire "boucle sup"
Pour j0 3
Ecrire "boucle inf"
Suivant j
Suivant i

83
Variables i,j : Entier
Pour i0 3
Ecrire "boucle sup"
Suivant i
Pour j0 3
Ecrire "boucle inf"
Suivant j

Exo4
Ecrire un algorithme qui demande un nombre
de dpart, et qui ensuite crit la table de
multiplication de ce nombre, prsente
comme suit :
Table de n :
n x 1 = 7
n x 2 = 14
n x 3 = 21

n x 10 = 70

84
Exo5
Ecrire un algorithme qui demande un nombre
de dpart, et qui calcule la somme des
entiers jusqu ce nombre. Par exemple, si
lon entre 5, le programme doit calculer :
1 + 2 + 3 + 4 + 5 = 15
85
Exo6
Ecrire un algorithme qui demande un nombre
de dpart, et qui calcule sa factorielle.
la factorielle de 8, note 8 !, vaut
1 x 2 x 3 x 4 x 5 x 6 x 7 x 8

86
Exo7
Ecrire un algorithme qui demande successivement 20
nombres lutilisateur, et qui lui dit ensuite quel tait le
plus grand parmi ces 20 nombres, e.g. :
Entrez le nombre numro 1 : 12
Entrez le nombre numro 2 : 14
etc.
Entrez le nombre numro 20 : 6
Le plus grand de ces nombres est : 14
Modifiez ensuite lalgorithme pour que le programme
affiche de surcrot en quelle position avait t saisie ce
nombre :
Ctait le nombre numro 2

87
Exo8
Rcrire lalgorithme de lexo7, mais cette
fois-ci on ne connat pas davance combien
lutilisateur souhaite saisir de nombres. La
saisie des nombres sarrte lorsque
lutilisateur entre un zro.

88
Exo9
crire un algorithme qui permet de connatre ses
chances de gagner au tierc, quart, quint:
On demande lutilisateur le nombre de chevaux partants,
et le nombre de chevaux jous. Les deux messages
affichs devront tre :
Dans lordre : une chance sur X de gagner
Dans le dsordre : une chance sur Y de gagner
X et Y nous sont donns par la formule suivante, si n est le
nombre de chevaux partants et p le nombre de chevaux
jous :
X = n ! / (n - p) !
Y = n ! / (p ! * (n p) !)

89
Les tableaux
90
Motivation
Il est ncessaire parfois de stocker et de traiter un
certains nombres dinformations du mme type
Les noms dutilisateurs dun forum
Les notes dune classe,
Une premire possibilit est de crer autant de
variables que dinformations
Pbs:
Leur nombre peut tre assez consquent
Ce nombre peut ne pas tre connu lavance
Ce nombre peut fluctuer pendant lexcution

91
La solution magique:
Utiliser la structure tableau
Un tableau est une variable contenant
plusieurs lments
Chaque lments est identifi par sa position
dans le tableau,
La position dun lment est appele indice
92
Notation
Un tableau est dclar en spcifiant
Son nom
Le type de ces lments
Accessoirement, sa taille
Dans la plus part des langages, un tableau est
homogne. On va donc sen tenir cette contrainte
Exemple
Tableau Noms(10) : Caractres
Dclare une variable de type tableau nomme Noms
contenant au plus 10 lments de type caractres
93
Les indices
Dans la majorit des langages de
programmation, les indices commencent 0
Lindice est toujours un entier
Le premier lment du tableau est llment qui
possde lindice 0
Le i
me
lment possde lindice (i-1)
Lindice ne peut tre suprieur ou gal la taille du
tableau
Llment possdant lindice i est accessible via la
notation : NomTableau(i)
94
Les tableaux et les boucles
Un des gros avantages de lutilisation des
tableaux est de pouvoir faire des traitements
gnriques en utilisant les boucles
Exemple,
saisie de notes dune classe de 10 lves et
calcul de la moyenne:


95
Solution
Tableau Note(10) : Rel
Variable Moyenne, Somme: Rel
Variable i: Entier
Pour i 0 9
Ecrire "Entrez la note numro: "
Ecrire i+1
Lire Note(i)
i Suivant
Som 0
Pour i 0 9
Som Som + Note(i)
i Suivant
Moyenne Somme / 10
Ecrire "la moyenne de la classe est gale : " + Moyenne


96
Exo1
Ecrire un algorithme qui dclare et remplit un
tableau de 7 valeurs numriques en les
mettant toutes zro.

97
Exo2
Que produit lalgorithme suivant ?
Tableau Nb(5) : Entier
Variable i : Entier
Pour i 0 4
Nb(i) i * i
i suivant
Pour i 0 4
Ecrire Nb(i)
i suivant
Peut-on simplifier cet algorithme ?

98
Exo3
Que produit lalgorithme suivant ?
Tableau N(7) : Entier
Variables i, k : Entier
N(0) 1
Pour k 1 6
N(k) N(k-1) + 2
k Suivant
Pour i 0 6
Ecrire N(i)
i suivant
99
Exo4
Que produit lalgorithme suivant ?
Tableau Suite(7) : Entier
Variable i : Entier
Suite(0) 1
Suite(1) 1
Pour i 2 7
Suite(i) Suite(i-1) + Suite(i-2)
i suivant
Pour i 0 7
Ecrire Suite(i)
i suivant

100
Les tableaux dynamiques
Parfois, la taille du tableau nest pas connue
dans la phase de programmation, mais
pendant la phase dexcution
Pour cela, il est possible de dclarer un
tableau sans indiquer sa dimension
En utilisera linstruction Redim pour
indiquer ultrieurement sa dimension
101
Exemple
Tableau Note() : Rel
Variable Moyenne, Somme: Rel
Variable taille, i: Entier
Ecrire "donner le nombre dlves"
Lire taille
Redim Note(taille)
Pour i 0 (taille-1)
Ecrire "Entrez la note numro: "
Ecrire i+1
Lire Note(i)
i Suivant
..


102
Exo5
Ecrivez un algorithme permettant lutilisateur
de saisir un nombre quelconque de valeurs, qui
devront tre stockes dans un tableau.
Lutilisateur doit donc commencer par entrer le
nombre de valeurs quil compte saisir. Il effectuera
ensuite cette saisie.
Enfin, une fois la saisie termine, le programme
affichera le nombre de valeurs ngatives et le nombre
de valeurs positives.

103
Exo6
Ecrivez un algorithme calculant la somme
des valeurs dun tableau.

104
Exo7
Ecrivez un algorithme qui permette la saisie
dun nombre quelconque de valeurs, spcifi
par lutilisateur.
Toutes les valeurs doivent tre ensuite
augmentes de 1, lancien et le nouveau
tableau seront affich lcran sous la forme
[i0,i1,.,in].
105
Exo8
Ecrivez un algorithme permettant, toujours
sur le mme principe, lutilisateur de saisir
un nombre dtermin de valeurs. Le
programme, une fois la saisie termine,
renvoie la plus grande valeur en prcisant
quelle position elle occupe dans le tableau.
On prendra soin deffectuer la saisie dans un
premier temps, et la recherche de la plus
grande valeur du tableau dans un second
temps.

106
Exo9
Toujours et encore sur le mme principe,
crivez un algorithme permettant,
lutilisateur de saisir les notes d'une classe.
Le programme, une fois la saisie termine,
renvoie le nombre des notes suprieures la
moyenne de la classe.
107
Les algorithmes
classiques pour les
tableaux
108
Objectif
Dans une multitude de cas, des problmes
classiques sont soulevs:
trier un tableau, exemples classiques:
Dictionnaire
Notes
Rechercher une valeur dans un tableau
Est-ce quun mot existe?
Est-ce quun tudiant a eu une note liminatoire
109
Algorithmes classiques
Algorithmes de Tri
Tri par slection
Tri bulles
Algorithme de recherche
Utilisation dun drapeau (flag)
110
Tri par slection
Ide trs simple:
Parcourir le tableau,
Dtecter llment le plus petit
Mettre cet lment la position 0 (en fait
changer son indice avec celui qui est
initialement lindice 0)
Refaire le mme traitement pour le deuxime
lment le plus petit et lindice 1
Continuer ainsi jusqu puisement du tableau
111
Lalgorithme:
Pour i 0 taille-2
posmini i
Pour j i + 1 taille-1
Si t(j) < t(posmini) Alors
posmini j
Finsi
j suivant
temp t(posmini)
t(posmini) t(i)
t(i) temp
i suivant
112
Algorithme de recherche:
lutilisation des flags
Un flag est un drapeau correspondant
loccurrence dun vnement
Gnralement, cest une valeur boolenne
Mise au dpart Faux
Pendant le traitement, elle change de valeur si
lvnement est rencontr, elle reste faux sinon
A la fin du traitement, la valeur du boolen permet
de dire sil y a occurrence ou pas de lvnement.
113
Exemple de problme
Prenons lexemple suivant:
Un tableau dentier
Lutilisateur saisit un entier au clavier
Lalgorithme dtermine si lentier est dans le tableau
ou pas
Tableau Tab(20) : Entier
Variable N : Entier
Ecrire "Entrez une valeur entire"
Lire N
Pour i 0 19
xxxxxxxxxx
xxxxxxxxxx
i suivant


114
Examinons une solution intuitive
Tableau Tab(20) : Entier
Variable N : Entier
Dbut
Ecrire "Entrez une valeur"
Lire N
Pour i 0 19
Si N = Tab(i) Alors
Ecrire "y est!"
Sinon
Ecrire "y est pas!"
FinSi
i suivant

Que fait lalgo si la valeur ny
est pas?
Que fait-il quand elle y est ?
Quest ce quil se passe si le
tableaux comprend
1 000 000 de valeurs?
Quest-ce qui se passe si le
tableau comprend 1 000 000
de valeurs gales la valeur
recherche

115
Conclusions
A lintrieur de la boucle
Faire le test
A lextrieur
Rcuprer le rsultat des traitements
Effectuer les affichages correspondants
Solution magique: utiliser un flag!
Flag = true y est
Flag = false y est pas
116
Algorithme
Tableau Tab(20) : Entier
Variable N : Entier
Variable Trouv: Boolen
Ecrire "Entrez une valeur entire"
Lire N
Trouv Faux
Pour i 0 19
Si N = Tab(i) Alors
Trouv Vrai
FinSi
i suivant
Si Trouv Alors
Ecrire "y est!"
Sinon
Ecrire "y est pas!"
FinSi

117
Le tri bulles
Tri bulles = tri de tableau + flag
Pour le tri par slection, lide simple:
Le plus petit lment est dans position 0
Le suivant est dans la position 1
Ainsi de suite
Maintenant, une autre proprit simple: pour
un tableau tri:
Dans un tableau tri, tout lment est plus petit
que llment qui le suit
118
Principe de base du bulles
fonctionnement:
Si un lment est plus grand que llment qui le suit,
on les permute
Continuer tant que notre proprit simple nest pas
vrifie
Dispositif:
Nous utiliserons un flag correspondant la vrification
de notre proprit
chaque parcours du tableau, les lments les plus
petits remontent vers le haut
Quand le flag est true, le tableau est tri
119
Le flag
Variable Tri: Boolen
Tri Faux
TantQue non Tri
Tri VRAI
Pour i 0 9
Si t(i) > t(i+1) Alors
temp t(i)
t(i) t(i+1)
t(i+1) temp
Tri FAUX
Finsi
i suivant
FinTantQue
120
Un autre algorithme classique:
La recherche dichotomique
Lalgorithme de recherche dichotomique est
Un algorithme de recherche
Destin aux tableaux de grande taille
Exemple classique: recherche dun mot dans un
dictionnaire
Motivation principale: profiter du fait que le
tableau soit tri pour effectuer une recherche
plus efficace quune recherche simple
121
Dmarche
Subdiviser le tableau en deux parties
identifier la partie o peut tre llment
Prendre cette partie et la subdiviser son tour en
deux sous parties
Identifier la sous partie o est susceptible de se
trouver llment
Continuer, jusqu
trouver llment sur un milieu de sous partie lment
trouv, Ou:
Quil ny aie plus de partie subdiviser lment absent
122
Lalgorithme
Variable Sup, Inf, i, Comp : Entier
Tableau tab(N): Entier
Variable arret : Boolen
Ecrire "Entrez lentier trouver"
Lire i
Sup N - 1
Inf 0
arret Faux

TantQue Non(arret)
Comp (Sup + Inf)/2
Si i < tab(Comp) Alors
Sup Comp - 1
Sinon
Inf Comp + 1
FinSi
arret (i = tab(Comp) ou
Sup < Inf)
FinTantQue
Si i = tab(Comp) Alors
Ecrire "y est!"
Sinon
Ecrire "y est pas!"
Finsi


123
Exo1
Ecrivez un algorithme qui trie un tableau
dans lordre dcroissant. Vous crirez bien
entendu deux versions de cet algorithme,
l'une employant le tri par selection, l'autre le
tri bulles

12
4
Exo2
Ecrivez un algorithme qui inverse lordre des
lments dun tableau dont on suppose qu'il
a t pralablement saisi ( les premiers
seront les derniers ) en utilisant un
tableau unique.

125
Exo3
Ecrivez un algorithme qui permette
lutilisateur de supprimer une valeur dun
tableau pralablement saisi. Lutilisateur
donnera lindice de la valeur quil souhaite
supprimer. Attention, il ne sagit pas de
remettre une valeur zro, mais bel et bien
de la supprimer du tableau lui-mme !
126
Partie 4:
Les tableaux
mutidimensionnels
127
Motivation
Prenons, lexemple dun calcul matricielle
Une matrice de M lignes et N colonnes peut
bien videmment tre modlise par un
tableau de taille M*N
Afin de calculer la multiplication de deux
matrices, imaginez le casse tte!
Lide, pourquoi ne pas modliser une
matrice par une structure matricielle:
Un tableau de tableaux, i.e. un tableau de
dimension 2
128
Un tableau de tableaux
Un tableau de tableaux est dclar de la
manire suivante:
Tableau Nom_tableau(dim1)(dim2): T
Cette dclaration permet la rservation dun
espace mmoire quivalent dim1*dim2 de
lespace mmoire de stockage dun lment
de type T.
Laccs llement se trouvant la i
me
ligne
et la j
me
colonne se fait travers lappel:
Nom_Tableau(i-1)(j-1)
129
Exo1
crivez un algorithme remplissant un tableau
de 6 sur 13, avec des zros.

130
Exo2
Quel rsultat produira cet algorithme ?
Tableau X(2, 3) : Entier
Variables i, j, val : Entier
Val 1
Pour i 0 1
Pour j 0 2
X(i, j) Val
Val Val + 1
j Suivant
i Suivant
Pour i 0 1
Pour j 0 2
Ecrire X(i, j)
j Suivant
i Suivant

131
Exo3
Quel rsultat produira cet algorithme ?
Tableau X(2, 3) en Entier
Variables i, j, val en Entier
Val 1
Pour i 0 1
Pour j 0 2
X(i, j) Val
Val Val + 1
j Suivant
i Suivant
Pour j 0 2
Pour i 0 1
Ecrire X(i, j)
i Suivant
j Suivant

132
Exo4
Quel rsultat produira cet algorithme ?
Tableau T(4, 2) en Entier
Variables k, m, en Entier
Pour k 0 3
Pour m 0 1
T(k, m) k + m
m Suivant
k Suivant
Pour k 0 3
Pour m 0 1
Ecrire T(k, m)
m Suivant
k Suivant


133
Exo5
Mmes questions, en remplaant la ligne :
T(k, m) k + m par
T(k, m) 2 * k + (m + 1)
puis par :
T(k, m) (k + 1) + 4 * m

134
Exo6
Soit un tableau T deux dimensions (12, 8)
pralablement rempli de valeurs numriques.
crire un algorithme qui recherche la plus
grande valeur au sein de ce tableau.

135
Tableau N dimensions
Il est possible de dclarer des tableaux N
dimensions:
Position dun objet dans lespace: un tableau 3
dimension un cube
Position dun objet dans lespace et dans le
temps: un tableau 4 dimension
Dclaration:
Tableau Nom_tableau(dim1)(dimN): type
Accs llment i1,,iN:
Nom_tableau(i1-1)(iN-1)

136
Les fonctions prdfinies
137
Utilit
Les algorithmes peuvent sappuyer sur des
bibliothques pour effectuer des calculs
Les bibliothques offrent des fonctions
prdfinies
Effectuent des traitement impossible raliser
par un algorithme
Soulagent le programmeur:
Sin(x)=x-(x^3/3!)+ (x^5/5!)-.
Exemple: calculer Sin(x)
138
Cest quoi une fonction en
informatique?
Une fonction est constitue du:
Nom de la fonction
Deux parenthses, une ouvrante et une fermante
Dun certain nombres darguments ou de
paramtres
Chaque argument possde une position et un type
Exemple
Variable A: Rel
A sin(55)
139
Exemple
Parmi ces affectations (considres
indpendamment les unes des autres), lesquelles
provoqueront des erreurs, et pourquoi ?
Variables A, B, C : Rel
Variables D, E : Caractre
A Sin(B)
A Sin(A + B * C)
B Sin(A) Sin(D)
D Sin(A / B)
C Cos(Sin(A)

140
Quelques exemples de fonctions
prdfinies classiques
Les fonctions de textes
Len(chane) : renvoie le nombre de caractres dune chane
Mid(chane,n1,n2) : renvoie un extrait de la chane, commenant
au caractre n1 et faisant n2 caractres de long.
Left(chane,n) : renvoie les n caractres les plus gauche dans
chane.
Right(chane,n) : renvoie les n caractres les plus droite dans
chane
Trouve(chane1,chane2) : renvoie un nombre correspondant la
position de chane2 dans chane1. Si chane2 nest pas comprise
dans chane1, la fonction renvoie zro.


141
Exo1
Ecrivez un algorithme qui demande un mot
lutilisateur et qui affiche lcran le nombre
de lettres de ce mot
142
Exo2
Ecrivez un algorithme qui demande une
phrase lutilisateur et qui affiche lcran le
nombre de mots de cette phrase. On
suppose que les mots ne sont spars que
par des espaces
143
Exo3
Ecrivez un algorithme qui demande une
phrase lutilisateur. Celui-ci entrera ensuite
le rang dun caractre supprimer, et la
nouvelle phrase doit tre affiche (on doit
rellement supprimer le caractre dans la
variable qui stocke la phrase, et pas
uniquement lcran).
144
Exemples
145
Mthode rsultat
Len("Bonjour, a va ?") 16
Len("") 0
Mid("Zorro is back", 4, 7) "ro is b"
Mid("Zorro is back", 12, 1) "c"
Left("Et pourtant", 8) "Et pourt"
Right("Et pourtant", 4) "t"
Trouve("Un pur bonheur", "pur") 4
Trouve("Un pur bonheur", "Sur terre") 0
Quelques exemples de fonctions
prdfinies classiques
Les fonctions numriques classiques:
Ent(nombre_Rel): renvoie la valeur entire
E.g. Ent(1,5) renvoie 1
Mod(nombre1,nombre2): renvoie le modulo
E.g. Mod(3,10): renvoie 3
Alea(): permet de gnrer un chiffre alatoire
entre 0 et 1
E.g Alea()*N: permet de gnrer un chiffre alatoire
entre 0 et N
146
Exo1
Ecrivez un algorithme qui demande un
nombre entier lutilisateur. Lordinateur
affiche ensuite le message "Ce nombre est
pair" ou "Ce nombre est impair" selon le cas.
147
Exo2
Ecrivez les algorithmes qui gnrent un
nombre X alatoire tel que
0 =< X < 2
1 =< X < 1
1,35 =< X < 1,65
X modlise un d six faces
10,5 =< X < +6,5
Glup modlise la somme du jet simultan de deux
ds six faces

148
En Conclusion
Lalgorithmique reste un moyen
de rflchir la rsolution dun problme
de structurer et de vrifier la validit dune solution
de communiquer et de publier cette solution
On a parcouru les mcanismes classiques
utiliss dans lalgorithmique et mis disposition
du programmeur
149



Complexit des Algorithmes


15
0
La double problmatique de
lalgorithmique:
Trouver une mthode de rsolution (exacte
ou approche) du problme.
E.g. calculer pour un X rel et un n entier la
valeur X^n
Trouver une mthode efficace.
Savoir rsoudre un problme est une chose,
le rsoudre efficacement en est une autre.
151
Motivation
Calcul de x^n
Donnes : un entier naturel n et un rel x. On
veut calculer x^n.
Moyens :
Nous partons de y1 = x.
Nous allons construire une suite de valeurs y1, ..., ym
telle que la valeur yk soit obtenue par multiplication de
deux puissances de x prcdemment calcules :
yk = yu yv, avec 1 u;v < k, k [2;m].
But : ym= x^n.
Le cot de lalgorithme sera alors de m-1, le nombre de
multiplications faites pour obtenir le rsultat recherch
153
Algorithme trivial
y[1] = x
Pour i de 2 n faire
y[i] = y[i-1] y[1]
renvoyer y[n]
Le cot de lalgorithme: n-1 multiplications
154
Mthode binaire
crire n sous forme binaire
Remplacer chaque :
1 par la paire de lettres SX ;
0 par la lettre S .
liminer la paire SX la plus gauche.
Rsultat : un mode de calcul de x^n, en partant
de x o
S signifie lever au carr (squaring)
X signifie multiplier par x .
SX lev au carr puis multiplier par X
155
Illustration
Illustration avec n = 25
n = 11001
1 1 0 0 1
SX SX S S SX
SX S S SX
Nous partons de x et nous obtenons successivement :
x^2, x^3, x^6, x^12, x^24, x^25.
Nous sommes donc capables de calculer x^25 en 6
multiplications au lieu de 24 pour lalgorithme trivial
156
La complexit
Soit n un chiffre dont la reprsentation prend
p chiffres binaires, on a:

Ce qui donne:
Soit Nb1, le nombre de 1 dans lcriture
binaire de n
On a donc : lvations au carr
(limination du premier SX)
Et multiplications par x
Le nombre de multiplications:
157
La complexit
Trivialement :

On obtient donc:


Ce qui donne 20 multiplications au plus pour
calculer x^1000 au lieu de 999 multiplications
158
Y a t-il mieux?
Prenons le cas n = 15 = 1111
1 1 1 1
SX SX SX SX
SX SX SX
Nous partons de x et nous obtenons successivement :
x2, x3, x6, x7, x14, x15.
Nous sommes donc capables de calculer x^15 en 6 multiplications
par la mthode binaire
Autre schma de calcul : x2, x3, x6, x12, x15 = x12x3.
Nous obtenons ainsi x15 en 5 multiplications
La mthode binaire nest donc pas optimale (cest--dire que lon
peut faire mieux).
159
Algorithme de larbre
Le k+1e niveau de larbre est dfini comme
suit :
on suppose que lon a dj les k premiers
niveaux ;
on construit le k+1e de la gauche vers la droite en
ajoutant sous le nud n les nuds de valeur
n+1, n+a1, ...,n+ak-1 o 1, a1, ..., ak-1 est le
chemin de la racine au nud n ;
on supprime tous les nuds qui dupliquent une
valeur dj obtenue.
160
Illustration
161
x
x^2
x^3 x^4
x^5 x^6 x^8
x^7 x^10 x^9 x^12 x^16
x^14 x^13 x^15 x^20

Comparaison
Pour calculer x^15, on effectue, donc le chemin:
x^2=x * x
x^3=x^2 * x
x^5=x^3 * x^2
x^10=x^5 * x^5
x^15=x^10 * x^5
5 multiplications au lieu de 6!
Lalgorithme de larbre est optimal pour tout n76
162
En conclusion
Pour un problme donn (mme aussi
simple que calculer x^n), il est parfois facile
de trouver un algorithme mais pas toujours
lalgorithme le plus optimal
La suite:
Des problmes classiques
Des mthodes classiques de rsolution
Des structures de donnes classiques
Une tude de complexit comparative, sera
ralise tout au long
163
Complexit et optimalit:
Concepts et dfinitions
164
La complexit
Dfinition: La complexit dun algorithme est la
mesure du nombre doprations fondamentales
quil effectue sur un jeu de donnes. La
complexit est exprime comme une fonction
de la taille du jeu de donnes
Dn, note lensemble des donnes de taille n
T(d), le cot de lalgorithme sur une donne d
165
Complexit au meilleur
Le plus petit nombre doprations quaura
excuter lalgorithme sur un jeu de donnes de
taille fixe.

Cest une borne infrieure de la complexit de
lalgorithme


166
Complexit au pire
Cest le plus grand nombre doprations
quaura excuter lalgorithme sur un jeu de
donnes de taille fixe

il sagit dun maximum, et lalgorithme finira
donc toujours avant davoir effectu Tmax(n)
oprations



167
Complexit en moyenne
Cest la moyenne des complexits de
lalgorithme sur les jeux de donnes dune taille
donne
Parfois, il faut prendre en compte la probabilit
de leur apparition
reflte le comportement gnral de
lalgorithme si les cas extrmes sont rares ou si
la complexit varie peu en fonction des donnes



168
Optimalit


Un algorithme est dit optimal si sa complexit est
la complexit minimale parmi les algorithmes de
sa classe.
169
Caractristiques des tudes de
complexit
Dans une tude de complexit, on
sintresse
Gnralement la complexit en temps des
algorithmes.
Parfois (rarement) dautres caractristiques
la complexit en espace (taille de lespace mmoire
utilis),
la largeur de bande passante requise,


170
Contexte de ltude
Dans ltude de complexit, il est parfois
intressant de considrer le modle de
machine dexcution
Gnralement machines :
accs alatoire (RAM)
processeur unique
Excution squentielle

171
Ordre de grandeurs pour la
complexit
La complexit dun algorithme est considre
dun point de vue ordre de grandeur et pas
en terme de complexit exacte.
On utilise gnralement les Notation de
landau




172
Exemple
O :
n = O(n), 2n = O(3n), n+2 = O(n), pn = O(n),
log(n) = O(n),
n = O(n2).
o :
Racine(n) = o(n), n = o(n2),
log(n) = o(n), log(n) = o(racine(n)).
: n+log(n) = (n+racine(n)).
173
Illustration:
Algorithme du tri par
slection
174
Lalgo
Ide trs simple:
Parcourir le tableau,
Dtecter llment le plus petit
Mettre cet lment la position 0 (en fait
changer son indice avec celui qui est
initialement lindice 0)
Refaire le mme traitement pour le deuxime
lment le plus petit et lindice 1
Continuer ainsi jusqu puisement du tableau

175
Etude de complexit:
tableau de taille n
Pour j 0 n-2
posmini j c1 n-1
Pour i j + 1 n-1
Si t(i) < t(posmini) Alors
posmini i c2
Finsi
i suivant
temp t(posmini) c4 n-1
t(posmini) t(j) c5 n-1
t(j) temp c6 n-1
j suivant c7 n-1
C_boucle(j) = nbre dexcution de linstruction pour un i donn

Complexit =

176
(
Complexit au meilleur cas
Le meilleur cas se prsente si le tableau est
dj tri
Dans ce cas,
C_boucle(j)=0
La complexit est de:
T(n)=
T(n) est de la forme an+b
Cest une complexit linaire

177
(

Complexit au pire
La pire situation se prsente quand le
tableau est tri dans le sens inverse
Dans ce cas
C_boucle(j)= n-j-1
On retrouve sachant que

T(n)=
Complexit de la forme ax^2+bx+c : complexit
quadratique
178
Complexit en moyenne
En moyenne, on peut avancer que pour un j
donn, on va retrouver la moiti des valeurs
plus grandes et lautre plus petites
Dans ce cas: C_boucle(j)= |j/2|
En remplaant cette valeur dans lquation,
on retrouve aussi une complexit
quadratique
179
Ordre de grandeur
En se rfrant aux ordres de grandeur, on
retrouve, pour lalgorithme de tri par
slection:
Complexit au mieux: (n)
Complexit au pire: (n^2)
Complexit en moyenne: (n^2)

180
Autres classes des complexits
Les algorithmes usuels peuvent tre classs en un certain nombre
de grandes classes de complexit :
Les algorithmes sub-linaires : O(log n)
Les algorithmes linaires: O(n)
Les algorithmes polynomiaux en O(n^k) pour k > 2
Exponentiels: la complexit est suprieure tout polynme en n)
Les algorithmes linaires et sub-linaires sont considrs comme
rapides
Les algorithmes polynomiaux sont considrs comme lents
Les algorithmes exponentiels sont considrs comme trs lents et
impraticable au-del dune taille des donnes suprieure quelques
dizaines dunits.
181
THE END
182