[PDF] Tris par comparaison - AlloSchool



Previous PDF Next PDF







TOUS LES EXERCICES DALGEBRE ET DE GEOMETRIE PC-PSI

TOUS LES EXERCICES DÕALGéBRE ET DE G OM TRIE PC-PSI Pour assimiler le programme, sÕentra ner et r ussir son concours El-Haj Laamri Agr g en math matiques et ma tre de conf rences Nancy-Universit



TOUS LES EXERCICES DALGEBRE ET DE GEOMETRIE MP

TOUS LES EXERCICES DÕALGéBRE ET DE G OM TRIE MP Pour assimiler le programme, sÕentra ner et r ussir son concours El-Haj Laamri Agr g en math matiques et ma tre de conf rences Nancy-Universit



TOUS LES EXERCICES DALGEBRE ET DE GEOMETRIE PC-PSI

trie » regroupe des exercices de tous les concours abordant les questions de géomé-trie (affine, euclidienne, isométries affines et vectorielles, lieux géométriques, calcul d’extrema) Absentes des programmes de deuxième année, ces notions ne sont pas absentes des concours Enfin, nous avons apporté un soin tout particulier aux



Tris par comparaison - AlloSchool

Exercice 6 Montrons par récurrence forte sur n = j i > 2 que tri(t, i, j) trie correctement le tableau t[i: j] – Si n = 2 l’algorithme réalise au plus une permutation pour trier le tableau à deux cases et ne fait pas d’appel récursif –Si n>3 on suppose le résultat acquis jusqu’au rang n 1



Correction TD 8 : Algorithmes de tri

Exercice 2 : Nombre d’op´erations a- Pour effectuer k recherches dans un tableau non tri´e de taille n il faut compter en moyenne kn 2 op´erations b- Trier le tableau se fait en nlog2 n auquel il faut ajouter la recherche di-chotomique qui se fait en log2 n et qu’on doit faire k fois : (n+k)log2 n



Tous les exercices dAnalyse PC-PSI

Présentation de la série « Tous les exercices de mathématiques » vii ouvrages de première année présentent donc une sélection d’extraits de problèmes d’écrits L’élève de deuxième année, plus mûr, est capable de trouver lui-même des sujets d’écrit, les ouvrages de deuxième année n’en présentent donc pas Cette plus





TP no 10 : Tris - CPGE

Lycée Carnot — 2018-2019 Informatique MPSI TP no 10 : Tris Le tri est peut-être le problème le plus fondamental en matière d’algorithmique Donald KNUTH y consacre d’ailleurs le 3e volume de son immense œuvre The Art of Computer Programming



Pour les figures, tu peux les recopier approximativement ou

Faire les exercices 1 et 2 Cliquer ici Envoyer une photo de l’exercice 1 et 2 Jeudi 7 mai 2020 Faire l’ativité rapide 2 Cliquer ici Faire l’activité 2 Cliquer ici Lire, comprendre et recopier la leçon 2 Cliquer ici Faire les exercices Cliquer ici Envoyer une photo de la leçon recopiée Vendredi 8 mai 2020 Férié Lundi



Chapitre 3 informatique commune Algorithmes de tris

3 4 informatique commune Remarque Le tri par insertion (tel qu’il est rédigé ci-dessus) est stable 2 Algorithmes de tris efficaces Nous venons d’étudier deux algorithmes de tri, tous deux de coût quadratique, aussi bien dans le pire des cas

[PDF] Tous les exercices d 'Analyse MP

[PDF] Tous les exercices d 'Algèbre et de Géométrie MP

[PDF] Tous les exercices d 'Algèbre et de Géométrie MP

[PDF] Tous les exercices d 'Analyse MP

[PDF] prépas scientifiques - Dunod

[PDF] les tarifs des offres Livebox-Zen et Livebox-Play - Boutique orangefr

[PDF] DIALOGUE

[PDF] 100 exercices d 'entraînement au théâtre

[PDF] [JSOW] #8921 100 exercices de commerce international : Techniques de

[PDF] Les bases appliquées de l 'espagnol - Passerelles: Communication

[PDF] 100 fiches pour comprendre le système éducatif PDF Télécharger

[PDF] Citations littéraires expliquées

[PDF] En français En chiffres Puissance de 10 Préfixe - Mutuamath

[PDF] QCM de selection - IFMT

[PDF] Free Book 100 Recettes De Cosmetiques Maison - Kondeo

Chapitre 3informatique commune

Corrigé des exercices

Tris par comparaison

Exercice 1

defminimum(t, j): ifj ==len(t)1: returnj i = minimum(t, j+1) ift[j] < t[i]: returnj else: returni defselect_sort(t, j=0): ifj j: t[i], t[j] = t[j], t[i] select_sort(t, j+1)definsere(t, j): ifj > 0andt[j] < t[j1]: t[j1], t[j] = t[j], t[j1] insere(t, j1) definsertion_sort(t, j=1): ifj Exercice 2Observons la situation après avoir déjà trouvé lesjplus petits éléments et déterminé l"endroit où

se trouve l"élémentj+1 :12jj+1non trié

La partie non triée correspond à une permutation deS(~j+1;n). Si on les suppose toutes équiprobables, la

probabilité pour quej+1soit situé à son endroit définitif et ne nécessite donc pas de permutation est égale à

(nj1)!(nj)!=1nj. Le nombre de permutation moyen est donc égal à : n2X j=0 11nj =nn X k=11k =nlnn +o(1):

Exercice 3

Lorsqu"on parcourt le tableau (de la gauche vers la droite) en permutant deux éléments consécutifs

à chaque fois que l"élément le plus petit se trouve à droite du plus grand, on est assuré en fin de parcours d"avoir

placé le plus grand élément du tableau à sa place définitive, en ayant effectuén1comparaisons et au plus

n1 permutations.

Il reste à réitérer le procédé sur le tableau privé de sa dernière case pour obtenir l"algorithme de tri bulle, ainsi

nommé car les éléments les plus grands du tableau se dirigent vers leur place définitive à l"image des bulles

d"air qui remontent à la surface d"un liquide. On rédige une fonction de " remontée » des bulles (jusqu"au niveauk) :defremonte(t, k): forjinrange (k1): ift[j] > t[j+1]: t[j], t[j+1] = t[j+1], t[j]puis la fonction de tri proprement dit :

Jean-Pierre Becirspahic

3.2informatique communedefbubble_sort(t):

forkinrange (len(t), 0,1):

remonte(t, k)Notonscnle nombre de comparaisons effectuées, etpnle nombre de permutations de deux éléments. Nous

avonscn=n1+cn1etpn16pn6pn1+n1, donccn=n(n1)2 et 06pn6n(n1)2

Il s"agit donc d"un algorithme de coût quadratique, le pire des cas ayant lieu lorsque le tableau est trié à l"envers,

car alorscn=pn=n(n1)2

Remarque

. Il est possible d"améliorer légèrement cet algorithme en observant que si lors d"une étape de

remontée aucune permutation n"est effectuée, c"est que le tableau est trié, et qu"on peut donc s"arrêter là.

Pour exploiter cette remarque on peut par exemple faire en sorte que la fonctionremonterenvoie une valeur

booléenne indiquant si aucune permutation n"a été réalisée. Ceci conduit à cette seconde version :defremonte(t, k):

b = False forjinrange (k1): ift[j] > t[j+1]: t[j], t[j+1] = t[j+1], t[j] b = True returnb defbubble_sort(t): b, k = True,len(t) whilebandk > 0: b = remonte(t, k) k= 1

Avec cette nouvelle version, le nombre d"échanges est inchangé mais le nombre de comparaisons n"est plus

systématiquement quadratique. Dans le cas d"un tableau déjà trié, par exemple, cet algorithme n"effectue que

n1 comparaisons et aucune permutation.

On peut aussi observer que le nombre de permutations effectuées reste identique dans chacune des deux

versions, très précisément égal au nombre d"inversions de la permutation initiale (c"est à dire le nombre de

couples(i;j)tel quei < jett[j]< t[i]), au moins dans les cas où toutes les valeurs du tableau sont distinctes.

Il n"est pas difficile de prouver que le nombre moyens d"inversions est égal àn(n1)4, ce qui assure un coût

quadratique en moyenne.

Exercice 4

La version itérative de l"algorithme de tri fusion consiste à fusionner les cases deux par deux,

puis quatre par quatre, huit par huit, etc. On peut utiliser la fonctionfusiondu cours, et la fonction de tri à

proprement parler devient :defmerge_sort(t): n =len(t) aux = [None]*n p = 1 whilep < n: q = n // p forkinrange (0, q1, 2): fusion(t, k*p, (k+1)*p, (k+2)*p, aux) t[k*p:(k+2)*p] = aux[k*p:(k+2)*p] ifq % 2 == 1: k = q1 fusion(t, k*p, (k+1)*p, n, aux) t[k*p:n] = aux[k*p:n] p*= 2

Prouvons la validité de cet algorithme en supposant qu"aprèsp1étapes on aitn=pq+ravec06r < pet que

le tableautsoit la concaténation deqtableaux triés de longueurpet d"un tableau de longueurr. Deux cas sont

à envisager :

Corrigé des exercices3.3

-siq= 2q0est pair, les tableaux sont fusionnés deux par deux pour former des tableaux triés de longueur

2pet le dernier de longueurrn"est pas fusionné;

siq= 2q01est impair, les tableaux sont fusionnés deux par deux pour former des tableaux triés de

longueur2pet le dernier de longueurpest fusionné avec celui de longueurrpour former un tableau trié

de longueurp+r. En posantp0= 2petr0=rout0=p+rsuivant la parité deqnous pouvons affirmer quen=p0q0+r0avec

06r0< p0et le tableautest maintenant constitué deq0tableaux triés de longueur2pet d"un tableau trié de

longueurr0. L"algorithme se termine lorsquep > ncar alorsq= 0 etr=n.

Exercice 5

a)

Lors du tri par insertion d"un tableau déjà 2-trié, le nombre maximal d"échanges est obtenu lorsque les

termes d"indices impairs sont tous inférieurs aux termes d"indices pairs. Dans cette situation, le nombre

d"échanges effectués est égal à 1+2++ln2 m=p(p+1)2 avecp=ln2 m. Le tableau trié prend alors la forme : (a1;a3;a5;:::;a0;a2;a4;:::). b)

Partons d"un tableau trié, par exemple(1;2;3;4). Pour que le nombre d"échanges par le 1-tri soit maximal, il

faut qu"à l"étape précédente on soit en présence du tableau(3;1;4;2). De même, pour que le nombre d"échanges

par le 2-tri soit maximal, il faut qu"à l"étape précédente on soit en présence du tableau (4;2;3;1).

Ce dernier tableau nécessite donc 5 échanges pour être trié par le tri de Shell : à la première étape (le 2-tri), 2

échanges le transforment en (3;1;4;2), à la seconde étape (le 1-tri), 3 échanges en transforment en (1;2;3;4).

C"est la même chose pourn= 8en partant de(1;2;3;4;5;6;7;8). Avant le 1-tri, il faut avoir(5;1;6;2;7;3;8;4),

avant le 2-tri,(7;3;5;1;8;4;6;2), et avant le 4-tri,(8;4;6;2;7;3;5;1). Avec ce dernier tableau, le tri de Shell

effectue 20 échanges. c)

Le tri de Shell étudié ici revient à trier récursivement les termes pairs et impairs séparément puis à appliquer

le 1-tri (le tri par insertion) au tableau obtenu. D"après la première question, le nombre maximal d"échanges

effectués vérifie la relation : C(2p) = 2C(2p1)+2p1(2p1+1)2 , soit :up= 2up1+2p2(2p1+1).

Écrivons :up2

p=up12 p1+2p1+14de manière à réaliser un télescopage. Sachant queu0= 0on obtient :up= 2pp1X k=02 k+14 = 2p2(2p1+p) =2p(2p1)4 +p2p2.

Lorsquen= 2p, le nombre d"échanges effectués est égal dans le pire des cas àn(n1)4+nlogn4. Le coût reste

quadratique, mais asymptotiquement le nombre d"échanges est deux fois moindre que pour le tri par insertion.

Cela n"en reste pas moins mauvais, et d"autres choix pour la suitehpconduisent à de meilleurs résultats. Par

exemple, la suite définie parhp= 2p1conduit à un coût dans la pire des cas en(n3=2)(Hibbard, 1963).

Mieux, la suite des nombres de la forme2a3bconduit à un coût en(nlog2n)(Pratt, 1971). Mais la recherche

de la meilleure suite de valeurs pourhpreste à l"heure actuelle un problème ouvert.

d)On écrit tout d"abord une fonctioninsertionqui réalise leh-tri d"un tableau.definsertion(t, h):

forjinrange (h,len(t)): k = j whilek >= handt[k] < t[kh]: t[kh], t[k] = t[k], t[kh] k= 1

Le tri proprement dit consiste essentiellement à calculer la plus grande valeurhpde la suite qui vérifie

hp6n < hp+1puis à appliquer la fonction précédente avechp;hp1;:::;h1= 1.

Jean-Pierre Becirspahic

3.4informatique communedefshell_sort(t):

h = 1 while2*h + 1 0: insertion(t, h) h = (h1) // 2 Exercice 6Montrons par récurrence forte surn=ji>2quetri(t, i, j)trie correctement le tableau t[i:j].

Sin= 2l"algorithme réalise au plus une permutation pour trier le tableau à deux cases et ne fait pas

d"appel récursif. Si n>3 on suppose le résultat acquis jusqu"au rangn1. L"algorithme scinde la tableau en trois parties :a=t[i:i+k],b=t[i+k:jk],c=t[jk:j].abc

On ajaj=jcj=ketjbj=ji2kaveck=jji3

kdoncjbj>jaj=jcj.

Le tableaua+best tout d"abord trié; ceci assure que dansbse trouvent désormais (au moins) leskplus

grands éléments dea+b;

Le tableaub+cest ensuite trié; ceci assure que leskplus grands éléments dea+b+cse trouvent maintenant

triés dansc.

Le dernier appel récursif trie enfin lesjikderniers éléments dansa+b, ce qui assure qu"après ces

trois appels récursifs le tableautest trié.

SiC(n)désigne le coût temporel de cet algorithme lorsquen=jtj, on dispose de la relation :C(n) = 3C(nk)+(1)

aveck=bn=3c, soit C(n) = 3C(d2n=3e)+(1).

Supposons avoir trouvé une valeur deet une constante M telles que C(n0)>Mn0pour toutn < n0. Alors :

C(n)>3M2n3

+(1)>3M23 n:

En choisissantvérifiant323

= 1nous avons prouvé queC(n) = (n). Sachant que=ln3ln3ln22;71cet algorithme a un coût plus que quadratique, c"est le plus médiocre que nous ayons rencontré!

Segmentation et tri rapide

Exercice 7

Le principe est semblable au principe de segmentation du tri rapide : on parcours le tableau en ayant pour invariants les entiersu;v;wdéfinis par le shéma ci-dessous :uvw?

Tant quev < w, on regarde la couleur det[v] :

si celle-ci est roug e,on perm utecet élémen ta veccel uid"indice u+1, et on incrémenteuetv;

si celle-ci est blanche, on incrémen tev; si celle-ci est roug e,on perm utecet élémen ta veccel uid"indice w1, et on décrémentew.

Traduit enPython, cela donne :

Corrigé des exercices3.5defdrapeau(t):

u, v, w =1, 0,len(t) whilev < w: c = t[v].couleur ifc =="rouge": t[u+1], t[v] = t[v], t[u+1] u += 1 v += 1 elifc =="bleu": t[v], t[w1] = t[w1], t[v] w= 1 else:

v += 1La terminaison de cette fonction est assurée par le fait que la valeur dewvdécroit d"une unité à chaque

itération. Exercice 8Observons la situation après la segmentation par un pivotp:p< p>pu Si k6u, lekeplus petit élément du tableau est à chercher entre les indices 0 etu1;

si k=u+1, lekeplus petit élément du tableau est l"élémentpqui a été pris pour pivot;

sik > u+1, lekeplus petit élément du tableau est aussi le(ku1)eélément du sous-tableau délimité par

les indicesu+1 etn1.

Ceci conduit à la fonction suivante (utilisant la fonctionsegmentedu cours) :defkieme(t, k,*args):

if len (args) == 0: i, j = 0,len(t) else: i, j = args u = segmente(t, i, j) ifk <= ui: returnkieme(t, k, i, u) elifk > ui + 1: returnkieme(t, ku+i1, u+1, j) else:

returnt[u]Le calcul de l"élément médian consiste à appliquer la fonction précédente aveck=dn=2e:defmedian(t):

k = (len(t) + 1) // 2 returnkieme(t, k)

Après avoir trié un tableau on peut déterminer en temps linéaire l"élément médian de ce dernier; l"algorithme

de tri rapide permet donc d"avoir un algorithme de coût semi-linéaire en moyenne (et quadratique dans le pire

des cas) pour calculer le médian. L"algorithme ci-dessus ne présente donc d"intérêt que s"il permet de faire

mieux.

NotonsC(n)le coûten moyennedu calcul dukeélément det. Le coût de la segmentation étant linéaire, on

dispose de la relation :

C(n) =1n

n X i=1maxC(i1);C(ni)+(n): Supposons l"existence d"une constante M telle que C(i)6Mipouri < n. Alors :

C(n)6Mn

n X i=1max(i1;ni)+(n)6(calcul)634

Mn+(n):

Jean-Pierre Becirspahic

3.6informatique communeIl suffit donc de choisirMassez grand pour queC(n)6Mn, ce qui prouve queC(n) = O(n). En moyenne, cet

algorithme calcule l"élément médian en temps linéaire.

Remarque

. En choisissant adroitement le pivot dans cet algorithme, il est possible de modifier cet algorithme

pour obtenir un algorithme de coût linéaire dans le pire des cas.

Exercice 9

a)

Trier 3 valeurs demande 3 comparaisons, doncup=c3pvérifie les relations :u0= 0etup= 3:3p1+up1, qui

se résolvent en :up=32 (3p1). Lorsquenest une puissance de 3, nous avons donccn=32 (n1). b)

Notonsmnle nombre d"éléments plus petits que le résultat donné par cet algorithme. Cette suite vérifie

les relations :m3= 1etm3p>2m3p1, doncm3p>2p= 3plog32. On en déduit que sinest une puissance de 3, mn>n, avec= log32.

On montre de même qu"il y a au moinsnéléments plus grands, ce qui prouve que cet algorithme détermine

un élément-pseudomédian avec= log32. c)

L"algorithme de tri rapide se révèle d"autant moins performant que la segmentation produit une partition

déséquilibrée du tableau. Calculer un élément-pseudomédian et s"en servir comme pivot de la segmentation

permet de s"assurer que chacun des deux sous-tableaux contiendra au moinsnéléments.

Tris de coûts linéaires

quotesdbs_dbs14.pdfusesText_20