SlideShare une entreprise Scribd logo
1  sur  51
Télécharger pour lire hors ligne
Chapitre 2: La récursivité et le paradigme ‘’diviser pour régner’’
2.1. Récursivité
Définition 1: Un algorithme est dit récursif lorsqu’il est défini en fonction
de lui-même.
2.1.1. Récursivité simple
Revenons à la fonction puissance cette fonction peut être définie
Récursivement:
L’algorithme correspondant s’écrit:
Puissance (x, n)
Si n=0 alors renvoyer 1
sinon renvoyer x × Puissance ( x, n-1)
.n
xx 





 
1si
0si1
1
nxx
n
x n
n
2.1.2. Récursivité multiple
Une définition récursive peut contenir plus d’un appel récursifs. Nous volons
calculer ici les combinaisons en se servant de la relation de pascal:
L’algorithme correspondant:
Combinaison (n, p)
Si p=0 ou p=n alors renvoyer 1
sinon renvoyer Combinaison (n-1, p)+ Combinaison (n-1, p-1)
2.1.3. Récursivité mutuelle
Des définitions sont dites mutuellement récursives si elles dépendent les unes
des autres. C’est le cas pour la définition de la parité:
p
nC





 
 sinon.
ou0si1
1
11
p
n
p
n
p
n
CC
npp
C












sinon)1(
0siaux
)(imet
sinon)1(
0si
)(
npair
nf
npair
nimpair
nvrai
npair
Les algorithmes correspondants s’écrivent:
Pair(n) Impair(n)
Si n=o alors renvoyer vrai si n=0 alors renvoyer faux
sinon renvoyer Impair(n-1) sinon renvoyer Pair(n-1)
2.1.4. Récursivité imbriquée
La fonction d’Ackermann est définie comme suit:
D’où l’algorithme:
Ackermann(m, n)
Si m=0
alors n+1
sinon si n=0 alors Ackermann(m-1,1)
sinon Ackermann(m-1, Ackermann(m, n-1))









sinon))1,(,1(
0et0si)1,1(
0si1
),(
nmAmA
nmmA
mn
nmA
2.1.5. Principe et dangers de la récursivité
Principe et intérêt: ce sont les mêmes que ceux de la démonstration par récurrence
en mathématiques; on doit avoir:
- Un certain nombre de cas dont la résolution est connue, ces ‘cas simples’
formeront les cas d’arrêt de la récursion;
- Un moyen de se ramener d’un cas ‘compliqué’ à un cas ‘plus simple’.
La récursivité permet d’écrire des algorithmes concis et élégants.
Difficultés :
- La définition être dénuée de sens:
Algorithme A(n)
renvoyer A(n)
- il faut être sûrs que l’on retombera toujours sur un cas connu, c’est-à-dire sur un
cas d’arrêt ; il nous faut nous assurer que la fonction est complètement définie, i.e.,
qu’elle est définie sur tout son domaine d’applications.
Moyen : existence d’un ordre strict tel que la suite des valeurs successives des
arguments invoqués par la définition soit strictement monotone et finit toujours
par atteindre une valeur pour laquelle la solution est explicitement définie.
2.1.6. Exemple d’algorithme récursif: les tours de Hanoï
Hypothèse : on suppose que l’on sait résoudre le problème pour (n-1) disques.
Principe: pour déplacer n disques de la tige A vers la tige C, on déplace les (n-1)
plus petits disques de la tige A vers la tige B, puis on déplace le plus gros disque
de la tige A vers la tige c, puis on déplace les (n-1) plus petit disques de la tige B
vers la tige C.
Algorithme
Hanoï(n, départ, intermédiaire, destination)
Si n=1 alors déplacer le disque supérieur de la tige départ vers la tige
destination
sinon Hanoï(n-1, départ, destination, intermédiaire)
déplacer le disque supérieur de la tige départ vers la tige
destination
Hanoï(n-1, intermédiaire, départ, destination)
Complexité:
On compte le nombre de déplacements des disques effectués par l’algorithme Hanoï
invoqué sur n disques.
D’où l’on déduit que On a donc ici un algorithme de complexité
exponentielle.






sinon)1(21
1si1
)(
nt
n
nt
.12)(  n
nt
2.2. Diviser pour régner
2.2.1. Principe
Nombres d’algorithmes ont une structure récursive: pour résoudre un problème
donné, ils s’appellent eux-mêmes récursivement une ou plusieurs fois sur des
problèmes très similaires, mais de taille moindres, résolvent les sous-problèmes
de manière récursive puis combinent les résultats pour trouver une solution au
problème initial.
Le paradigme ‘diviser pour régner’ donne lieu à trois étapes à chaque niveau de
récursivité:
Diviser : le problème en un certain nombre de sous-problèmes;
Régner : sur les sous-problèmes en les résolvant récursivement ou, si la taille
d’un sous-problème est assez réduite, le résoudre directement.
Combiner : les solutions des sous-problèmes en une solution complète du problème initial.
2.2.2. Premier exemple: multiplication naïve de matrices
Nous nous intéressons ici à la multiplication de matrices carrées de taille n.
Algorithme naïf
L’algorithme classique est le suivant:
Multiplier-Matrices(A, B)
Soit n la taille des matrices carrées A et B
Soit C une matrice carrée de taille n
Cet algorithme effectue multiplication et autant d’additions.
C
bacc
nk
c
nj
ni
jkkijiji
ji
renvoyer
faireà1Pour
0
faireà1Pour
faireà1Pour
,,,,
,





)( 3
n
Algorithme ‘diviser pour régner’naïf
Dans la suite nous supposerons que n est une puissance exacte de 2. Décomposons
les matrices A, B et C en sous-matrices de taille L’équation C=A.B peut
alors s’écrire:
En développant cette équation, nous obtenons:
Chacune de ces quatre opérations correspond à deux multiplications de matrices
carrée de taille et une addition de telles matrices. A partir de ces équations on
peut aisément dériver un algorithme ‘diviser pour régner’ dont la complexité est
donnée par la récurrence:
L’addition des matrices carrées de taille étant en
.22
nn 


















hf
ge
dc
ba
ut
sr
dhcgudfcetbhagsbfaer  et,,
2
n
),()(8)( 2
2 ntnt n 
2
n )( 2
n
Lorsqu’un algorithme contient un appel récursif à lui-même, son temps d’exécution
peut souvent être décrit par une équation de récurrence qui décrit le temps d’exécution
global pour un problème de taille n en fonction du temps d’exécution pour des entrées
de taille moindre.
La récurrence définissant le temps d’exécution d’un algorithme ‘diviser pour régner’
se décompose suivant les trois étapes du paradigme de base:
1. Si la taille du problème est suffisamment réduite, pour une certaine constante
c, la résolution est directe et consomme un temps constant
2. Sinon, on divise le problème en a sous-problèmes chacun de taille de la taille
du problème initial. Le temps d’exécution total se décompose alors en trois parties:
• D(n): le temps nécessaire à la division du problème en sous-problèmes.
• a.t(n/b): le temps de résolution des a sous-problèmes.
• C(n): le temps nécessaire pour construire la solution finale à partir des solutions
aux sous-problèmes.
La relation de récurrence prend alors la forme:
2.2.3.Analyse des algorithmes ‘diviser pour régner’
cn 
).1(
b
1






sinon,)()()(
,si)1(
)(
nCnDta
cn
nt
b
n
Où l’on interprète soit comme , soit comme .b
n
 b
n
 b
n
2.2.4. deuxième exemple: algorithme de Strassem pour la multiplication des matrices
L’algorithme de Strassem est un algorithme ‘diviser pour régner’ qui n’effectue que
7 multiplications de matrices, contrairement à 8 dans l’algorithme précédent, mais
qui effectue plus d’additions et de soustractions de matrices, ce qui est sans
conséquence une addition de matrices étant ‘gratuite’ par rapport au coût d’une
multiplication.
Complexité
La complexité de l’algorithme de Strassem est donnée par la récurrence:
Algorithme
Il se décompose en quatre étapes:
1. Diviser les matrices A et B en matrices carrés de taille .
2. Au moyen de additions et soustractions scalaires, calculer 14 matrices
(à préciser) carrés de taille .
  )(7)( 2
2 ntnt n 
2
n
)( 2
n
7171 ,...,,,..., BBAA 2
n
3. Calculer récursivement les 7 produits de matrices
4. Calculer les sous-matrices désirées r, s, t et u en additionnant et/ou soustrayant les
combinaisons idoines des matrices ad-hoc, à l’aide de additions et
soustractions scalaires.
Produits de sous-matrices
Nous supposons que chaque matrice produit peut s’écrire sous la forme:
où les coefficients sont pris dans l’ensemble {-1, 0, 1}. Nous supposons
donc que chaque produit peut être obtenu en additionnant et soustrayant certaines
des sous-matrices de A, en additionnant et soustrayons certaines des sous-matrices
de B, et en multipliant les deux matrices ainsi obtenues.
Récrivons l’équation définissant r :
].7;1[,  iBAP iii
iP )( 2
n
iP
   hgfedcbaBAP iiiiiiiiiii  43214321 
jiji ,, et 
 










































....
....
...
...
0000
0000
0010
0001
d
c
b
a
h
g
f
e
dcbabfaer
hgfe
Où « + » représente « +1 », « . » représente « 0 » et « - » représente « -1 ». Nous
récrivons de même les équations définissant s, t et u :
On remarque que l’on peut calculer s par où sont calculées
chacune au moyen d’une unique multiplication de matrice:
,
....
....
...
...















d
c
b
a
bhags
hgfe
,
...
...
....
....















d
c
b
a
dfcet
hgfe
.
...
...
....
....















d
c
b
a
dhcgu
hgfe
21 PPs  21 et PP
.
....
....
...
...
)(,
....
....
....
..
)( 222111


























 
 hbaBAPhgaBAP
De même la matrice t peut être calculée par avec:
Pour calculer r et u on introduit une matrice définie comme suit:
43 PPt 
.
..
....
....
....
)(,
...
...
....
....
)( 444333




























 efdBAPedcBAP
5P
.
..
....
....
..
)()(555














 hedaBAP






















































































































































..
....
..
....
....
....
...
...
..
....
....
....
..
....
....
..
..
....
...
...
..
....
....
....
..
....
....
..
..
....
...
...
..
....
....
..
....
....
...
...
r















..
....
..
....
)()(666 hfdbBAP
D’où, en posant
On obtient
De même, on cherche à obtenir u à partir de :
.6245 PPPPr 
5P









































 











































 






























































....
..
....
..
...
...
....
....
....
....
....
..
..
....
....
..
...
...
....
..
....
....
....
..
..
....
....
..
...
...
....
..
..
....
....
..
...
...
....
....
u
D’où, en posant
On obtient
Discussion
L’algorithme de Strassen n’est intéressant en pratique que pour de grandes
matrices (n > 45) denses (peu d’éléments non nuls).
La meilleure borne supérieure pour la multiplication de matrices carrés de taille n
est environ en
La meilleure borne inférieure connue est en (il faut générer valeurs).















....
..
....
..
)()(777 gecaBAP
.7315 PPPPu 
).( 376,2
nO
)( 2
n 2
n
Chapitre 3: Algorithmes de tri
3.1. Tri par fusion
3.1.1. Principe
L’algorithme de tri par fusion est construit suivant le paradigme ‘diviser pour régner’:
1. Il divise la séquence de n nombres à trier en deux sous-séquences de taille
2. Il trie récursivement les deux sous-séquences.
3. Il fusionne les deux sous-séquences triées pour produire la séquence complète triée.
La récursion termine quand la sous-séquence à trier est de longueur 1 (car une telle
séquence est toujours triée).
3.1.2.Algorithme
La principale action de l’algorithme de tri par fusion est justement la fusion des
deux listes triées.
La fusion
Le principe de cette fusion est simple: à chaque étape, on compare les éléments
minimaux des deux sous-listes triées, le plus petit des deux étant l’élément minimal
de l’ensemble on le met de côté et on recommence. On conçoit ainsi un algorithme
.2
n
Fusionner qui prend en entrée un tableau A et trois entiers, p, q et r, tels que p ≤ q< r
et tels que les tableaux A[p .. q] et A[q+1 .. r] soient triés. L’algorithme est donné ci-
dessous:
1
1
][][fairequetant
1
1
][][sinon
1
][][alors][][si
faireetquetant
1
1tailledeun tableausoit
1
),,,(
]1[
][














kk
ii
iAkCqi
kk
jj
jAkC
ii
iAkCjAiA
rjqi
k
prC
qj
pi
rqpA
..rqA
p ..qA
fusiondeboucle
temporairetableauleparcouriràservantindice
résultatleconstruitonlequeldanstemporairetableau
tableauleparcouriràservantindice
tableauleparcouriràservantindice
Fusionner
][]1[
faire1à1pour
1
1
][][fairequetant
kCkpA
prk
kk
jj
jAkCrj





Fig.1 Algorithme de fusion de deux sous-tableaux adjacents triés.
Complexité de la fusion
Etudions les différentes étapes de l’algorithme:
- Les initialisations ont un coût constant
- La boucle tant que de fusion s’exécute au plus r-p fois, chacune de ses itérations
étant de coût constant, d’où un coût total en
- Les deux boucles tant que complétant C ont une complexité respective au pire de
q-p+1 et de r-q, ces deux complexité étant
- La recopie finale coûte
Par conséquent, l’algorithme de fusion a une complexité en
).1(
).( prO 
);( prO 
).1(  pr
).( pr 
Le tri
Ecrire l’algorithme de tri par fusion est maintenant une trivialité (cf. Fig.2).
Fig.2 Algorithme de tri par fusion.
3.1.3. Complexité
Pour déterminer la formule de récurrence qui nous donnera la complexité de
l’algorithme Tri-Fusion, nous étudions les trois phases de cet algorithme
‘diviser pour régner’:
Diviser: cette étape se réduit au calcul du milieu de l’intervalle [p; r], sa
complexité est donc en
Régner: l’algorithme résout récursivement deux sous-problèmes de tailles
respectives d’où une complexité en
Combiner: la complexité de cette étape est celle de l’algorithme de fusion qui est de
Pour la construction d’un tableau solution de taille n.
 
),,,(
),1,(
),,(
alors
),,(
2
)(
rqpAFusionner
rqAFusionTri
qpAFusionTri
qrpsi
rpAFusionTri
rp





).1(
,2
n ).(2 2
nt
)(n
Pour des valeurs de n suffisamment grandes, le tri par fusion avec son temps
d’exécution en est nettement plus efficace que le tri par insertion
dont le temps d’exécution est en
)log( nn
).( 2
n
3.2. Tri par tas
3.2.1. Définition d’un tas
Un tas est un arbre binaire parfait dont tout les niveaux sont complets sauf le
dernier qui est rempli de la gauche vers la droite. Dans un tas, un père est toujours
plus grand que ses fils.
Pour un exemple de tas voir Fig. 3.
16 14 10 8 7 9 3 2 4 1
1 2 3 4 5 6 7 8 9 10
Fig. 3 Un tas vu comme un arbre binaire (à gauche) et
comme un tableau (à droite).
Les tas sont généralement représentés et manipulés sous forme d’un tableau:
- Un tableau A qui représente un tas est un objet à deux attributs:
1. longueur(A) qui est le nombre d’éléments qui peuvent être stockés dans
le tableau A;
2. taille(A) qui est le nombre d’éléments stockés dans le tableau A.
- La racine est stockée dans la première case du tableau A[1].
- Les éléments de l’arbre sont rangés dans l’ordre, niveau par niveau, et de
gauche à droite. Les fonctions d’accès aux éléments du tableau sont alors:
 
12i
)Droite(Fils
2i
)Gauche(Fils
)Père(
2



renvoyer
renvoyer
renvoyer
i
i
i
i
- Propriété des tas: ][)][Père( iAiA 
3.2.2 Conservation de la structure de tas
L’algorithme Entasser (cf. Fig.3) prend en entrée un tableau A et un indice i. On
suppose que les sous-arbres de racine gauche(i) et Droite(i) sont des tas. Par
contre, il est possible que A[i] soit plus petit que ses fils (violant ainsi la
propriété de tas) . Entasser doit faire ‘descendre’ la valeur A[i] de sorte que le
sous arbre de racine i soit un tas. L’action de cet algorithme est illustré par la
Fig.4.
max),Entasser(
[max]][échangeralorsaxsi
maxalors[max]][et)(si
maxalors[max]][et)(si
ax
)(
)(
),Entasser(
A
AiAim
dAdAAtailleg
gAgAAtailleg
im
iDroited
iGaucheg
iA






Fig. 3: Algorithme Entasser.
Fig. 5: Action Entasser(A,1).
Complexité
Le temps d’exécution de Entasser sur un arbre de taille n est en plus le
temps de l’exécution récursive de Entasser sur un des deux sous-arbres, or ces
deux sous-arbres ont une taille en au plus (le pire cas survient quand la
dernière rangée de l’arbre est exactement remplie à moitié) Le temps
d’exécution de Entasser est donc décrit parla récurrence:
3.2.3 Construction d’un tas
La construction se fait simplement par utilisation successive de l’algorithme
Entasser, comme le montre l’algorithme à la Fig. 6.
)1(
3
2n
)1()()( 3
2  ntnt
)(logendoncest)( nnt 
  ),(faire1àPour
][][
)(
2
][
iAEntasseri
AtailleAlongueur
ATasConstruire
Alongueur



Fig. 6: Algorithme Construire-Tas.
D’où :
On peut donc construire un tas à partir d’un tableau en temps linéaire.
)()( nOnt 
3.2.4 Algorithme de tri par tas
Illustration de l’algorithme Tri-Tas
voir Fig. 6
Complexité
La procédure Trier-Tas prend un temps car l’appel à Construire-Tas
prend un temps et que chacun des n-1 appels à Entasser prend un temps
)1,(Entasser
1)()(
][]1[échanger
faire2à)(Pour
)(
)(
A
AtailleAtaille
iAA
Alongueuri
ATasConstruire
AtasTrier





)log( nnO
)(nO
).(log2 nO
3.3. Tri rapide (Quicksort)
3.3.1. Principe
3.3.2. Algorithme
j
jAiAji
xiAii
xjAjj
ji
hautj
basi
basAx
renvoyersinon
][][échangeralorssi
][àjusqu'1répéter
][àjusqu'1répéter
faire)(quetant
1
1
][







3.3.3. Complexité
a) Pire cas
b) Cas meilleur
c) Cas moyen
soit
soit encore
alors
Similaire à:
avec
Ce qui donne
3.4. Tri rapide version 2
3.4.1. Etape de division
3.4.2. Etape de fusion
3.4.2. Tri rapide complet
3.4.3. Pseudo-code du Tri rapide
3.5. Tri fusion (complément)
a) Etape de division
3.5.1. Tri Fusion complet
3.5.2 Pseudo-code du Tri Fusion

Contenu connexe

Tendances

algo et complexité .pptx
algo et complexité  .pptxalgo et complexité  .pptx
algo et complexité .pptxtarekjedidi
 
cours de complexité algorithmique
cours de complexité algorithmiquecours de complexité algorithmique
cours de complexité algorithmiqueAtef MASMOUDI
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en pythonMariem ZAOUALI
 
Chapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfChapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfMbarkiIsraa
 
La complexité des algorithmes récursives Géométrie algorithmique
La complexité des algorithmes récursivesGéométrie algorithmiqueLa complexité des algorithmes récursivesGéométrie algorithmique
La complexité des algorithmes récursives Géométrie algorithmiqueHajer Trabelsi
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de triYassine Anddam
 
Tp1 - Initiation à Java-Eclipse
Tp1 - Initiation à Java-EclipseTp1 - Initiation à Java-Eclipse
Tp1 - Initiation à Java-EclipseLilia Sfaxi
 
Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsSana Aroussi
 
Java cours n° 2 - classe-objet-constructeur
Java   cours n° 2 - classe-objet-constructeurJava   cours n° 2 - classe-objet-constructeur
Java cours n° 2 - classe-objet-constructeurAbdelwahab Naji
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéSana Aroussi
 
Cours systèmes temps réel partie 1 Prof. Khalifa MANSOURI
Cours  systèmes temps réel partie 1 Prof. Khalifa MANSOURICours  systèmes temps réel partie 1 Prof. Khalifa MANSOURI
Cours systèmes temps réel partie 1 Prof. Khalifa MANSOURIMansouri Khalifa
 
Cours : les arbres Prof. KHALIFA MANSOURI
Cours : les arbres Prof. KHALIFA MANSOURI Cours : les arbres Prof. KHALIFA MANSOURI
Cours : les arbres Prof. KHALIFA MANSOURI Mansouri Khalifa
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++coursuniv
 
Systèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionSystèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionLilia Sfaxi
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)rezgui mohamed
 
Systèmes multi agents concepts et mise en oeuvre avec le middleware jade
Systèmes multi agents concepts et mise en oeuvre avec le middleware jadeSystèmes multi agents concepts et mise en oeuvre avec le middleware jade
Systèmes multi agents concepts et mise en oeuvre avec le middleware jadeENSET, Université Hassan II Casablanca
 

Tendances (20)

algo et complexité .pptx
algo et complexité  .pptxalgo et complexité  .pptx
algo et complexité .pptx
 
cours de complexité algorithmique
cours de complexité algorithmiquecours de complexité algorithmique
cours de complexité algorithmique
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
 
Chapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdfChapitre 2 -Complexité des problèmes avec correction.pdf
Chapitre 2 -Complexité des problèmes avec correction.pdf
 
La complexité des algorithmes récursives Géométrie algorithmique
La complexité des algorithmes récursivesGéométrie algorithmiqueLa complexité des algorithmes récursivesGéométrie algorithmique
La complexité des algorithmes récursives Géométrie algorithmique
 
STR-2.pdf
STR-2.pdfSTR-2.pdf
STR-2.pdf
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
 
Tp1 - Initiation à Java-Eclipse
Tp1 - Initiation à Java-EclipseTp1 - Initiation à Java-Eclipse
Tp1 - Initiation à Java-Eclipse
 
Chapitre v algorithmes gloutons
Chapitre v algorithmes gloutonsChapitre v algorithmes gloutons
Chapitre v algorithmes gloutons
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
 
Java cours n° 2 - classe-objet-constructeur
Java   cours n° 2 - classe-objet-constructeurJava   cours n° 2 - classe-objet-constructeur
Java cours n° 2 - classe-objet-constructeur
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalité
 
Cours systèmes temps réel partie 1 Prof. Khalifa MANSOURI
Cours  systèmes temps réel partie 1 Prof. Khalifa MANSOURICours  systèmes temps réel partie 1 Prof. Khalifa MANSOURI
Cours systèmes temps réel partie 1 Prof. Khalifa MANSOURI
 
Cours : les arbres Prof. KHALIFA MANSOURI
Cours : les arbres Prof. KHALIFA MANSOURI Cours : les arbres Prof. KHALIFA MANSOURI
Cours : les arbres Prof. KHALIFA MANSOURI
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
programmation orienté objet c++
programmation orienté objet c++programmation orienté objet c++
programmation orienté objet c++
 
Programmation en C
Programmation en CProgrammation en C
Programmation en C
 
Systèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introductionSystèmes d'Exploitation - chp1-introduction
Systèmes d'Exploitation - chp1-introduction
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
 
Systèmes multi agents concepts et mise en oeuvre avec le middleware jade
Systèmes multi agents concepts et mise en oeuvre avec le middleware jadeSystèmes multi agents concepts et mise en oeuvre avec le middleware jade
Systèmes multi agents concepts et mise en oeuvre avec le middleware jade
 

En vedette

نصوص ضائعه من أخبار مصر للمسبحي byMosaadRamadan
نصوص ضائعه من أخبار مصر للمسبحي byMosaadRamadanنصوص ضائعه من أخبار مصر للمسبحي byMosaadRamadan
نصوص ضائعه من أخبار مصر للمسبحي byMosaadRamadanMosaadRamadan AbdAlhk
 
Complément cours actuariat vie
Complément cours actuariat vieComplément cours actuariat vie
Complément cours actuariat viefranckcam
 
Projet sur les carrieres informatiques
Projet sur les carrieres informatiquesProjet sur les carrieres informatiques
Projet sur les carrieres informatiquesSeattle138
 
Daniel sanger portfolio 2015
Daniel sanger portfolio 2015Daniel sanger portfolio 2015
Daniel sanger portfolio 2015Daniel Sanger
 
Guide pratique sur l'audiométrie vocale en arabe marocain
Guide pratique sur l'audiométrie vocale en arabe marocainGuide pratique sur l'audiométrie vocale en arabe marocain
Guide pratique sur l'audiométrie vocale en arabe marocainOujilal Abdelilah
 
Super party camionneur 2014
Super party camionneur 2014Super party camionneur 2014
Super party camionneur 2014nelsonrouthier
 
Charte graphique Visite Patrimoine
Charte graphique Visite PatrimoineCharte graphique Visite Patrimoine
Charte graphique Visite PatrimoineCécile Bernet
 
Publicitador
PublicitadorPublicitador
PublicitadorThinnkers
 
Mali: ENJEUX DE LA FORMATION DES RESSOURCES HUMAINES DANS LA COMPETITION REGI...
Mali: ENJEUX DE LA FORMATION DES RESSOURCES HUMAINES DANS LA COMPETITION REGI...Mali: ENJEUX DE LA FORMATION DES RESSOURCES HUMAINES DANS LA COMPETITION REGI...
Mali: ENJEUX DE LA FORMATION DES RESSOURCES HUMAINES DANS LA COMPETITION REGI...ckmadmin
 
Promenademarseille mai 2013
Promenademarseille mai 2013Promenademarseille mai 2013
Promenademarseille mai 2013ciffer louis
 
Présentation Wordpress Côte d'ivoire
Présentation Wordpress Côte d'ivoirePrésentation Wordpress Côte d'ivoire
Présentation Wordpress Côte d'ivoireWordpressCIV
 
Gladiator - Les anachronismes dans la présentation des gladiateurs
Gladiator - Les anachronismes dans la présentation des gladiateursGladiator - Les anachronismes dans la présentation des gladiateurs
Gladiator - Les anachronismes dans la présentation des gladiateursPolyxenia66
 
Wii have a problem
Wii have a problemWii have a problem
Wii have a problemciffer louis
 

En vedette (20)

Tema 2
Tema 2Tema 2
Tema 2
 
نصوص ضائعه من أخبار مصر للمسبحي byMosaadRamadan
نصوص ضائعه من أخبار مصر للمسبحي byMosaadRamadanنصوص ضائعه من أخبار مصر للمسبحي byMosaadRamadan
نصوص ضائعه من أخبار مصر للمسبحي byMosaadRamadan
 
Complément cours actuariat vie
Complément cours actuariat vieComplément cours actuariat vie
Complément cours actuariat vie
 
Projet sur les carrieres informatiques
Projet sur les carrieres informatiquesProjet sur les carrieres informatiques
Projet sur les carrieres informatiques
 
Daniel sanger portfolio 2015
Daniel sanger portfolio 2015Daniel sanger portfolio 2015
Daniel sanger portfolio 2015
 
Sans nom 2
Sans nom 2Sans nom 2
Sans nom 2
 
Guide pratique sur l'audiométrie vocale en arabe marocain
Guide pratique sur l'audiométrie vocale en arabe marocainGuide pratique sur l'audiométrie vocale en arabe marocain
Guide pratique sur l'audiométrie vocale en arabe marocain
 
Moverse 1 complet
Moverse 1 completMoverse 1 complet
Moverse 1 complet
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Securite2.pdf
Securite2.pdfSecurite2.pdf
Securite2.pdf
 
Tema 1ctm
Tema 1ctmTema 1ctm
Tema 1ctm
 
Super party camionneur 2014
Super party camionneur 2014Super party camionneur 2014
Super party camionneur 2014
 
Charte graphique Visite Patrimoine
Charte graphique Visite PatrimoineCharte graphique Visite Patrimoine
Charte graphique Visite Patrimoine
 
Publicitador
PublicitadorPublicitador
Publicitador
 
Mali: ENJEUX DE LA FORMATION DES RESSOURCES HUMAINES DANS LA COMPETITION REGI...
Mali: ENJEUX DE LA FORMATION DES RESSOURCES HUMAINES DANS LA COMPETITION REGI...Mali: ENJEUX DE LA FORMATION DES RESSOURCES HUMAINES DANS LA COMPETITION REGI...
Mali: ENJEUX DE LA FORMATION DES RESSOURCES HUMAINES DANS LA COMPETITION REGI...
 
Tema 1ctm
Tema 1ctmTema 1ctm
Tema 1ctm
 
Promenademarseille mai 2013
Promenademarseille mai 2013Promenademarseille mai 2013
Promenademarseille mai 2013
 
Présentation Wordpress Côte d'ivoire
Présentation Wordpress Côte d'ivoirePrésentation Wordpress Côte d'ivoire
Présentation Wordpress Côte d'ivoire
 
Gladiator - Les anachronismes dans la présentation des gladiateurs
Gladiator - Les anachronismes dans la présentation des gladiateursGladiator - Les anachronismes dans la présentation des gladiateurs
Gladiator - Les anachronismes dans la présentation des gladiateurs
 
Wii have a problem
Wii have a problemWii have a problem
Wii have a problem
 

Similaire à Diviser Pour Régner

melange de gaussienne
melange de gaussiennemelange de gaussienne
melange de gaussienneomri med
 
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdfChapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdfMbarkiIsraa
 
Chapitre 3 la recherche tabou
Chapitre 3 la recherche tabouChapitre 3 la recherche tabou
Chapitre 3 la recherche tabouAchraf Manaa
 
fr_Tanagra_Naive_Bayes_Classifier_Explained.pdf
fr_Tanagra_Naive_Bayes_Classifier_Explained.pdffr_Tanagra_Naive_Bayes_Classifier_Explained.pdf
fr_Tanagra_Naive_Bayes_Classifier_Explained.pdfSidiAbdallah1
 
CAPES maths 2019 composition 1 (option informatique)
CAPES maths 2019 composition 1 (option informatique)CAPES maths 2019 composition 1 (option informatique)
CAPES maths 2019 composition 1 (option informatique)Dany-Jack Mercier
 
Laffly regression multiple
Laffly regression multipleLaffly regression multiple
Laffly regression multiplemohamedchaouche
 
optimisation cours.pdf
optimisation cours.pdfoptimisation cours.pdf
optimisation cours.pdfMouloudi1
 
Projet Traitement Du Signal
Projet Traitement Du SignalProjet Traitement Du Signal
Projet Traitement Du SignalPierreMASURE
 
chap 3 complexité (3).pdf
chap 3 complexité (3).pdfchap 3 complexité (3).pdf
chap 3 complexité (3).pdfdonixwm
 
Ex determ
Ex determEx determ
Ex determbades12
 
Matlab Travaux Pratique
Matlab Travaux Pratique Matlab Travaux Pratique
Matlab Travaux Pratique Smee Kaem Chann
 
01_LES_TENSEURS.pdf
01_LES_TENSEURS.pdf01_LES_TENSEURS.pdf
01_LES_TENSEURS.pdfNSANGOU1
 

Similaire à Diviser Pour Régner (20)

melange de gaussienne
melange de gaussiennemelange de gaussienne
melange de gaussienne
 
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdfChapitre 3 _Conception et analyse d’algorithme-DPR.pdf
Chapitre 3 _Conception et analyse d’algorithme-DPR.pdf
 
246242769 sequence-1-pdf
246242769 sequence-1-pdf246242769 sequence-1-pdf
246242769 sequence-1-pdf
 
Regression logistque
Regression  logistqueRegression  logistque
Regression logistque
 
02systemediapo.pdf
02systemediapo.pdf02systemediapo.pdf
02systemediapo.pdf
 
Chapitre 3 la recherche tabou
Chapitre 3 la recherche tabouChapitre 3 la recherche tabou
Chapitre 3 la recherche tabou
 
fr_Tanagra_Naive_Bayes_Classifier_Explained.pdf
fr_Tanagra_Naive_Bayes_Classifier_Explained.pdffr_Tanagra_Naive_Bayes_Classifier_Explained.pdf
fr_Tanagra_Naive_Bayes_Classifier_Explained.pdf
 
Correction
CorrectionCorrection
Correction
 
CAPES maths 2019 composition 1 (option informatique)
CAPES maths 2019 composition 1 (option informatique)CAPES maths 2019 composition 1 (option informatique)
CAPES maths 2019 composition 1 (option informatique)
 
Laffly regression multiple
Laffly regression multipleLaffly regression multiple
Laffly regression multiple
 
optimisation cours.pdf
optimisation cours.pdfoptimisation cours.pdf
optimisation cours.pdf
 
Projet Traitement Du Signal
Projet Traitement Du SignalProjet Traitement Du Signal
Projet Traitement Du Signal
 
chap 3 complexité (3).pdf
chap 3 complexité (3).pdfchap 3 complexité (3).pdf
chap 3 complexité (3).pdf
 
Oc1 2013
Oc1 2013Oc1 2013
Oc1 2013
 
Ex determ
Ex determEx determ
Ex determ
 
Matlab Travaux Pratique
Matlab Travaux Pratique Matlab Travaux Pratique
Matlab Travaux Pratique
 
PLNE.pptx
PLNE.pptxPLNE.pptx
PLNE.pptx
 
Comparaison
ComparaisonComparaison
Comparaison
 
seance-07.pdf
seance-07.pdfseance-07.pdf
seance-07.pdf
 
01_LES_TENSEURS.pdf
01_LES_TENSEURS.pdf01_LES_TENSEURS.pdf
01_LES_TENSEURS.pdf
 

Dernier

PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfRiDaHAziz
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsRajiAbdelghani
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Alain Marois
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSKennel
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeXL Groupe
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETMedBechir
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .Txaruka
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETMedBechir
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSKennel
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSKennel
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre françaisTxaruka
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 37
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSKennel
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Gilles Le Page
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfRiDaHAziz
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSKennel
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 37
 

Dernier (19)

PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdf
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 temps
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directe
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSET
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
 
DO PALÁCIO À ASSEMBLEIA .
DO PALÁCIO À ASSEMBLEIA                 .DO PALÁCIO À ASSEMBLEIA                 .
DO PALÁCIO À ASSEMBLEIA .
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre français
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdf
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
 

Diviser Pour Régner

  • 1. Chapitre 2: La récursivité et le paradigme ‘’diviser pour régner’’ 2.1. Récursivité Définition 1: Un algorithme est dit récursif lorsqu’il est défini en fonction de lui-même. 2.1.1. Récursivité simple Revenons à la fonction puissance cette fonction peut être définie Récursivement: L’algorithme correspondant s’écrit: Puissance (x, n) Si n=0 alors renvoyer 1 sinon renvoyer x × Puissance ( x, n-1) .n xx         1si 0si1 1 nxx n x n n
  • 2. 2.1.2. Récursivité multiple Une définition récursive peut contenir plus d’un appel récursifs. Nous volons calculer ici les combinaisons en se servant de la relation de pascal: L’algorithme correspondant: Combinaison (n, p) Si p=0 ou p=n alors renvoyer 1 sinon renvoyer Combinaison (n-1, p)+ Combinaison (n-1, p-1) 2.1.3. Récursivité mutuelle Des définitions sont dites mutuellement récursives si elles dépendent les unes des autres. C’est le cas pour la définition de la parité: p nC         sinon. ou0si1 1 11 p n p n p n CC npp C             sinon)1( 0siaux )(imet sinon)1( 0si )( npair nf npair nimpair nvrai npair
  • 3. Les algorithmes correspondants s’écrivent: Pair(n) Impair(n) Si n=o alors renvoyer vrai si n=0 alors renvoyer faux sinon renvoyer Impair(n-1) sinon renvoyer Pair(n-1) 2.1.4. Récursivité imbriquée La fonction d’Ackermann est définie comme suit: D’où l’algorithme: Ackermann(m, n) Si m=0 alors n+1 sinon si n=0 alors Ackermann(m-1,1) sinon Ackermann(m-1, Ackermann(m, n-1))          sinon))1,(,1( 0et0si)1,1( 0si1 ),( nmAmA nmmA mn nmA
  • 4. 2.1.5. Principe et dangers de la récursivité Principe et intérêt: ce sont les mêmes que ceux de la démonstration par récurrence en mathématiques; on doit avoir: - Un certain nombre de cas dont la résolution est connue, ces ‘cas simples’ formeront les cas d’arrêt de la récursion; - Un moyen de se ramener d’un cas ‘compliqué’ à un cas ‘plus simple’. La récursivité permet d’écrire des algorithmes concis et élégants. Difficultés : - La définition être dénuée de sens: Algorithme A(n) renvoyer A(n) - il faut être sûrs que l’on retombera toujours sur un cas connu, c’est-à-dire sur un cas d’arrêt ; il nous faut nous assurer que la fonction est complètement définie, i.e., qu’elle est définie sur tout son domaine d’applications. Moyen : existence d’un ordre strict tel que la suite des valeurs successives des arguments invoqués par la définition soit strictement monotone et finit toujours par atteindre une valeur pour laquelle la solution est explicitement définie.
  • 5. 2.1.6. Exemple d’algorithme récursif: les tours de Hanoï Hypothèse : on suppose que l’on sait résoudre le problème pour (n-1) disques. Principe: pour déplacer n disques de la tige A vers la tige C, on déplace les (n-1) plus petits disques de la tige A vers la tige B, puis on déplace le plus gros disque de la tige A vers la tige c, puis on déplace les (n-1) plus petit disques de la tige B vers la tige C.
  • 6. Algorithme Hanoï(n, départ, intermédiaire, destination) Si n=1 alors déplacer le disque supérieur de la tige départ vers la tige destination sinon Hanoï(n-1, départ, destination, intermédiaire) déplacer le disque supérieur de la tige départ vers la tige destination Hanoï(n-1, intermédiaire, départ, destination) Complexité: On compte le nombre de déplacements des disques effectués par l’algorithme Hanoï invoqué sur n disques. D’où l’on déduit que On a donc ici un algorithme de complexité exponentielle.       sinon)1(21 1si1 )( nt n nt .12)(  n nt
  • 7. 2.2. Diviser pour régner 2.2.1. Principe Nombres d’algorithmes ont une structure récursive: pour résoudre un problème donné, ils s’appellent eux-mêmes récursivement une ou plusieurs fois sur des problèmes très similaires, mais de taille moindres, résolvent les sous-problèmes de manière récursive puis combinent les résultats pour trouver une solution au problème initial. Le paradigme ‘diviser pour régner’ donne lieu à trois étapes à chaque niveau de récursivité: Diviser : le problème en un certain nombre de sous-problèmes; Régner : sur les sous-problèmes en les résolvant récursivement ou, si la taille d’un sous-problème est assez réduite, le résoudre directement. Combiner : les solutions des sous-problèmes en une solution complète du problème initial.
  • 8. 2.2.2. Premier exemple: multiplication naïve de matrices Nous nous intéressons ici à la multiplication de matrices carrées de taille n. Algorithme naïf L’algorithme classique est le suivant: Multiplier-Matrices(A, B) Soit n la taille des matrices carrées A et B Soit C une matrice carrée de taille n Cet algorithme effectue multiplication et autant d’additions. C bacc nk c nj ni jkkijiji ji renvoyer faireà1Pour 0 faireà1Pour faireà1Pour ,,,, ,      )( 3 n
  • 9. Algorithme ‘diviser pour régner’naïf Dans la suite nous supposerons que n est une puissance exacte de 2. Décomposons les matrices A, B et C en sous-matrices de taille L’équation C=A.B peut alors s’écrire: En développant cette équation, nous obtenons: Chacune de ces quatre opérations correspond à deux multiplications de matrices carrée de taille et une addition de telles matrices. A partir de ces équations on peut aisément dériver un algorithme ‘diviser pour régner’ dont la complexité est donnée par la récurrence: L’addition des matrices carrées de taille étant en .22 nn                    hf ge dc ba ut sr dhcgudfcetbhagsbfaer  et,, 2 n ),()(8)( 2 2 ntnt n  2 n )( 2 n
  • 10. Lorsqu’un algorithme contient un appel récursif à lui-même, son temps d’exécution peut souvent être décrit par une équation de récurrence qui décrit le temps d’exécution global pour un problème de taille n en fonction du temps d’exécution pour des entrées de taille moindre. La récurrence définissant le temps d’exécution d’un algorithme ‘diviser pour régner’ se décompose suivant les trois étapes du paradigme de base: 1. Si la taille du problème est suffisamment réduite, pour une certaine constante c, la résolution est directe et consomme un temps constant 2. Sinon, on divise le problème en a sous-problèmes chacun de taille de la taille du problème initial. Le temps d’exécution total se décompose alors en trois parties: • D(n): le temps nécessaire à la division du problème en sous-problèmes. • a.t(n/b): le temps de résolution des a sous-problèmes. • C(n): le temps nécessaire pour construire la solution finale à partir des solutions aux sous-problèmes. La relation de récurrence prend alors la forme: 2.2.3.Analyse des algorithmes ‘diviser pour régner’ cn  ).1( b 1       sinon,)()()( ,si)1( )( nCnDta cn nt b n
  • 11. Où l’on interprète soit comme , soit comme .b n  b n  b n 2.2.4. deuxième exemple: algorithme de Strassem pour la multiplication des matrices L’algorithme de Strassem est un algorithme ‘diviser pour régner’ qui n’effectue que 7 multiplications de matrices, contrairement à 8 dans l’algorithme précédent, mais qui effectue plus d’additions et de soustractions de matrices, ce qui est sans conséquence une addition de matrices étant ‘gratuite’ par rapport au coût d’une multiplication. Complexité La complexité de l’algorithme de Strassem est donnée par la récurrence: Algorithme Il se décompose en quatre étapes: 1. Diviser les matrices A et B en matrices carrés de taille . 2. Au moyen de additions et soustractions scalaires, calculer 14 matrices (à préciser) carrés de taille .   )(7)( 2 2 ntnt n  2 n )( 2 n 7171 ,...,,,..., BBAA 2 n
  • 12. 3. Calculer récursivement les 7 produits de matrices 4. Calculer les sous-matrices désirées r, s, t et u en additionnant et/ou soustrayant les combinaisons idoines des matrices ad-hoc, à l’aide de additions et soustractions scalaires. Produits de sous-matrices Nous supposons que chaque matrice produit peut s’écrire sous la forme: où les coefficients sont pris dans l’ensemble {-1, 0, 1}. Nous supposons donc que chaque produit peut être obtenu en additionnant et soustrayant certaines des sous-matrices de A, en additionnant et soustrayons certaines des sous-matrices de B, et en multipliant les deux matrices ainsi obtenues. Récrivons l’équation définissant r : ].7;1[,  iBAP iii iP )( 2 n iP    hgfedcbaBAP iiiiiiiiiii  43214321  jiji ,, et                                              .... .... ... ... 0000 0000 0010 0001 d c b a h g f e dcbabfaer hgfe
  • 13. Où « + » représente « +1 », « . » représente « 0 » et « - » représente « -1 ». Nous récrivons de même les équations définissant s, t et u : On remarque que l’on peut calculer s par où sont calculées chacune au moyen d’une unique multiplication de matrice: , .... .... ... ...                d c b a bhags hgfe , ... ... .... ....                d c b a dfcet hgfe . ... ... .... ....                d c b a dhcgu hgfe 21 PPs  21 et PP
  • 14. . .... .... ... ... )(, .... .... .... .. )( 222111                              hbaBAPhgaBAP De même la matrice t peut être calculée par avec: Pour calculer r et u on introduit une matrice définie comme suit: 43 PPt  . .. .... .... .... )(, ... ... .... .... )( 444333                              efdBAPedcBAP 5P . .. .... .... .. )()(555                hedaBAP
  • 15.                                                                                                                                                       .. .... .. .... .... .... ... ... .. .... .... .... .. .... .... .. .. .... ... ... .. .... .... .... .. .... .... .. .. .... ... ... .. .... .... .. .... .... ... ... r
  • 16.                .. .... .. .... )()(666 hfdbBAP D’où, en posant On obtient De même, on cherche à obtenir u à partir de : .6245 PPPPr  5P
  • 17.                                                                                                                                                       .... .. .... .. ... ... .... .... .... .... .... .. .. .... .... .. ... ... .... .. .... .... .... .. .. .... .... .. ... ... .... .. .. .... .... .. ... ... .... .... u
  • 18. D’où, en posant On obtient Discussion L’algorithme de Strassen n’est intéressant en pratique que pour de grandes matrices (n > 45) denses (peu d’éléments non nuls). La meilleure borne supérieure pour la multiplication de matrices carrés de taille n est environ en La meilleure borne inférieure connue est en (il faut générer valeurs).                .... .. .... .. )()(777 gecaBAP .7315 PPPPu  ).( 376,2 nO )( 2 n 2 n
  • 19. Chapitre 3: Algorithmes de tri 3.1. Tri par fusion 3.1.1. Principe L’algorithme de tri par fusion est construit suivant le paradigme ‘diviser pour régner’: 1. Il divise la séquence de n nombres à trier en deux sous-séquences de taille 2. Il trie récursivement les deux sous-séquences. 3. Il fusionne les deux sous-séquences triées pour produire la séquence complète triée. La récursion termine quand la sous-séquence à trier est de longueur 1 (car une telle séquence est toujours triée). 3.1.2.Algorithme La principale action de l’algorithme de tri par fusion est justement la fusion des deux listes triées. La fusion Le principe de cette fusion est simple: à chaque étape, on compare les éléments minimaux des deux sous-listes triées, le plus petit des deux étant l’élément minimal de l’ensemble on le met de côté et on recommence. On conçoit ainsi un algorithme .2 n
  • 20. Fusionner qui prend en entrée un tableau A et trois entiers, p, q et r, tels que p ≤ q< r et tels que les tableaux A[p .. q] et A[q+1 .. r] soient triés. L’algorithme est donné ci- dessous: 1 1 ][][fairequetant 1 1 ][][sinon 1 ][][alors][][si faireetquetant 1 1tailledeun tableausoit 1 ),,,( ]1[ ][               kk ii iAkCqi kk jj jAkC ii iAkCjAiA rjqi k prC qj pi rqpA ..rqA p ..qA fusiondeboucle temporairetableauleparcouriràservantindice résultatleconstruitonlequeldanstemporairetableau tableauleparcouriràservantindice tableauleparcouriràservantindice Fusionner
  • 21. ][]1[ faire1à1pour 1 1 ][][fairequetant kCkpA prk kk jj jAkCrj      Fig.1 Algorithme de fusion de deux sous-tableaux adjacents triés. Complexité de la fusion Etudions les différentes étapes de l’algorithme: - Les initialisations ont un coût constant - La boucle tant que de fusion s’exécute au plus r-p fois, chacune de ses itérations étant de coût constant, d’où un coût total en - Les deux boucles tant que complétant C ont une complexité respective au pire de q-p+1 et de r-q, ces deux complexité étant - La recopie finale coûte Par conséquent, l’algorithme de fusion a une complexité en ).1( ).( prO  );( prO  ).1(  pr ).( pr 
  • 22. Le tri Ecrire l’algorithme de tri par fusion est maintenant une trivialité (cf. Fig.2). Fig.2 Algorithme de tri par fusion. 3.1.3. Complexité Pour déterminer la formule de récurrence qui nous donnera la complexité de l’algorithme Tri-Fusion, nous étudions les trois phases de cet algorithme ‘diviser pour régner’: Diviser: cette étape se réduit au calcul du milieu de l’intervalle [p; r], sa complexité est donc en Régner: l’algorithme résout récursivement deux sous-problèmes de tailles respectives d’où une complexité en Combiner: la complexité de cette étape est celle de l’algorithme de fusion qui est de Pour la construction d’un tableau solution de taille n.   ),,,( ),1,( ),,( alors ),,( 2 )( rqpAFusionner rqAFusionTri qpAFusionTri qrpsi rpAFusionTri rp      ).1( ,2 n ).(2 2 nt )(n
  • 23. Pour des valeurs de n suffisamment grandes, le tri par fusion avec son temps d’exécution en est nettement plus efficace que le tri par insertion dont le temps d’exécution est en )log( nn ).( 2 n 3.2. Tri par tas 3.2.1. Définition d’un tas Un tas est un arbre binaire parfait dont tout les niveaux sont complets sauf le dernier qui est rempli de la gauche vers la droite. Dans un tas, un père est toujours plus grand que ses fils. Pour un exemple de tas voir Fig. 3. 16 14 10 8 7 9 3 2 4 1 1 2 3 4 5 6 7 8 9 10 Fig. 3 Un tas vu comme un arbre binaire (à gauche) et comme un tableau (à droite).
  • 24. Les tas sont généralement représentés et manipulés sous forme d’un tableau: - Un tableau A qui représente un tas est un objet à deux attributs: 1. longueur(A) qui est le nombre d’éléments qui peuvent être stockés dans le tableau A; 2. taille(A) qui est le nombre d’éléments stockés dans le tableau A. - La racine est stockée dans la première case du tableau A[1]. - Les éléments de l’arbre sont rangés dans l’ordre, niveau par niveau, et de gauche à droite. Les fonctions d’accès aux éléments du tableau sont alors:   12i )Droite(Fils 2i )Gauche(Fils )Père( 2    renvoyer renvoyer renvoyer i i i i - Propriété des tas: ][)][Père( iAiA 
  • 25. 3.2.2 Conservation de la structure de tas L’algorithme Entasser (cf. Fig.3) prend en entrée un tableau A et un indice i. On suppose que les sous-arbres de racine gauche(i) et Droite(i) sont des tas. Par contre, il est possible que A[i] soit plus petit que ses fils (violant ainsi la propriété de tas) . Entasser doit faire ‘descendre’ la valeur A[i] de sorte que le sous arbre de racine i soit un tas. L’action de cet algorithme est illustré par la Fig.4. max),Entasser( [max]][échangeralorsaxsi maxalors[max]][et)(si maxalors[max]][et)(si ax )( )( ),Entasser( A AiAim dAdAAtailleg gAgAAtailleg im iDroited iGaucheg iA       Fig. 3: Algorithme Entasser.
  • 26. Fig. 5: Action Entasser(A,1).
  • 27. Complexité Le temps d’exécution de Entasser sur un arbre de taille n est en plus le temps de l’exécution récursive de Entasser sur un des deux sous-arbres, or ces deux sous-arbres ont une taille en au plus (le pire cas survient quand la dernière rangée de l’arbre est exactement remplie à moitié) Le temps d’exécution de Entasser est donc décrit parla récurrence: 3.2.3 Construction d’un tas La construction se fait simplement par utilisation successive de l’algorithme Entasser, comme le montre l’algorithme à la Fig. 6. )1( 3 2n )1()()( 3 2  ntnt )(logendoncest)( nnt    ),(faire1àPour ][][ )( 2 ][ iAEntasseri AtailleAlongueur ATasConstruire Alongueur    Fig. 6: Algorithme Construire-Tas.
  • 28.
  • 29.
  • 30. D’où : On peut donc construire un tas à partir d’un tableau en temps linéaire. )()( nOnt 
  • 31.
  • 32. 3.2.4 Algorithme de tri par tas Illustration de l’algorithme Tri-Tas voir Fig. 6 Complexité La procédure Trier-Tas prend un temps car l’appel à Construire-Tas prend un temps et que chacun des n-1 appels à Entasser prend un temps )1,(Entasser 1)()( ][]1[échanger faire2à)(Pour )( )( A AtailleAtaille iAA Alongueuri ATasConstruire AtasTrier      )log( nnO )(nO ).(log2 nO
  • 33.
  • 34.
  • 35.
  • 36. 3.3. Tri rapide (Quicksort) 3.3.1. Principe
  • 39.
  • 44. 3.4. Tri rapide version 2
  • 45. 3.4.1. Etape de division 3.4.2. Etape de fusion
  • 46. 3.4.2. Tri rapide complet
  • 47. 3.4.3. Pseudo-code du Tri rapide
  • 48. 3.5. Tri fusion (complément) a) Etape de division
  • 49.
  • 50. 3.5.1. Tri Fusion complet
  • 51. 3.5.2 Pseudo-code du Tri Fusion