Académique Documents
Professionnel Documents
Culture Documents
Lakhdar Sas
CRIL, Universit d Artois Bureau: C301 sais@cril.univ-artois. r !tt":##$$$.cril.univ-artois. r#%sais
Plan du cours
Rappels Tables de hachage Drcursivation Arbres binaires Arbres quilibrs B-Arbres graphes Bibliographie :
!ntroduction to Algorith"s par Tho"as # $or"en% $harles & Leiserson% and Ronald L Rivest T'pes de donnes et algorith"es par $hristine (roidevau)% *arie-$laude +audel% *ich,le Soria -tiliser l .internet/
Rappels 0 algorith"ique !
Quest-ce que lalgorithmique ?
Dfinition 1 (Algorithme). Un algorithme est suite finie doprations lmentaires constituant un schma de calcul ou de rsolution dun problme. rou!er une mthode de rsolution (exacte ou approche) du problme.
2. Trouver une mthode efficace. =>Savoir rsoudre un problme est une chose, le rsoudre efficacement en est une autre, ou encore montrer qu il est correcte !!
Rappels 0 algorith"ique !
"#emple 1$
probl%me $ calculer xn
donnes $ # $ rel & n$ entier Mthode : x0 = ! xi " #$ xi-1 i %& !
Mthode ' ( x0 =
xi " xi/2 $ xi/2 , si i est pair; xi " #$xi/2 $ xi/2 si i est impair ... rsultats :
= xn
Anal'se de la co"ple)it 0
&otation de !andau:
'n ne s (intresse pas en )nral * la complexit exacte, mais * son ordre de )randeur. => besoin de notations as mptoti"ues.
Anal'se de la co"ple)it 0
+)e"ples 0
2 0 n345n6% 5prendre n2 31% c316 7n 3 458n6 5prendre n2 31 c 3 7986 n7: n-1 3 45n76 5prendre n2 3 1% c 316 0 197 n7 -8n 3 5n76 trouver n2 c1% c7 t q c1 n7 197 n7 -8n c7 n7 c1 197 -89n c7 la partie droite de l .inquation peut ;tre satis<aite pour n2 3 1 et c7 3 197 la partie gauche de l .inquation peut ;tre satis<aite pour n2 3 = et c1 3 191> 3? en choisissant n2 3= % c1 3191>% c7 3 197 3? 197 n7 -8n 3 5n76
Anal'se de la co"ple)it 0
'omple#it
Dfinition ( ('omple#it). ,a comple#it dun algorithme est la mesure du nombre doprations fondamentales quil effectue sur un -eu de donnes. ,a comple#it est e#prime comme une fonction de la taille du -eu de donnes.
Anal'se de la co"ple)it 0
'omple#it au pire : +max(n) = max d/n 0(d). ,(est le
plus )rand nombre d(oprations "u(aura * excuter l(al)orithme sur un -eu de donnes de taille .ixe, ici * n.
A!antage : il s(a)it d(un maximum, et l(al)orithme .inira donc tou-ours avant d(avoir e..ectu +max(n) oprations.
)ncon!nient : cette complexit peut ne pas re.lter le comportement / usuel 0 de l(al)orithme, le pire cas pouvant ne se produire "ue trs rarement, mais il n(est pas rare "ue le cas mo en soit aussi mauvais "ue le pire cas.
Anal'se de la co"ple)it 0
'omple#it en mo*enne : +mo (n) = d/n 0(d) / |/n| ,(est la mo enne des complexits de l(al)orithme sur des -eux de donnes de taille n (en toute ri)ueur, il .aut bien videmment tenir compte de la probabilit d(apparition de chacun des -eux de donnes).
A!antage : re.lte le comportement / )nral 0 de l(al)orithme si les cas extr1mes sont rares ou si la complexit varie peu en .onction des donnes. )ncon!nient : la complexit en prati"ue sur un -eu de donnes particulier peut 1tre nettement plus importante "ue la complexit en mo enne, dans ce cas la complexit en mo enne ne donnera pas une bonne indication du comportement de l(al)orithme. +n pratique, nous ne nous intresserons "u(* la complexit au pire et * la complexit en mo enne.
Anal'se de la co"ple)it 0
+od%le de machine
$our "ue le rsultat de l(anal se d(un al)orithme soit pertinent, il .aut avoir un modle de la machine sur la"uelle l(al)orithme sera implment (sous .orme de pro)ramme). 'n prendra comme r.rence un modle de machine , acc%s alatoire (-A+) et * processeur uni"ue, o2 les instructions sont excutes l(une aprs l(autre, sans oprations simultanes.
Anal'se de la co"ple)it 0
pre"ier algorith"e de tri )llustration $ cas du tri par insertion
.roblmatique du tri
donnes $ une squence de n nombre a1, a&, . . . , an rsultats : une permutation 3a , a ', . . . , a n% des donnes t.q. a a ' , . . . , a n
exemple :
'omple#it au pire : le cas le plus d.avorable pour l(al)orithme T7585&9+7T5'& est "uand le tableau est d-* tri dans l (ordre inverse. :ans ce cas t- =- pour tout -.
7appel :
donc
et
+(n) peut ici 1tre crit sous la .orme +(n)=a#' 2b# 2c, a, b et c tant des constantes, et +(n) est donc une .onction "uadrati"ue.
'omple#it en mo*enne : supposons "ue l(on appli"ue l(al)orithme de tri par insertion * n nombres choisis au hasard. <uelle sera la valeur de t - # ,(est8*8dire, o2 devra8 t8on insrer => -? dans le sous8tableau =>;.. -8;?# +n mo enne t- " -3'. Si l on reporte cette valeur dans l quation on obtient galement une fonction quadratique.
meilleur cas : (n). pire cas : (n2). en mo*enne : (n2).
+n )nral, on considre "u(un al)orithme est plus e..icace "u(un autre si sa complexit dans le pire cas a un ordre de )randeur in.rieur.
Dfinition / (Dfinition rcursi!e& algorithme rcursif). Une dfinition rcursive est une dfinition dans laquelle intervient ce que lon veut dfinir. Un algorithme est dit rcursif lorsquil est dfini en fonction de lui6m7me. 7evenons * la .onction puissance # #n. ,ette .onction peut 1tre d.inie rcursivement :
-cursi!it simple
-cursi!it multiple Dne d.inition rcursive peut contenir plus d(un appel rcursi.. &ous voulons calculer ici les combinaisons 0np en se servant de la relation de $ascal :
-cursi!it mutuelle :es d.initions sont dites mutuellement rcursives si elles dpendent les unes des autres. Ea peut 1tre le cas pour la d.inition de la parit :
.rincipe et intr0t $ ce sont les m1mes "ue ceux de la dmonstration par rcurrence en mathmati"ues. 'n doit avoir :
@ un certain nombre de cas dont la rsolution est connue, ces / cas simples 0 .ormeront les cas d(arr1t de la rcursion ; @ un mo en de se ramener d(un cas / compli"u 0 * un cas / plus simple 0.
"ntre$ Dn pro)ramme $ et un -eu de donnes :. 2ortie$ vrai si le pro)ramme 8 termine sur le -eu de donnes /, et fau# sinon. 9upposons "u(il existe un tel pro)ramme, nomm termine, de vri.ication de la terminaison. G partir de ce pro)ramme on conHoit le pro)ramme < suivant :
ren!o*er rsultat
9upposons "ue le pro)ramme < I"ui ne prend pas d(ar)umentsI termine. :onc termine(<) renvoie vrai, la deuxime instruction de < boucle ind.iniment et < ne termine pas. 5l a donc contradiction et le pro)ramme < ne termine pas. :onc, termine(<) renvoie fau#, la deuxime instruction de < ne boucle pas, et le pro)ramme < termine normalement. 5l a une nouvelle .ois contradiction : par cons"uent, il n(existe pas de pro)ramme tel "ue termine.
.rincipe
&ombres d(al)orithmes ont une structure rcursive : pour rsoudre un problme donn, ils s(appellent eux8m1mes rcursivement une ou plusieurs .ois sur des problmes trs similaires, mais de tailles moindres, rsolvent les sous problmes de manire rcursive puis combinent les rsultats pour trouver une solution au problme initial. !e paradi)me / diviser pour r)ner 0 donne lieu * trois tapes * cha"ue niveau de rcursivit :
Di!iser $ le problme en un certain nombre de sous8problmes ; -gner $ sur les sous8problmes en les rsolvant rcursivement ou,
&ous nous intressons ici * la multiplication de matrices carrs de taille n. Algorithme na4f
JD!T5$!5+78J=T75,+9(), 9) 9oit n la taille des matrices carrs ) et 9 9oit 0 une matrice carr de taille n .our i ; , n faire .our - ; , n faire ci- K .our 5 ; , n faire ci- ci- +ai5 * b5ren!o*er 0
,hacune de ces quatre oprations correspond * deu# multiplications de matrices carrs de taille n/2 et une addition de telles matrices. G partir de ces "uations on peut aisment driver un al)orithme / diviser pour r)ner 0 dont la complexit est donne par la rcurrence :
l(addition des matrices carrs de taille n/2 tant en (n2).
!ors"u(un al)orithme contient un appel rcursi. * lui8 m1me, son temps d(excution peut souvent 1tre dcrit par une "uation de rcurrence "ui dcrit le temps d(excution )lobal pour un problme de taille n en .onction du temps d(excution pour des entres de taille moindre.
!a rcurrence d.inissant le temps d(excution d(un al)orithme / diviser pour r)ner 0 se dcompose suivant les trois tapes du paradi)me de base :
;. 9i la taille du problme est su..isamment rduite, n c pour une certaine constante c, la rsolution est directe et consomme un temps constant (1). 2. 9inon, on divise le problme en a sous8problmes chacun de taille 1/b de la taille du problme initial. !e temps d(excution total se dcompose alors en trois parties : (a) D(n) : le temps ncessaire * la division du problme en sous8 problmes. (b) aT(n/b) : le temps de rsolution des a sous8problmes. (c) C(n) : le temps ncessaire pour construire la solution .inale * partir des solutions aux sous8problmes.
, soit comme
$our une dmonstration de ce thorme voir 7ivest8,armen8etal 5l existe d (autres mthodes de rsolution des rcurrences : par substitution, chan)ement de variables etc.
ri par fusion !(al)orithme de tri par .usion est construit suivant le paradi)me / diviser pour r)ner 0 :
;. 5l divise la s"uence de n nombres * trier en deux sous8s"uences de taille n/2. 2. 5l trie rcursivement les deux sous8s"uences. A. 5l .usionne les deux sous8s"uences tries pour produire la s"uence complte trie.
.rincipe
!a rcursion termine "uand la sous8s"uence * trier est de lon)ueur ; car une telle s"uence est tou-ours trie.
'omple#it
$our dterminer la .ormule de rcurrence "ui nous donnera la complexit de l(al)orithme T758MD95'&, nous tudions les trois phases de cet al)orithme / diviser pour r)ner 0 :
Di!iser $ cette tape se rduit au calcul du milieu de l(intervalle >p..r? -gner $ l(al)orithme rsout rcursivement deux sous8problmes de
.usion "ui est de (n) pour la construction d(un tableau solution de taille n.
5ci a=2 et b=2 donc lo)ba =;, et nous nous trouvons dans le deuxime cas du thorme par cons"uent : $our des valeurs de n su..isamment )randes, le tri par .usion avec son temps d(excution en (nlo)n) est nettement plus e..icace "ue le tri par insertion dont le temps d(excution est
Drcursivation
Drcursi!er, c(est trans.ormer un al)orithme rcursi. en un al)orithme "uivalent ne contenant pas d(appels rcursi.s.
-cursi!it terminale
Dfinition Un algorithme est dit rcursif terminal sil ne contient aucun traitement aprs un appel rcursif.
Rcursivit ter"inale
"#emple $ =!O'75TPJ+ .(D)
si 0:U; alors /:U;;.((U)) sinon +:U;
o2 :
@ U est la liste des paramtres ; @ 0:U; est une condition portant sur U ; @ /:U; est le traitement de base de l(al)orithme (dpendant de U) ; @ (U) reprsente la trans.ormation des paramtres ; @ +:U; est le traitement de terminaison (dpendant de U).
Rcursivit ter"inale
=vec ces notations, l(al)orithme $ "uivaut *
l(al)orithme suivant : =!O'75TPJ+ .(U)
tant que 0:U; faire /:U;; U (U) fintantque +:U;
=ppel <((UK)
Drcursivation
-emarques
!es pro)rammes itrati.s sont souvent plus e..icaces, mais les pro)rammes rcursi.s sont plus .aciles * crire. !es compilateurs savent, la plupart du temps, reconnaRtre les appels rcursi.s terminaux, et ceux8ci n(en)endrent pas de surco4t par rapport * la version itrative du m1me pro)ramme. 5l est tou-ours possible de drcursiver un al)orithme rcursi..