Académique Documents
Professionnel Documents
Culture Documents
Kharbane Yahya
CRMEF Marrakech-Safi
Centre de Préparation à l’Agrégation
Département d’informatique
Introduction
1/37
2/37
diviser pour régner (divide and conquer en anglais) est une technique
algorithmique consistant à :
Diviser : découper un problème initial en sous-problèmes ;
Régner : résoudre les sous-problèmes (récursivement ou directement
s’ils sont assez petits) ;
Combiner : calculer une solution au problème initial à partir des
solutions des sous-problèmes.
Cette technique fournit des algorithmes efficaces pour de nombreux
problèmes, comme la recherche d’un élément dans un tableau trié (recherche
dichotomique), le tri (tri fusion, tri rapide), la multiplication de grands
nombres (algorithme de Karatsuba) ou la transformation de Fourier discrète
(transformation de Fourier rapide).
3/37
4/37
5/37
5/37
6/37
7/37
8/37
1 def tri_rapide ( L ) :
2 if len ( L ) <=1:
3 return L
4 P ar tition_pivot =[ L [0]]
5 Partition_sup =[]
6 Partition_inf =[]
7 for i in range (1 , len ( L ) ) :
8 if L [ i ] > L [0]:
9 Partition_sup = Partition_sup +[ L [ i ]]
10 else :
11 Partition_inf = Partition_inf +[ L [ i ]]
12 return tri_rapide ( Partition_inf ) + Pa r ti t io n_ p iv ot + tri_rapide (
Partition_sup )
9/37
10/37
11/37
11/37
12/37
13/37
14/37
15/37
16/37
17/37
18/37
19/37
20/37
21/37
22/37
23/37
24/37
25/37
26/37
27/37
28/37
29/37
30/37
31/37
32/37
33/37
34/37
35/37
36/37
1 def fusion ( L ) :
2 if len ( L ) <=1:
3 return L
4 n = len ( L )
5 partie_gauche = L [: n //2]
6 partie_droite = L [ n //2:]
7 partie_gauche = fusion ( partie_gauche )
8 partie_droite = fusion ( partie_droite )
9 i = j =0
10 Resultat =[]
11 while i < len ( partie_gauche ) and j < len ( partie_droite ) :
12 if partie_gauche [ i ] < partie_droite [ j ]:
13 Resultat = Resultat +[ partie_gauche [ i ]]
14 i = i +1
15 else :
16 Resultat = Resultat +[ partie_droite [ j ]]
17 j = j +1
18 if i == len ( partie_gauche ) :
19 Resultat = Resultat + partie_droite [ j :]
20 else :
21 Resultat = Resultat + partie_gauche [ i :]
22 return Resultat
37/37