Vous êtes sur la page 1sur 82

1.

1 Algorithmique et Structures de Donnes


Jean-Charles Rgin

Licence Informatique 2me anne

JC Rgin - ASD - L2I - 2010


1.2 Partie I : Introduction et tableaux
Jean-Charles Rgin

Licence Informatique 2me anne

JC Rgin - ASD - L2I - 2010


Remerciements
1.3

Carine Fdle
Wikipedia
p

JC Rgin - ASD - L2I - 2010


Plan du cours
1.4

Sances 1
S 1, 2,
2 3,
3 4 introduction
i t d ti + tableaux
t bl + structures
t t de
d
donnes bases sur les tableaux (tas, matrice)
tri par insertion, par tas, comptage
multiplication de matrice
intro au type abstrait par exemple ensemble (implment par
tableaux)
Sance 5 : interrogation 1 d'1h30
S
Sances 6 : file/pile
fil / il
Sances 7 : listes
S
Sances 8 : arbres
b
Sance 9 : interrogation 2 d'1h30

JC Rgin - ASD - L2I - 2010


Contrle des connaissances
1.5

interrogation 1 (40%)
interrogation
g 2 (40%)
( )
projet en TP (20%)

JC Rgin - ASD - L2I - 2010


Rfrences
1.6

T. Cormen,
C C Leiserson, R. Rivest : Introduction
C. d
lalgorithmique, Dunod
D Knuth
D. K h : The
Th Art
A off Computer
C Programming
P i
R. Tarjan : Data Structures and Network Algorithms
R. Ahuja, T. Magnanti et J. Orlin : Network Flows, Prentice
Hall
C Berge : G
C. Graphes et hypergraphes, Dunod
M. Gondran et M. Minoux : Graphes et Algorithmes
Autres livres selon votre got: ne pas hsiter en consulter
plusieurs

JC Rgin - ASD - L2I - 2010


Plan
1.7

Algorithmes
Al ith
Complexit
P
Preuve
Structures de donnes
Pseudo Langage
Tableaux
Tri par insertion
Calcul de xn
Logarithme
Recherche dichotomique

JC Rgin - ASD - L2I - 2010


Algorithmes classiques
1.8

Chemin
Ch i d
dans un grapheh : votre
t GPS
GPS, votre
t tl
tlphone
h IP
IP, ttoutt ce quii estt
acheminement (la Poste)
Flots : affectations, emploi du temps, bagages (aroport), portes
d b
dembarquement
Scheduling (ordonnancement) fabrication de matriel dans les usines,
construction automobiles
Coupes : coupes dacier, poterie (assiette du Mont St Michel)
Compression/Dcompression : MP3, xvid, divx, h264 codecs audio et
vido tar
vido, tar, zip.
zip
Cryptage : RSA (achat lectronique)
Internet : Routage des informations, moteurs de recherche
Simulation : Prvision mto, Explosion nuclaire
Traitement dimages (mdecine) , effets spciaux (cinma)

JC Rgin - ASD - L2I - 2010


Algorithmes
1.9

Les programmes deviennent gros


On ne ppeut plus
p programmer
p g et penser
p nimporte
p
comment
Voir Aide/ A propos d
dAcrobat
Acrobat Reader Pro

JC Rgin - ASD - L2I - 2010


Algorithmique : une science trs ancienne
1.10

Remonte
R t lAntiquit
lA ti it (Euclide
(E lid : calcul
l l du
d pgcd
d de
d ddeux
nombres, Archimde : calcul dune approximation de )

Le mot algorithme vient du mathmaticien arabe du 9me


sicle Al Khou Warismi

Lalgorithmique
g q reste la base dure de lInformatique.
q Elle
intervient dans
Le software (logiciel)
Le
L hardware
h d : un processeur estt un cblage
bl d l ith
dalgorithmes
frquemment utiliss (multiplication )

JC Rgin - ASD - L2I - 2010


Algorithmique
1.11

Laspect scientifique de linformatique


L'informatiqueq n'est pas
p plusp la science des
ordinateurs que l'astronomie n'est celle des
tlscopes
p
E. Dijkstra, Turing award 1972

JC Rgin - ASD - L2I - 2010


Algorithme
1.12

Un algorithme
U l ith prend d en entre
t des
d d donnes
ett ffournitit un rsultat
lt t
permettant de donner la rponse un problme

Un algorithme = une srie doprations effectuer :


Oprations excutes en squence algorithme squentiel.
Oprations excutes en parallle algorithme parallle.
Oprations excutes sur un rseau de processeurs algorithme
rparti
p ou distribu.

Mise en uvre de lalgorithme


= implmentation (plus gnral que le codage)
= criture de ces oprations dans un langage de programmation.
Donne un pprogramme.
g
JC Rgin - ASD - L2I - 2010
Algorithme versus programme
1.13

Un programme implmente un algorithme

Thse de Turing-Church : les problmes ayant une solution


algorithmique sont ceux rsolvables par une machine de
Turing (thorie de la calculabilit)

On ne peut pas rsoudre tous les problmes avec des


algorithmes (indcidabilit)
Problme de la halte
Savoir de faon indpendante si un algorithme est juste

JC Rgin - ASD - L2I - 2010


Algorithmes
1.14

Tous les algorithmes ne sont pas quivalents. On les


diffrencie selon 2 critres
Tempsde calcul : lents vs rapides
Mmoire utilise : p
peu vs beaucoupp
On parle de complexit en temps (vitesse) ou en espace
(mmoire utilise)

JC Rgin - ASD - L2I - 2010


Pourquoi faire des algorithmes rapides ?
1.15

Pourquoi faire des algo efficaces ? Les ordinateurs vont


super vite !
Je peux faire un algorithme en n2 avec n=10000
Je voudrais faire avec n=100000
n=100000. Tous les 2 ans la
puissance des ordinateurs est multiplie par 2
(optimiste) Quand est
(optimiste). est-ce
ce que je pourrais faire avec
n=100000 ?

JC Rgin - ASD - L2I - 2010


Pourquoi faire des algorithmes rapides ?
1.16

Pourquoii faire
P f i d des algorithmes
l ith efficaces
ffi ? LLes ordinateurs
di t vontt super vite
it !
Je peux faire un algorithme en n2 avec n=10000
Je voudrais faire avec n=100000. Tous les 2 ans,, la p puissance des
ordinateurs est multiplie par 2 (optimiste). Quand est-ce que je pourrais
faire avec n=100000 ?

Rponse:
p=100000 q=10000; p=10*q; donc p2 =100*q2. Donc besoin de 100 fois
plus de puissance
26 =64, 27 =128 donc obtenue dans 7*2 ans=14 ans !!!
Je trouve un algo en n log(n) pour p, je ferai 17*100000= 1 700 000
oprations donc 100/1.7
00/ fois
f moins de temps !!!

JC Rgin - ASD - L2I - 2010


Complexit des algorithmes
1.17

B t
But:
avoir une ide de la difficult des problmes
donner une ide du temps de calcul ou de lespace
l espace ncessaire pour
rsoudre un problme
Cela va permettre de comparer les algorithmes
E i en ffonction
Exprime i d du nombre
b d de donnes
d et de d leur
l taille.
ill
A dfaut de pouvoir faire mieux :
On considre que les oprations sont toutes quivalentes
Seul lordre de grandeur nous intresse.
On considre uniquement le pire des cas
Pour n donnes on aura : O(n) linaire, O(n2) quadratique
O(n log(n)),

JC Rgin - ASD - L2I - 2010


Pourquoi faire des algorithmes rapides ?
1.18

Dans la vie relle, a naugmente pas toujours !

OUI et NON:
Certains problmes sont rsolus
Pour dautres, on simplifie moins et donc la taille des
donnes traiter augmente ! Ralit virtuelle : de mieux en
mieux dfinie
D que llon rsout
Ds t quelque
l chose
h : on complexifie!
l ifi !

JC Rgin - ASD - L2I - 2010


Algorithmes : vitesse
1.19

On peut qualifier de rapide un algorithme qui met un


temps polynomial en n (nombre de donnes) pour tre
excut. Exemple n2, n8
Pour certains pproblmes : voyageur
y g de commerce,,
remplissage de sac--dos de faon optimum. On ne sait
pas sil
s il existe un algorithme rapide. On connat des
algorithmes exponentiels en temps : 2n.
1 million de $,
$ si vous rsolvez la question!

JC Rgin - ASD - L2I - 2010


Algorithme : preuve
1.20

On peut prouver les algorithmes !


O
Un algorithme est dit totalement correct si pour tout jeu
de donnes il termine et rend le rsultat attendu
Cest assez difficile, mais cest important
Codage/Dcodage des donnes. Si bug alors tout est perdu
Centrale nuclaire
Airbus

Attention : un algorithme juste peut tre mal implment

JC Rgin - ASD - L2I - 2010


Algorithme : rsum
1.21

Cest ancien
Cest fondamental en informatique
q
Ca se prouve
O estime
On ti lel ttemps d
de rponse
ett la
l mmoire
i prise
i

JC Rgin - ASD - L2I - 2010


Plan
1.22

Algorithmes
Al ith
Complexit
P
Preuve
Structures de donnes
Pseudo Langage
Tableaux
Tri par insertion
Calcul de xn
Logarithme
Recherche dichotomique

JC Rgin - ASD - L2I - 2010


2 types de personnes
1.23

En informatique il y a deux types de personnes


Ceux qui crivent les algorithmes
Ceux qui les implmente

En cuisine
Les chefs font les recettes
Ils
Il ne font
f t pas lla cuisine.
i i EEventuellement
t ll tddes prototypes
t t ett ilils
surveillent. Ou font des choses trs prcises.
En
E iinformatique
f ti cest
t pareilil
Problme: il faut se comprendre!
JC Rgin - ASD - L2I - 2010
Se comprendre
1.24

Pour se comprendre on va amliorer le langage


On dfinit des choses communes bien prcises (pareil en
cuisine)
On essaie de regrouper certaines mthodes ou techniques

En Informatique
Langages: variables,
variables boucle,
boucle incrmentation etc.
etc . .
Regroupement : structures de donnes et types abstraits

JC Rgin - ASD - L2I - 2010


Variable
1.25

Une variable sert mmoriser de linformation


Ce qui est mis dans une variable est en fait mis
dans une partie de la mmoire

JC Rgin - ASD - L2I - 2010


Type de donnes
1.26

Un type de
U d donnes,
d ou simplement
l type, df
dfinit lle genre d
de
contenu d'une donne et les oprations pouvant tre effectues
sur la variable correspondante.
Par exemple:
int reprsente
p un entier,, on peut
p faire des additions,, des multiplications.
p
La division est entire et on peut faire des dcalages de bits
Date reprsente une date, laddition aura un certain sens, on pourra
crire la date sous certaines formes (jj/mm/aaaa ou 10 Septembre
2009 )
Les types
yp les plus
p communs sont :
int, float, double, char, boolean et le type pointeur
Entier, rel, chane, caractre, boolen, pointeur

JC Rgin - ASD - L2I - 2010


Structures de donnes
1.27

Une structure de
d donnes
d est une manire particulire
de stocker et dorganiser des donnes dans un
ordinateur
di t de
d faon
f pouvoiri tre
t utilises
tili
efficacement.

Diffrents types de structures de donnes existent pour


rpondre
d desd problmes
bl trs prcis :
B-arbres dans les bases de donnes
Table de hash par les compilateurs pour retrouver les
identificateurs.

JC Rgin - ASD - L2I - 2010


Structures de donnes
1.28

Ingrdient essentiel pour lefficacit des algorithmes.


Permettent dorganiser
g la gestion
g des donnes
Une structure de donnes ne regroupe pas
ncessairement des objets du mme type.type

JC Rgin - ASD - L2I - 2010


Type abstrait de donnes
1.29

Un type
U t abstrait
b t it ou une structure
t t d
de donnes
d abstraite
b t it estt une
spcification mathmatique d'un ensemble de donnes et de
l'ensemble des oprations qu'elles peuvent effectuer. On qualifie
d'abstrait
' ce type de donnes car il correspond un cahier des
charges quune structure de donnes doit ensuite implmenter.
Par exemple : le type abstrait de pile sera dfini par 2
oprations :
Push qui insre un lment dans la structure
Pop qui extrait les lments de la structure, avec la contrainte que pop
retourne llment qui a t empil le plus rcemment et qui na pas
encore t dpil
Les types abstraits sont des entits purement thoriques utiliss
principalement pour simplifier la description des algorithmes

JC Rgin - ASD - L2I - 2010


Structures de donnes et type abstrait
1.30

Quand la nature des donnes na pas dinfluence sur les


oprations effectuer, on parle alors de type abstrait
gnrique et on fait la confusion avec les structures de
donnes.

Dans ce cours,
cours on considrera que les structures de
donnes sont indpendantes du type des donnes et
quelles
qu elles sont dfinies par lensemble
l ensemble des oprations
quelles effectuent sur ces donnes

JC Rgin - ASD - L2I - 2010


Structures de donnes
1.31

Permettent de grer et dorganiser des donnes


Sont dfinies p
partir dun ensemble doprations
p
quelles peuvent effectuer sur les donnes

JC Rgin - ASD - L2I - 2010


Structures de donnes et langage objets
1.32

LLes structures
t t de
d donnes
d permettent
tt t dorganiser
d i lel code
d
Une Sdd correspond une classe contenant un ensemble dobjets
2 parties:
Une visible correspondant aux oprations que la structure de donnes
peut effectue. Dans les langages objets cest la partie publique de
l classe
la l
Une cache qui contient les mthodes internes permettant de raliser
les oprations de la Sdd. Dans les langages objets cest la partie
prive
i de
d lla classe
l

La partie visible de la Sdd est parfois appele API de la Sdd :


Application Programming Interface, autrement dit linterface de
programmation de la Sdd qui permet son utilisation.

JC Rgin - ASD - L2I - 2010


Plan
1.33

Algorithmes
Al ith
Complexit
P
Preuve
Structures de donnes
Pseudo Langage
Tableaux
Tri par insertion
Calcul de xn
Logarithme
Recherche dichotomique

JC Rgin - ASD - L2I - 2010


Notion de pseudo langage
1.34

On a besoin
O b i dun
d langage
l formel
f l minimum
i i pour dcrire
d i un
algorithme

Un langage de programmation (Java, C, Pascal, etc.) est


trop
p contraignant
g

Dans la littrature, les algorithmes


g sont dcrits dans un
pseudo langage qui ressemble un langage de
programmation (le pseudo langage utilis dpend donc de
llauteur
auteur et peut tre spcifi par celui-ci en dbut
douvrage)

JC Rgin - ASD - L2I - 2010


Pseudo langage
1.35

Tous les pseudo langages recouvrent les mmes concepts


Variables, affectation

Structures de contrle : squence, conditionnelle, itration

Dcoupage de lalgorithme en sous-programmes (fonctions,


procdures).
d )

Structures
S de
d donnes
d simples
l ou labores
l b (tableaux,
( bl listes,
l
dictionnaires, etc.)

JC Rgin - ASD - L2I - 2010


Pseudo langage : variables, affectation
1.36

Les variables sont indiques avec leur type : boolen b,


entier n, rel x, caractre c, chane s, etc.
On est souple du moment quil ny a pas dambigut

Le signe de laffectation nest pas = , ni :=


(
(comme en Pascal)
P i quii ill
l) mais illustre
t bien
bi lal ralit
lit
de laffectation ( mettre dedans )

JC Rgin - ASD - L2I - 2010


Pseudo langage : structures de donnes
1.37

LLes tableaux
t bl sontt utiliss.
tili Si A estt un tableau,
t bl A[i] estt lle ime
lment du tableau

Les structures sont utilises. Si P est une structure modlisant un


point et x un champ de cette structure reprsentant labscisse du
point, P.x est labscisse de P
Remarque : une structure est une classe sans les mthodes

JC Rgin - ASD - L2I - 2010


Pseudo langage :
1.38
le squencement des instructions

Les instructions simples sont squencs par ; (si


besoin)

Les blocs dinstructions sont entours par


{ }
dbut fin

JC Rgin - ASD - L2I - 2010


P d langage
Pseudo l : la
l conditionnelle
diti ll
1.39

La conditionnelle est donne par :

si (condition) {
instruction1;
} sinon {
i
instruction2;
i 2
}

JC Rgin - ASD - L2I - 2010


Pseudo langage : les itrations
1.40

Nous utilisons plusieurs types de boucles :


tant que (condition) { }
faire { } tant que (condition)

rpter
p {{}} jusqu
j q (condition)
( )
pour i de min max { }

JC Rgin - ASD - L2I - 2010


Pseudo langage : les fonctions
1.41

Une fonction est un petit programme qui renvoie une


valeur

Elles permettent un dcoupage de llalgorithme


algorithme qui rend
sa comprhension et son dveloppement plus facile

JC Rgin - ASD - L2I - 2010


Pseudo langage : les fonctions
1.42

U fonction
Une f ti a une liste
li t dde paramtres
t typs
t ett un type
t de
d retour
t (son
( prototype)
t t )

Devant chaque paramtre, la manire dont le paramtre est pass est mentionn.
Passage de paramtre : un paramtre est soit
En Entre : la donne est fournie du code appelant au code appel, autrement dit on
passe la valeur la fonction. On prcde le paramtre par e ou i (entre ou input)
En Sortie : la donne est fournie par le code appel au code appelant, autrement dit
la fonction passe cette valeur au code appelant. On prcde le paramtre par s ou o
(sortie ou output)
En Entre/Sortie : la donne est fournie
fo rnie par le code appel la fonction (on passe la
valeur la fonction) qui ensuite fournit son tour la valeur au code appelant (la
fonction passe nouveau la valeur). On prcde le paramtre par es ou io
(entre/sortie ou input/output)

JC Rgin - ASD - L2I - 2010


Pseudo-langage
Pseudo langage : les fonctions
1.43

maFonction(e
F ti ( int i t i,i s int
i t j,j es int
i t k);
k)
En Entre : la fonction lit la valeur du paramtre, ici i. Les modifications
quelle fera avec i ne seront pas transmises au programme appelant
En Sortie : la fonction ne lit pas la valeur du paramtre, ici j. Elle crit
dans j et le programme appelant rcupre cette valeur, donc j peut
tre modifi ppar la fonction
En Entre/Sortie : la fonction lit la valeur du paramtre, ici k. et elle
passe au programme appelant les modifications faites pour k

En labsence de prcision, on considrera que le paramtre est


pass en entre.
Le passage en entre/sortie est souvent appel passage par
rfrence ou par variable

JC Rgin - ASD - L2I - 2010


Pseudo-langage
Pseudo langage : les fonctions
1.44

C d appelant
Code l t:
i3
j5
k8
( j )
maFonction(i,j,k);
Afficher(i,j,k)
maFonction(e int i, s int j, es int k) {
ii+1
j6
kk+2
}
Rsultat de Afficher(i,j,k) : 3 6 10
JC Rgin - ASD - L2I - 2010
Pseudo-langage
Pseudo langage : les fonctions
1.45

Le passage de paramtre en e/s est aussi souvent


appel passage par rfrence.
Certains langages vont donner ou non la possibilit de
dfinir le mode de p
passage
g que
q lon souhaite
Java :
types de base (int, float, double, ) sont passs uniquement en
entre (i.e. par valeur)
Les objets, ou plus prcisment les rfrences, sont passs
uniquement en e/s (i.e. par rfrence)

JC Rgin - ASD - L2I - 2010


Plan
1.46

Algorithmes
Al ith
Complexit
P
Preuve
Structures de donnes
Pseudo Langage
Tableaux
Tri par insertion
Calcul de xn
Logarithme
Recherche dichotomique

JC Rgin - ASD - L2I - 2010


Tableaux
1.47

un tableau
bl (
(array en anglais)
l ) est une Sdd de
d base
b qui est un
ensemble dlments, auquel on accde travers un numro
d indice.
dindice
Le temps d'accs un lment par son indice est constant,
quel que soit l'lment
l lment dsir
Les lments d'un tableau sont contigus dans l'espace
mmoire. Avec ll'indice,
indice, on sait donc combien de cases
mmoire se trouve l'lment en partant du dbut du tableau.
On dsigne habituellement les tableaux par des lettres
majuscules. SI T est un tableau alors T[i] reprsente llment
lindice i.
JC Rgin - ASD - L2I - 2010
Tableaux
1.48

Avantages : accs direct au ime lment


Inconvnients : les oprations
p dinsertion et de
suppression sont impossibles
sauf si on cre un nouveau tableau, de taille plus grande ou
plus petite (selon l'opration). Il est alors ncessaire de
copier
p tous les lments du tableau original g dans le nouveau
tableau. Cela fait donc beaucoup d'oprations.

JC Rgin - ASD - L2I - 2010


Tableaux
1.49

Un tableau peut avoir une dimension, on parle alors de


vecteur
Un tableau peut avoir plusieurs dimensions, on dit quil
est multidimensionnel. On le note T[i][k]
[ ][ ]
La taille dun tableau doit tre dfinie avant son
utilisation et ne peut plus tre change.
change
Les seules oprations possibles sont set et get (on affecte
un lment
l un indice
i di et on lit
li un lment
l un indice).
i di )

JC Rgin - ASD - L2I - 2010


Tableaux multidimensionnel
1.50

On peut linariser un tableau plusieurs dimensions


i\ j 0 1 2 3 4

0 0 1 2 3 4 T[i][j]=L[i *5 +j]

5 6 7 8 9 T[1][3]=L[1*5+3]=L[8]
1

2 10 11 12 13 14
T[i][j]=[i * #col + j]
15 16 17 18 19
3

JC Rgin - ASD - L2I - 2010


Tableaux de tableaux
1.51

On peut dfinir un tableau de tableaux (ou de


nimporte quoi en fait)
T[0] 0 1 2 3 4 5 6

T[1] 0 1 2 3

T[2] 0 1 2 3 4 5

T[3] 0 1 2

JC Rgin - ASD - L2I - 2010


Tableaux : lment ou indice ?
1.52

Il ne faut pas confondre un lment du tableau et


lindice de cet lment

JC Rgin - ASD - L2I - 2010


Plan
1.53

Algorithmes
Al ith
Complexit
P
Preuve
Structures de donnes
Pseudo Langage
Tableaux
Tri par insertion
Calcul de xn
Logarithme
Recherche dichotomique

JC Rgin - ASD - L2I - 2010


Tri par insertion
1.54

DFAGBHEC
On fait 2 paquets : 1 non tri - 1 tri
U paquett dun
Un d lment
l t estt tri
t i
On prend un lment non tri et on le range sa place dans
le paquet tri
On prend D : D - F A G B H E C
On prend F : D F - A G B H E C
On prend A : A D F - G B H E C
On prend G : A D F G - B H E C
On prend B : A B D F G - H E C

JC Rgin - ASD - L2I - 2010


Tri par insertion
1.55

Comment ranger dans le paquet tri ?


C
On doit ranger B dans A D F G B H E C
On a A D F G B
On pparcourt de droite gauche
g ADFG
Tant que la valeur est > B, on lchange avec B
A DFBG
A D BF G
A BD F G
Fin

JC Rgin - ASD - L2I - 2010


Tri par insertion
1.56

O pourrait dire
On d :
On fait 2 tas : un tri, puis un non tri.
Au dbut le tas tri est vide,
vide celui non tri contient tous les lments
On prend un lment non tri et on le range sa place dans le tas tri
Cet algorithme est exact,
exact mais
sa formulation est ambigu, par exemple prendre veut dire le
supprimer du tas non tri aussi.
Il nest pas assez prcis : comment range-t-on un lment, quest-ce que
sa place ?
Pour avoir la prcision et supprimer llambigut
ambigut on utilise un
pseudo langage

JC Rgin - ASD - L2I - 2010


Tri par insertion : algorithme
1.57

triInsertion(entier[] t) {
pour (i de 2 n) { // n taille de t
entier c t[i];
[ ];
entier k i-1;
// c doit tre insr dans le tableau ordonn t[1..i-1]
// on cherche
h h dde ddroite
it gauche h l la premire
i valeur
l t[k]
// plus petite que c
tant que (k1 et t[k]>c) {
t[k+1] t[k]; // on dcale
k k-1;
}
// on a trouv la bonne place
t[k+1] c;
}
} JC Rgin - ASD - L2I - 2010
Tri par insertion
58

Francis Avnaim
A a fait
f lltude
d suivante d
de la
l complexit
l
exprimentale de cet algorithme, implment en
Processing

On trie des
O d tableaux
bl de
d taille
ll croissante de
d 500
00 10000
0000
par pas de 10

Alatoires
Tris en ordre
d inverse
Dj tris

JC Rgin - ASD - L2I - 2010


T i par iinsertion
Tri ti
Tableaux alatoires

JC Rgin - ASD - L2I - 2010 59


T i par iinsertion
Tri ti

Tableaux ordonns

JC Rgin - ASD - L2I - 2010 60


T i par iinsertion
Tri ti
Tableaux en ordre inverse

JC Rgin - ASD - L2I - 2010 61


Tri par insertion
62

Conclusions de lexprimentation
Tableaux alatoires et en ordre inverse : fonction carr ?
Tableaux ordonns : fonction linaire ?

JC Rgin - ASD - L2I - 2010


Tri par insertion : complexit
1.63

Parties bleues
P bl : 7 op. el.l n-1
1 fois
f
soit 7(n-1)
Partie jaune : 6 op
op. el
el.
Combien de fois ?
Partie mauve : 3 op. el.
Combien de fois ?
Nombre de fois ou les parties
p
mauves et jaunes sont appeles ?
Complexit mauve + jaune:
Complexit totale infrieure ?

JC Rgin - ASD - L2I - 2010


Tri par insertion : complexit
1.64

Parties bleues
P bl : 7 op. el.l n-1
1 fois
f
soit 7(n-1)
Partie jaune : 6 op
op. el
el.
Combien de fois ? au pire i fois
(k de i-1 1), donc 6i chaque
fois
Partie mauve : 3 op. el.
C b de
Combien d fois
f ? au pire i i ffois,
i
donc 3i chaque fois
Nombre de fois ou les parties
mauves et jaunes sont appeles ?
Complexit mauve + jaune:
JC Rgin - ASD - L2I - 2010
Tri par insertion : complexit
1.65

Parties
P ti bleues
bl : 7 op. el.l n-1
1 fois
f i soitit
7(n-1)
Partie jaune : 6 op. el.
C b de
Combien d fois
f ? au pire i fois,
f donc
d
6i chaque fois
Partie mauve : 3 op. el.
Combien de fois ? au pire i fois, donc
3i chaque fois
Nombre de fois ou les p parties mauves
et jaunes sont appeles ? (n-1) fois
Complexit mauve + jaune:
9 + 9x2 ++ 9x(n-1)=9n(n-1)/2
9x(n 1) 9n(n 1)/2
Complexit totale infrieure ?

JC Rgin - ASD - L2I - 2010


Tri par insertion : complexit
1.66

PParties
ti blbleus : 7 op. el.l n-1
1 ffois
i soitit 7(n-1)
7( 1)
Partie jaune : 6 op. el.
Combien de fois ? au pire i fois, donc 6i
chaque fois
Partie mauve : 3 op. el.
Combien de fois ? au pire i fois, donc 3i
chaque fois
Nombre de fois ou les parties mauves et
jaunes sont appeles ? (n-1) fois
Complexit mauve + jaune:
jaune
9 + 9x2 ++ 9x(n-1)=9n(n-1)/2
Complexit totale infrieure
9n(n-1)/2 + 7(n-1)
De lordre de n2

JC Rgin - ASD - L2I - 2010


Tri par insertion
67

Si ttableau
bl ordonn,
d la l boucle
b l tant
t t
que (zone jaune) nest jamais
excute. La complexit est alors
exactement 10(n-1)
10(n 1)

Si tableau en ordre inverse (cas le


pire), la complexit est exactement
7(n-1) + 9((n-1)n / 2)

Si tableau alatoire, la complexit


est entre les deux complexits
prcdentes.
Rsultat exprimental montre une
fonction carr

Pire des cas quadratique JC Rgin - ASD - L2I - 2010


Plan
1.68

Algorithmes
Al ith
Complexit
P
Preuve
Structures de donnes
Pseudo Langage
Tableaux
Tri par insertion
Calcul de xn
Logarithme
Recherche dichotomique

JC Rgin - ASD - L2I - 2010


Calcul de xn
1.69

Commentt calculez-vous
C l l xn partir
ti dde x ?
Par itrations:
y 1
de 1 n : y y * x
pour i d
Complexit ?
x8 ?
Combien doprations ?
x16 ?
x12 ?
Gnralisation:
si n est pair
si n est impair

JC Rgin - ASD - L2I - 2010


Calcul de xn
1.70

Commentt calculez-vous
C l l xn partir
ti dde x ?
Par itrations:
y 1
de 1 n : y y * x
pour i d
Complexit ? Linaire O(n)
x8 ?
Combien doprations ?
x16 ?
x12 ?
Gnralisation:
si n est pair
si n est impair

JC Rgin - ASD - L2I - 2010


Calcul de xn
1.71

Commentt calculez-vous
C l l xn partir
ti dde x ?
Par itrations:
y 1
de 1 n : y y * x
pour i d
Complexit ? Linaire O(n)
x8 ? x4 * x4 et x4 = x2*x2 et x2=x*x
Combien doprations ? 3
x16 ? x8 * x8, donc 4 oprations
x12 ?
Gnralisation:
si n est pair
si n est impair

JC Rgin - ASD - L2I - 2010


Calcul de xn
1.72

Commentt calculez-vous
C l l xn partir
ti dde x ?
Par itrations:
y 1
de 1 n : y y * x
pour i d
Complexit ? Linaire O(n)
x8 ? x4 * x4 et x4 = x2*x2 et x2=x*x
Combien doprations ? 3
x16 ? x8 * x8, donc 4 oprations
x12 ? x6 * x6 et x6 = x3 * x3 et x3 =x*x*x, donc 4 oprations
Gnralisation:
si n est pair xn =
si n est impair xn =

JC Rgin - ASD - L2I - 2010


Calcul de xn
1.73

Commentt calculez-vous
C l l xn partir
ti de
d x?
Par itrations:
y 1
pour i de 1 n : y y * x
pou
Complexit ? Linaire O(n)
x8 ? x4 * x4 et x4 = x2*x2 et x2=x*x
Combien doprations ? 3
x16 ? x8 * x8, donc 4 oprations
x12 ? x6 * x6 et x6 = x3 * x3 et x3 =x*x*x
x x x, donc 4 oprations
Gnralisation:
si n est pair xn = xn/2 * xn/2
si n est impair xn = x(n/2)
/ * x(n/2)
/ * x

/ est la division entire (5/2= 2)

JC Rgin - ASD - L2I - 2010


Rappel sur les Logarithmes
1.74

LLa fonction
f ti llogarithme
ith estt simplement
i l t l'i
l'inverse d
de lla ffonction
ti
exponentielle. Il y quivalence entre bx=y et x=logb(y).

En informatique le logarithme est souvent utilis parce que


les ordinateurs utilisent la base 2.
On utilisera donc souvent les logarithmes de base 2.

Le logarithme de n reflte combien de fois on doit doubler le


nombre 1 pour obtenir le nombre n.
De faon quivalent elle reflte aussi le nombre de fois o
l'on doit diviser n pour obtenir 1.

JC Rgin - ASD - L2I - 2010


Calcul de xn : complexit
1.75

Gnralisation:
si n est pair xn = xn/2 * xn/2
si n est impair xn = x(n/2) * x(n/2) * x

chaque fois on divise par 2


Pour chaque impair on ajoute 1
Complexit : log(n) + nombre de bit 1 dans n - 1

JC Rgin - ASD - L2I - 2010


Plan
1.76

Algorithmes
Al ith
Complexit
P
Preuve
Structures de donnes
Pseudo Langage
Tableaux
Tri par insertion
Calcul de xn
Logarithme
Recherche dichotomique

JC Rgin - ASD - L2I - 2010


Recherche dans un tableau
77

C id
Considrons un ttableau
bl ad
de nombres
b entiers,
ti de
d taille
t ill n

O d
On dsire
i savoir
i sii un nombre
b d donn
x estt d
dans lle tableau
t bl

Pour le savoir,
savoir on parcourt le tableau en comparant les
lments de a x (recherche squentielle)

Au plus (quand x nest pas dans a), on fera n comparaisons

Lalgorithme est donc de complexit O(n)

JC Rgin - ASD - L2I - 2010


Recherche dichotomique
1.78

Peut-on faire
f mieux ?
Oui, si le tableau est pralablement tri. Cest la recherche
di h
dichotomique
i

Ide : on compare x la valeur centrale m de a.


Si x = m, on a trouv x dans a.
Sinon si x < m,
Sinon, m on cherche x dans la moiti infrieure du
tableau, sinon on cherche x dans la moiti suprieure

JC Rgin - ASD - L2I - 2010


Recherche dans un tableau
79

JC Rgin - ASD - L2I - 2010


Analyse de la recherche dichotomique
80

Appelons
A l C(n)
C( ) le
l nombre
b ddoprations
i l
lmentaires
i excutes

pour effectuer la recherche dichotomique dans un tableau de
taille n

On a,, avec k1 et k2 deux constantes majorant


j respectivement
p le
nombre doprations des parties en bleu et en mauve :
C(n) (k1 + k2) + C(n/2)
2. C( /22)
2 (k1 + k2) + C(n/2
3. (k1 + k2) + C(n/23)

r. (k1 + k2) + C(1)
r. (k1 + k2) + k1 2r . (k1+k2)

JC Rgin - ASD - L2I - 2010


Analyse de la recherche dichotomique
81

Il nous reste estimer r

r est tel que 2r n < 2r+1

On a donc r log2(n)

Et finalement C(n) est en O(log2n)

JC Rgin - ASD - L2I - 2010


Recherche dichotomique :
1.82
version itrative
entier
i rechercheDichotomique
h h i h i (
(entier
i a[1..n],
[1 ] entier
i x)
)
fini faux; min 1; max n;
tant que (min max){
p (min
( i + max)/2;
)/2
si (t[p] x){
min p+1
}
si (t[p] x){
max p-1
}
}
si (t[p]=x){
renvoyer
y p
} sinon {
renvoyer -1
}

JC Rgin - ASD - L2I - 2010

Vous aimerez peut-être aussi