Recherche dichotomique dans un tableau dentiers
LANGAGE C - EXEMPLES DE PROGRAMMES. Maude Manouvrier. La reproduction de ce document par tout moyen que ce soit est interdite conformément aux articles L111-1
Recherche séquentielle dans un tableau [re03] Exercice
C - Recherche dans un tableau (Solution). Mots-Clés Recherches □. Requis Dans le même ordre d'idées l'exercice @[Recherche dichotomique dans un tableau] ...
Algorithmique Trier et Trouver
⇒ Complexité : O(log2(taille)) ∩ Ω(1). Page 10. Recherche dans un tableau dichotomie. 9 de 47. Autre application
Recherche dichotomique
1 consacre une partie importante du chapitre 9 à cet algorithme et à son étude. 2. Présentation de l'algorithme. 2.1. Approche naïve. Une première façon de
Algo Prog Objet Python
Pour supprimer l'ambiguïté on va utiliser un pseudo langage Peut-on faire mieux ? • Oui si le tableau est préalablement trié. C'est la recherche dichotomique.
Plan Langage C • Typedef • Initiation aux pointeurs Algorithmique
• recherche : O(log n). (en cas de succès et d'échec ). C'est la recherche "dichotomique". Page 15. X Petite classe 5. X
PLAN DU COURS ALGORITHME DE RECHERCHE
12 mars 2013 RECHERCHE DICHOTOMIQUE. Algorithme recherche_dichotomique. {Recherche le ... • Introduction au langage C. • Notions de compilation. • Variables ...
Algorithmes de recherche et de tri
L'algorithme de recherche par interpolation est le même que celui de recherche dichotomique c] avec a<b<=c. // les elements de ces parties sont tries en ordre ...
Algorithmique - Correction du TD3
18 déc. 2012 Exercice 17 (*). Ecrire un algorithme de recherche dichotomique permettant de résoudre le problème suivant : – Données : un tableau tableau ...
Algorithmes de recherche [re] Algorithmique
4 Recherche dichotomique. 4.1 Principe de la recherche dichotomique. La C'est le principe de la recherche dans un dictionnaire : pour rechercher le mot ...
Recherche dichotomique dans un tableau dentiers
13 sept. 2000 LANGAGE C - EXEMPLES DE PROGRAMMES. Maude Manouvrier. La reproduction de ce document par tout moyen que ce soit est interdite conformément ...
Algorithmique Trier et Trouver
Recherche dans un tableau dichotomie. 9 de 47. Autre application de la recherche dichotomique. Jeu du nombre inconnu où l'on répond soit «plus grand» soit.
Recherche dichotomique
1 consacre une partie importante du chapitre 9 à cet algorithme et à son étude. 2. Présentation de l'algorithme. 2.1. Approche naïve. Une première façon de
Recherche séquentielle dans un tableau [re03] Exercice
C - Recherche dans un tableau (Solution). Mots-Clés Recherches ? même ordre d'idées l'exercice @[Recherche dichotomique dans un tableau] construit un.
Algorithmique & programmation en langage C - vol.1 - Archive
1 févr. 2019 d'algorithmique et de programmation en langage C donnés à la Faculté d'ingénierie de ... exemple : recherche dichotomique récursive.
Chapitre 3 - Recherche dans un tableau
Algorithme 3.1 Algorithme de recherche séquentielle laborieuse. Entrée : t un tableau a et b deux indices
PLAN DU COURS ALGORITHME DE RECHERCHE
12 mars 2013 Introduction au langage C. • Notions de compilation. • Variables types
Méthodes de programmation Algorithmes de recherche tri et sélection
Méthodes de programmation. Tri recherche
Algo Prog Objet Python
Recherche dichotomique. • Peut-on faire mieux ? • Oui si le tableau est préalablement trié. C'est la recherche dichotomique.
1 Recherche linéaire
11 mars 2020 Recherches linéaire et dichotomique ... 1) Programmez la classe générique Élément<CV> (donnée ci-dessous) munie des deux.
Searches related to recherche dichotomique langage c PDF
RECHERCHE DICHOTOMIQUE DANS UN TABLEAU D'ENTIERS #include /* Programm int main() e de recherche dichotomique d'un élément dans une liste d'entiers */ { /* DECLARATION DES VARIABLES */ int iTableau[]={1235689}; /* Tableau TRIE d’entiers */ int iRecherche; /* Elément recherché */
Qu'est-ce que la recherché dichotomique ?
La recherche dichotomique (ou recherche par dichotomie) consiste à trouver un élément dans une séquence triée en divisant l'intervalle de recherche de moitié à chaque itération. La recherche par dichotomie permet de trouver l'élément recherché plus rapidement à condition que l'ensemble soit préalablement trié.
Comment calculer la complexité de la recherche dichotomique ?
Pour avoir N /2 k = 1 il faut k = log 2 N ; par conséquent, le nombre d'opérations de la recherche dichotomique est de l'ordre de log 2 N. Cette complexité est à comparer avec celle de la recherche séquentielle (exercice 3), dont nous avons vu qu'elle était de N / 2 en moyenne.
Quelle est la complexité de l'algorithme de recherche dichotomique ?
Voici une implémentation de l'algorithme de recherche dichotomique en utilisant une définition récursive. Cet algorithme est de complexité logarithmique. Pour des tableaux de grandes tailles, cela représente une différence énorme.
Quelle est la propriété de l’algorithme de recherche dichotomique?
Propriété4 18 Dans l’algorithme de recherche dichotomique, après division en deux de la zone de recherche, l’algorithmes’appellelui-mêmesurl’unedesdeuxmoitiés. C’estunalgorithmedetypeDiviser pour régnerquipeutseprogrammerrécursivementcommenousleverronsenterminaledanslechapitre surlarécursivité.
1 de 47
Algorithmique
Trier et Trouver
Florent Hivert
Mél :Florent.Hivert@lri.fr
Page personnelle :http://www.lri.fr/˜hivert
2 de 47
Algorithmes et structures de données
La plupart des bons algorithmes fonctionnent grâce à une méthode astucieuse pour organiser les données. Par exemple, on sait très bien, intuitivement, que pour retrouver une carte dans un jeu, il est très utile que le jeu soit trié. Trouver et Trier :Donald E. Knuth,The Art of Computer Programming (TAOCP), Volume 3 : Sorting and Searching, Addison-Wesley, 1998.2 de 47
Algorithmes et structures de données
La plupart des bons algorithmes fonctionnent grâce à une méthode astucieuse pour organiser les données. Par exemple, on sait très bien, intuitivement, que pour retrouver une carte dans un jeu, il est très utile que le jeu soit trié.Trouver et Trier :Donald E. Knuth,The Art of Computer Programming
(TAOCP), Volume 3 : Sorting and Searching, Addison-Wesley, 1998.Recherche dans un tableau, dichotomie
3 de 47Recherche dans un
tableau, dichotomieRecherche dans un tableau, dichotomie
4 de 47Algorithme de recherche d"un élément dans un tableau
Algorithme
Entrée :un tableautabde tailletailleet un élémente.Sortie :itel quetab[i] = eouNonTrouvé(ex :1).
pour i de 0 à taille-1 faire si tab[i] = e alors retourner i retourner NonTrouvé )Complexité :O(taille)\ (1).Recherche dans un tableau, dichotomie
5 de 47Recherche d"un élément dans un tableau
La complexité précédente est trop élevée, surtout sachant que la recherche dans un tableau est une opération de base utilisée dans de nombreux algorithmes. Pour aller plus vite, on peut utiliser lestableaux triéset la dichotomie(méthode "diviser pour régner») :Retenir (Idée)Si le tableautabest trié, pour tout indicei,les élémentsetab[i]sont d"indicei;les élémentse>tab[i]sont d"indice>i.On essaye aveciau milieu du tableau.
Recherche dans un tableau, dichotomie
6 de 47Recherche dichotomique
Algorithme (RechDichoRec: recherche dans un tableau trié)Entrée :un tableautriétab, un intervalle[min;max]avec
0minmax si min = max alors si tab[min] = e alors retourner min sinon retourner NonTrouvé mid <- (min + max) / 2 si tab[mid] < e alors retourner RechDichoRec(tab, mid+1, max, e) sinon retourner RechDichoRec(tab, min, mid, e) )Complexité :(log2(taille)). Recherche dans un tableau, dichotomie
7 de 47Recherche dichotomique itérative
Remarque : La recherche dichotomique est récursive terminale.Algorithme (RechDichoItrecherche dichotomique itérative)min <- 0;
max <- taille - 1 tant que min < max faire mid <- (min + max) / 2 si tab[mid] < e alors min <- mid+1 sinon max <- mid si tab[min] = e alors retourner min sinon retourner NonTrouvé )Complexité :(log2(taille)). Recherche dans un tableau, dichotomie
8 de 47On peut stopper la recherche plus tôt si l"on a trouvé!
Algorithme (Recherche dichotomique variante)
min <- 0; max <- taille - 1 tant que min < max faire mid <- (min + max) / 2 si tab[mid] = e alors retourner mid sinon si tab[mid] < e alors min <- mid+1 sinon max <- mid-1 si tab[min] = e alors retourner min sinon retourner NonTrouvé )Complexité :O(log2(taille))\ (1). Recherche dans un tableau, dichotomie
9 de 47Autre application de la recherche dichotomique
Jeu du nombre inconnu où l"on répond soit "plus grand» soit "plus petit» soit "gagné».Calcul d"une racine d"une fonction croissante (exemple : px).Algorithme de pointage, de visée. Recherche de l"apparition d"un bug dans l"historique d"un programme (commandeshg bisect,git-bisect...) Exemple : 100 modifications, 10 minutes de tests pour chaque modifications. L"algorithme naif demande 1000 min16h40 au lieu de 70min1h10 par dichotomie. Tableaux triés, algorithmes de tris
10 de 47Tableaux triés,
algorithmes de tris Tableaux triés, algorithmes de tris
11 de 47Insertion dans un tableau trié
Algorithme (Insert)Entrées :
Tableautab,max_tailleéléments alloués
un élémente.Précondition :tabest trié (tab[i]tab[i+1]).Effet :eajouté àtabtrié. i <- taille tant que i > 0 et tab[i-1] > e faire tab[i] <- tab[i-1] i <- i-1 tab[i] <- e taille <- taille + 1 )Complexité :O(taille) Tableaux triés, algorithmes de tris
12 de 47Tri par insertion
Algorithme (InsertSort)Entrée :TableauTde tailletaille.Effet :Ttrié. pour i de 1 à taille-1 faire e <- t[i] // Insérer e à sa place dans T[0], ..., T[i-1] j <- i tant que j > 0 et T[j-1] > e faire t[j] <- t[j-1] j <- j-1 T[j] <- e
)Complexité :O(taille2) Algorithmes plus efficaces : Diviser pour régner 13 de 47Algorithmes plus efficaces :
Diviser pour régner
Algorithmes plus efficaces : Diviser pour régner 14 de 47Diviser pour régner
Du latin " Divide ut imperes » (Machiavel)
On divise un problème de grande taille en plusieurs (deux) sous-problèmes analogues. Différentes stratégies :1récursivité sur les données :on sépare les données en deux
parties arbitraires, puis on résout les sous-problèmes, pour enfin combiner les résultats.2récursivité sur le résultat :on effectue un pré-traitement
pour bien découper les données, afin que, après avoir résolu les sous-problèmes, les sous-résultats se combinent d"eux-mêmes. Algorithmes plus efficaces : Diviser pour régner 14 de 47Diviser pour régner
Du latin " Divide ut imperes » (Machiavel)
On divise un problème de grande taille en plusieurs (deux) sous-problèmes analogues. Différentes stratégies :1récursivité sur les données :on sépare les données en deux
parties arbitraires, puis on résout les sous-problèmes, pour enfin combiner les résultats.2récursivité sur le résultat :on effectue un pré-traitement
pour bien découper les données, afin que, après avoir résolu les sous-problèmes, les sous-résultats se combinent d"eux-mêmes. Algorithmes plus efficaces : Diviser pour régner 15 de 47Récursivité sur les données :
On sépare les données en deux parties arbitraires, puis on résout les sous-problèmes, pour enfin combiner les résultats.Comment obtenir un tableau trié, si l"on sait
trier chaque moitié?Fusion de tableaux trié! Algorithmes plus efficaces : Diviser pour régner 15 de 47Récursivité sur les données :
On sépare les données en deux parties arbitraires, puis on résout les sous-problèmes, pour enfin combiner les résultats.Comment obtenir un tableau trié, si l"on sait
trier chaque moitié?Fusion de tableaux trié! Algorithmes plus efficaces : Diviser pour régner 15 de 47Récursivité sur les données :
On sépare les données en deux parties arbitraires, puis on résout les sous-problèmes, pour enfin combiner les résultats.Comment obtenir un tableau trié, si l"on sait
trier chaque moitié?Fusion de tableaux trié! Algorithmes plus efficaces : Diviser pour régner 16 de 47Fusion de deux tableaux triés
Algorithme (Fusionde tableaux triée)Entrée :TableauxT1,T2triés de taillet1,t2, TableauTalloué de taillet=t1+t2Sortie :Tavec les contenusT1etT2trié i1 <- 0; i2 <- 0; i <- 0 tant que i1 < t1 et i2 < t2 faire si T1[i1] < T2[i2] alors T[i] <- T1[i1]; i++; i1++
sinon T[i] <- T2[i2]; i++; i2++
si i1 < t1 alors tant que i1 < t1 faire T[i] <- T1[i1]; i++; i1++
sinon tant que i2 < t2 faire T[i] <- T2[i2]; i++; i2++
)Complexité :(t) Algorithmes plus efficaces : Diviser pour régner 17 de 47Variantes et applications de la fusion
Opérations ensemblistes sur les tableaux trié :inclusion; intersection, réunion;différence et différence symétrique.Algorithme (Inclusion de tableau trié)Entrée :TableauxT1,T2triés de taillet1,t2,Sortie :VraisiT1T2
i1 <- 0; i2 <- 0 tant que i1 < t1 et i2 < t2 faire si T1[i1] = T2[i2] alors i1++; i2++ sinon si T1[i1] > T2[i2] alors i2++ sinon retourner Faux retourner i1 = t1 Algorithmes plus efficaces : Diviser pour régner 18 de 47Tri par fusion (MergeSort)
Algorithme (TriFusion)Entrée :TableauxTde taillet,0minmaxTableauTmpalloué de tailletSortie :Ttrié. si min <> max alors mid <- (min+max) / 2 TriFusion(T, min, mid)
TriFusion(T, mid+1, max)
Fusion(T[min..mid], T[mid+1..max], Tmp)
Copie de Tmp dans T[min..max]
)Complexité :(tlog(t)) Algorithmes plus efficaces : Diviser pour régner 19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec 0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner 19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec 0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner 19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec 0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner 19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec 0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner 19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec 0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner 19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec 0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner 19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec 0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner 19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec 0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner 20 de 47Complexité du tri par fusion (2)
Proposition
Le nombreckde copies d"éléments effectuées par le tri par fusion d"un tableau den=2kéléments vérifie : c 0=0etck=2(ck1+2k):
c k=2k+1k=2nlog2(n):Preuve par récurrence : vrai pourk=0sick=2k+1kalors c k+1=2(ck+2k+1) =2(2k+1k+2k+1) =2k+2(k+1) Algorithmes plus efficaces : Diviser pour régner 20 de 47Complexité du tri par fusion (2)
Proposition
Le nombreckde copies d"éléments effectuées par le tri par fusion d"un tableau den=2kéléments vérifie : c 0=0etck=2(ck1+2k):
c k=2k+1k=2nlog2(n):Preuve par récurrence : vrai pourk=0sick=2k+1kalors c k+1=2(ck+2k+1) =2(2k+1k+2k+1) =2k+2(k+1) Algorithmes plus efficaces : Diviser pour régner 20 de 47Complexité du tri par fusion (2)
Proposition
Le nombreckde copies d"éléments effectuées par le tri par fusion d"un tableau den=2kéléments vérifie : c 0=0etck=2(ck1+2k):
c k=2k+1k=2nlog2(n):Preuve par récurrence : vrai pourk=0sick=2k+1kalors c k+1=2(ck+2k+1) =2(2k+1k+2k+1) =2k+2(k+1) Algorithmes plus efficaces : Diviser pour régner 21 de 47Complexité du tri par fusion (3)
n n 2 n 2 2. ..n 2 kn 2quotesdbs_dbs26.pdfusesText_32
Recherche dans un tableau, dichotomie
7 de 47Recherche dichotomique itérative
Remarque : La recherche dichotomique est récursive terminale.Algorithme (RechDichoItrecherche dichotomique itérative)min <- 0;
max <- taille - 1 tant que min < max faire mid <- (min + max) / 2 si tab[mid] < e alors min <- mid+1 sinon max <- mid si tab[min] = e alors retourner min sinon retourner NonTrouvé )Complexité :(log2(taille)).Recherche dans un tableau, dichotomie
8 de 47On peut stopper la recherche plus tôt si l"on a trouvé!
Algorithme (Recherche dichotomique variante)
min <- 0; max <- taille - 1 tant que min < max faire mid <- (min + max) / 2 si tab[mid] = e alors retourner mid sinon si tab[mid] < e alors min <- mid+1 sinon max <- mid-1 si tab[min] = e alors retourner min sinon retourner NonTrouvé )Complexité :O(log2(taille))\ (1).Recherche dans un tableau, dichotomie
9 de 47Autre application de la recherche dichotomique
Jeu du nombre inconnu où l"on répond soit "plus grand» soit "plus petit» soit "gagné».Calcul d"une racine d"une fonction croissante (exemple : px).Algorithme de pointage, de visée. Recherche de l"apparition d"un bug dans l"historique d"un programme (commandeshg bisect,git-bisect...) Exemple : 100 modifications, 10 minutes de tests pour chaque modifications. L"algorithme naif demande 1000 min16h40 au lieu de 70min1h10 par dichotomie.Tableaux triés, algorithmes de tris
10 de 47Tableaux triés,
algorithmes de trisTableaux triés, algorithmes de tris
11 de 47Insertion dans un tableau trié
Algorithme (Insert)Entrées :
Tableautab,max_tailleéléments alloués
un élémente.Précondition :tabest trié (tab[i]tab[i+1]).Effet :eajouté àtabtrié. i <- taille tant que i > 0 et tab[i-1] > e faire tab[i] <- tab[i-1] i <- i-1 tab[i] <- e taille <- taille + 1 )Complexité :O(taille)Tableaux triés, algorithmes de tris
12 de 47Tri par insertion
Algorithme (InsertSort)Entrée :TableauTde tailletaille.Effet :Ttrié. pour i de 1 à taille-1 faire e <- t[i] // Insérer e à sa place dans T[0], ..., T[i-1] j <- i tant que j > 0 et T[j-1] > e faire t[j] <- t[j-1] j <- j-1T[j] <- e
)Complexité :O(taille2) Algorithmes plus efficaces : Diviser pour régner13 de 47Algorithmes plus efficaces :
Diviser pour régner
Algorithmes plus efficaces : Diviser pour régner14 de 47Diviser pour régner
Du latin " Divide ut imperes » (Machiavel)
On divise un problème de grande taille en plusieurs (deux)sous-problèmes analogues. Différentes stratégies :1récursivité sur les données :on sépare les données en deux
parties arbitraires, puis on résout les sous-problèmes, pourenfin combiner les résultats.2récursivité sur le résultat :on effectue un pré-traitement
pour bien découper les données, afin que, après avoir résolu les sous-problèmes, les sous-résultats se combinent d"eux-mêmes. Algorithmes plus efficaces : Diviser pour régner14 de 47Diviser pour régner
Du latin " Divide ut imperes » (Machiavel)
On divise un problème de grande taille en plusieurs (deux)sous-problèmes analogues. Différentes stratégies :1récursivité sur les données :on sépare les données en deux
parties arbitraires, puis on résout les sous-problèmes, pourenfin combiner les résultats.2récursivité sur le résultat :on effectue un pré-traitement
pour bien découper les données, afin que, après avoir résolu les sous-problèmes, les sous-résultats se combinent d"eux-mêmes. Algorithmes plus efficaces : Diviser pour régner15 de 47Récursivité sur les données :
On sépare les données en deux parties arbitraires, puis on résout lessous-problèmes, pour enfin combiner les résultats.Comment obtenir un tableau trié, si l"on sait
trier chaque moitié?Fusion de tableaux trié! Algorithmes plus efficaces : Diviser pour régner15 de 47Récursivité sur les données :
On sépare les données en deux parties arbitraires, puis on résout lessous-problèmes, pour enfin combiner les résultats.Comment obtenir un tableau trié, si l"on sait
trier chaque moitié?Fusion de tableaux trié! Algorithmes plus efficaces : Diviser pour régner15 de 47Récursivité sur les données :
On sépare les données en deux parties arbitraires, puis on résout lessous-problèmes, pour enfin combiner les résultats.Comment obtenir un tableau trié, si l"on sait
trier chaque moitié?Fusion de tableaux trié! Algorithmes plus efficaces : Diviser pour régner16 de 47Fusion de deux tableaux triés
Algorithme (Fusionde tableaux triée)Entrée :TableauxT1,T2triés de taillet1,t2, TableauTalloué de taillet=t1+t2Sortie :Tavec les contenusT1etT2trié i1 <- 0; i2 <- 0; i <- 0 tant que i1 < t1 et i2 < t2 faire si T1[i1] < T2[i2] alorsT[i] <- T1[i1]; i++; i1++
sinonT[i] <- T2[i2]; i++; i2++
si i1 < t1 alors tant que i1 < t1 faireT[i] <- T1[i1]; i++; i1++
sinon tant que i2 < t2 faireT[i] <- T2[i2]; i++; i2++
)Complexité :(t) Algorithmes plus efficaces : Diviser pour régner17 de 47Variantes et applications de la fusion
Opérations ensemblistes sur les tableaux trié :inclusion; intersection, réunion;différence et différencesymétrique.Algorithme (Inclusion de tableau trié)Entrée :TableauxT1,T2triés de taillet1,t2,Sortie :VraisiT1T2
i1 <- 0; i2 <- 0 tant que i1 < t1 et i2 < t2 faire si T1[i1] = T2[i2] alors i1++; i2++ sinon si T1[i1] > T2[i2] alors i2++ sinon retourner Faux retourner i1 = t1 Algorithmes plus efficaces : Diviser pour régner18 de 47Tri par fusion (MergeSort)
Algorithme (TriFusion)Entrée :TableauxTde taillet,0minmaxTriFusion(T, min, mid)
TriFusion(T, mid+1, max)
Fusion(T[min..mid], T[mid+1..max], Tmp)
Copie de Tmp dans T[min..max]
)Complexité :(tlog(t)) Algorithmes plus efficaces : Diviser pour régner19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner19 de 47Complexité du tri par Fusion (1)
Pour simplifier, on suppose que la taille du tableau est une puissance de 2. On noteck=dnle nombre de copies d"éléments siTest de taille n=2k. On trouvec0=d1=0c
1=d2=2+2 (fusion + copie)c
2=d4=2c1+4+4=16 (rec + fusion + copie)c
3=d8=2c2+8+8=48 (rec + fusion + copie)c
4=d16=2c3+16+16=128 (rec + fusion + copie)c
5=d32=2c4+32+32=320 (rec + fusion + copie)c
6=d64=2c5+64+64=768 (rec + fusion + copie)c
7=d128=2c6+128+128=1792 (rec + fusion + copie)
Algorithmes plus efficaces : Diviser pour régner20 de 47Complexité du tri par fusion (2)
Proposition
Le nombreckde copies d"éléments effectuées par le tri par fusion d"un tableau den=2kéléments vérifie : c0=0etck=2(ck1+2k):
c k=2k+1k=2nlog2(n):Preuve par récurrence : vrai pourk=0sick=2k+1kalors c k+1=2(ck+2k+1) =2(2k+1k+2k+1) =2k+2(k+1) Algorithmes plus efficaces : Diviser pour régner20 de 47Complexité du tri par fusion (2)
Proposition
Le nombreckde copies d"éléments effectuées par le tri par fusion d"un tableau den=2kéléments vérifie : c0=0etck=2(ck1+2k):
c k=2k+1k=2nlog2(n):Preuve par récurrence : vrai pourk=0sick=2k+1kalors c k+1=2(ck+2k+1) =2(2k+1k+2k+1) =2k+2(k+1) Algorithmes plus efficaces : Diviser pour régner20 de 47Complexité du tri par fusion (2)
Proposition
Le nombreckde copies d"éléments effectuées par le tri par fusion d"un tableau den=2kéléments vérifie : c0=0etck=2(ck1+2k):
c k=2k+1k=2nlog2(n):Preuve par récurrence : vrai pourk=0sick=2k+1kalors c k+1=2(ck+2k+1) =2(2k+1k+2k+1) =2k+2(k+1) Algorithmes plus efficaces : Diviser pour régner21 de 47Complexité du tri par fusion (3)
n n 2 n 2 2. ..n 2 kn 2quotesdbs_dbs26.pdfusesText_32[PDF] exemple de manuel de procedure informatique
[PDF] organisation d une dsi type
[PDF] manuel de procédures informatiques
[PDF] cyberlux 8
[PDF] organisation dun service informatique dans une entreprise
[PDF] cyberlux 8 crack
[PDF] exemple dossier exploitation informatique
[PDF] cyberlux 8 full
[PDF] bibliographie de max weber
[PDF] max weber pdf
[PDF] max weber économie et société tome 2 pdf
[PDF] max weber le savant et le politique pdf
[PDF] max weber économie et société fiche de lecture
[PDF] max weber économie et société tome 1 résumé