Centrale Informatique MP 2012 — Énoncé 1/3
2012
Informatique
MP
4heuresCalculatricesautorisées
Les candidatsindiqueronten têtedeleurcopielelangage deprogrammationchoisi(PascalouCaml).Les
candidatsayantchoisiCamldevrontdonner letypedechaquefonctionécrite, lorsque celui-ci n’estpasimposé.
Les candidatstravaillanten Pascalpourrontécriredes fonctionsoudes procédures.
Choixdupivotdans letrirapide
L’objetde ce problème estle choixd’un pivot dansl’algorithmedu trirapide.Ons’intéresseau trienordre
croissantd’un tableau d’entiersquipourront toujoursêtresupposésdistincts.
EnPascal,on disposedu typetableau suivant:
const long_tab =1000;
type tableau =array[0..long_tab-1] of integer;
La longueurtdestableauxavec lesquelson travailledevradonc êtremajorée par long_tab etlesdonnées sont
alorsprésentesdanslazoneindexée par 06i6t−1.Cettelongueurutiletdevradonc être éventuellement
donnée en paramètre.
EnCaml,on rappellequelalongueurd’un tableau estdonnée par vect_length enCaml lightetArray.length
enOcaml.
ITrirapided’un tableau
I.A–Écrireunefonction/procédureechange réalisantl’échange dedeuxélémentsd’un tableau.
echange :int -> int -> int vect -> unit =<fun>
procedure echange(i, j : integer ;var t : tableau);
I.B–Décrireun algorithmesimpledetri ; évaluersacomplexitédanslepiredescas entermesde compa-
raisons.Le programmer.
I.C–L’algorithmedu trirapidesurun tableau consiste en unepremière étapeoù on permuteleséléments
du tableau desortequelesélémentspluspetits(respectivementplusgrands)qu’un pivot psoientplacésavant
(respectivementaprès)cetélémentpdansletableau.Onexécute ensuiterécursivementletrirapidesurlesdeux
partiesdu tableau ainsiséparéespar p.
Par exemple, letableau [|19;7; 17; 14; 22; 5; 26; 21; 2; 12|]devientaprèslapremière étape(sion choisit19 comme
pivot):[|2; 7; 17; 14; 12; 5; 19;21; 26; 22|].Notonsquelesélémentsinférieurs(respectivementsupérieurs)à19
peuventêtrepermutésentre eux.Le pointcrucial estqu’ils soientsituésavant (respectivementaprès)19 dans
letableau.
Un desintérêtsimportantsde cetalgorithme estqu’il peutêtreréalisé en place: letableau neserajamais
recopié.Pourcela, lesappelsrécursifsprendrontcommeargumentslesindicesdélimitantlapartieàtrier.
I.C.1) Expliquercommenton peutréaliseren placelaphasedeséparation du tableau entempsO(n),avec
nlalongueur(nombred’éléments)du (sous-)tableau àtraiter.
I.C.2) Écrireunefonction separation prenantenentrée un vecteurvetdeuxindicesi1eti2(avec 06i1<
i26t−1,condition queleprogrammen’aurapas àvérifier),ayantpourfonction deséparerlesous-tableau
v[i1+1..i2]selon lepivot p=v(i1),etretournantl’indice du tableau correspondantàlaposition depdans
vaprès séparation.Dansl’exempleprécédent, l’appelseparation v0 0 9 (Caml)ou separation(v0,0,9)
(Pascal)retournel’indice 6etlevecteurv0aétémodifié.
separation: ’a vect -> int -> int -> int =<fun>
function separation(var v: tableau ;i1, i2: integer): integer;
I.C.3) Écrireunefonction tri_rapide réalisantletrid’un vecteur/tableau enappliquantl’algorithmedécrit
plushaut.
II Étudedecomplexité
Ons’intéressemaintenantàlacomplexitédu trirapidedansdeuxcas particuliers.
II.A–Donnerun ordredegrandeurdu nombrede comparaisonseffectuéeslorsqueletableau estdéjàtriédans
l’ordre croissant (respectivementdécroissant).Sansforcémentdonnerun équivalentde ce nombrede comparaison
C(n),on donnera(enjustifiant) unevaleursimplev(n)tellequeC(n)=O(v(n)) etv(n)=O(C(n)).
Téléchargé gratuitement sur www.Doc-Solus.fr .
Centrale Informatique MP 2012 — Énoncé 2/3
II.B–Onsupposeiciquelorsd’une exécution du trirapide,chaqueséparation du tableau acoupéletableau
en deuxpartségales.
II.B.1) Montrerqu’un majorantraisonnabledu nombrede comparaisonseffectuéespourtrierun tableau de
taillenvérifieunerelation delaformeM(2n)=2M(n)+αn.
II.B.2) Donner(enfonction den)lavaleurdeM(n)lorsquenestdelaforme2kavec k∈N.
II.B.3) On nesupposeplus, ici, quenestdelaforme2k.Montrerque,sion supposeque(M(n))n∈Nest
croissante,alorsM(n)=O(nlnn).
III Recherched’unepseudomédiane
Cequiprécèdesuggèrequele choixd’un pivot « prochedelamédiane» permetd’améliorerlesperformances
du trirapide.Ilexisteun algorithmepermettantdetrouvercettemédiane en un tempslinéaire enlatailledu
tableau,maiscetalgorithmedifficileneserapas discutéici. Unefaçon simplepourluttercontrelepiredescas
consisteàchoisirlepivot defaçon aléatoire,maislegainobtenu estrelativementsubtil etlepiredescas reste
quadratique.Uneméthodeintermédiaire consisteàrechercherune« pseudomédiane».
Lorsqueα∈]0,1[,uneα-pseudo médianed’un tableau estunevaleurprésentedansletableau tellequ’au moins
K1nα(respectivementK2nα)élémentsdu tableau luisontinférieurs(respectivementsupérieurs),avec K1et
K2deuxconstantes strictementpositives.
Pourun tableau detaillen=3k,on utiliseral’algorithmederecherched’unepseudomédianesuivant:
−sik=0,on retournedirectementleseulélémentconsidéré;
−sinon,on regroupelesélémentsdu tableau par 3,on calculeles3k−1médianesde cesgroupes,puison
appliquerécursivementl’algorithmeàces3k−1valeurs.
DanslesquestionsIII.AetIII.B,on admetque cetalgorithmepermetle calculd’unepseudomédiane eton
proposedelemettre enœuvrededeuxmanièresdifférentes.
Onrappellequelesdifférentsélémentsdu tableau pourrontêtresupposésdistincts.
III.A–Dans untableau,enplace
III.A.1) Écrireunefonction prenantenentrée un tableau et troisindicesdistinctsetretournantlaposition de
lamédiane,parmi lestroisélémentsdu tableau donton adonnélesindices.
III.A.2) Écrireunefonction calculantunepseudomédiane.Cettefonction travailleraobligatoirementdansle
tableau initial,sansencréerdenouveau,etenmaintenantglobalementinvariantl’ensembledesvaleursprésentes
dansletableau.
On pourrasupposerletableau detaille3k,placerdansunepremière étapelesmédianesdeblocsde
troisen positions3i,puisprendrelesmédianesde cesmédianesetlesplaceren position 9i,etc.
III.B–Àl’aided’unarbreternaire
On proposede construireun arbreternaire: lesfeuilles sontétiquetéespar lesentréesdu tableau etchaque
nœud interne estlamédianedesesfils.La figure1montrel’arbre construitsurletableau [7; 1; 4; 9; 8; 5; 3; 2; 6].
4
4
7 1 4
8
9 8 5
3
3 2 6
Figure1
EnCaml:
type ternaire=F of int | N of int*ternaire*ternaire*ternaire;;
let racine=function F(x)->x | N(x,_,_,_)->x;;
EnPascal :
type
Arbre = ^Noeud;
Noeud = record
racine: integer;
fg, fm, fd: Arbre;
end;
Téléchargé gratuitement sur www.Doc-Solus.fr .
Centrale Informatique MP 2012 — Énoncé 3/3
III.B.1) Écrireunefonction calculantlamédianedetroisentiersdistincts.
mediane3 :int *int *int -> int = <fun>
function mediane3(i1, i2, i3 : integer) :integer;
III.B.2) Écrireunefonction prenantenentrée troisarbresternairesetretournantl’arbreternairedontlaracine
estétiquetée par lamédianedestroisracinesdesarbresdonnésenentrée etapourfilscestroisarbres.
III.B.3) Écrireunefonction récursive construisantl’arbreternaireassociéàun sous-tableau detaille3k.En
Caml, construire t i j retournel’arbredu sous-tableau t[i..j].Même chose enPascal avec construire(t,i,j)
construire : int vect -> int -> int -> ternaire = <fun>
function construire(t: tableau ; i, j: integer): Arbre;
III.B.4) Écrireunefonction calculant,àl’aided’un arbreternaire,unepseudomédianed’un tableau (dontla
longueurpourraêtresupposée delaforme3k).
III.C–Étudethéoriquedel’algorithme
III.C.1) Donnerun ordredegrandeurdu tempsd’exécution del’algorithmede calculd’unepseudomédiane.
III.C.2) Sik=1, lavaleur retournée estexactementlamédianedu tableau.Montrerquepourk>2, il existe
au moins2kélémentsdu tableau quisontmajorés(au senslarge)par lavaleur retournée.
III.C.3) Montrerquepourtoutk>2, il existeun tableau pourlequel il yaexactement2kélémentsdu tableau
quisontmajorés(au senslarge)par lavaleur retournée.
III.C.4) Prouverque cetalgorithmepermetde calculeruneα-pseudomédiane,avec α=ln2/ln3.
III.C.5) Expliquercommentadapterl’implémentation del’algorithmesi letableau aunelongueurquin’est
pas unepuissance de3?
III.D–Extensions duprincipedel’algorithme
III.D.1) Sion modifiel’algorithme enconsidérantdesblocsde5élémentsplutôt que3,quedire(ensupposant
quelalongueurdu tableau estunepuissance de5)du résultat retourné etdu tempsde calculde ce nouvel
algorithme?
III.D.2) Montrerquepourtoutε>0, il existeun algorithmes’exécutanten un coûtlinéaire etpermettantde
calculerune(1−ε)-pseudomédianed’un tableau.
IVGainapportépar lapseudomédiane
Ons’intéresse enfin au gainqu’apportel’utilisation depseudomédianesdansletrirapide.Onsupposeici(sauf
àladernièrequestion)queletrirapide estexécuté en utilisantàchaque étapeune1/2-pseudomédiane.Ici
encore,uneanalyseprécise etrigoureusedelacomplexité estdélicate,maison souhaiteobtenirune évaluation
defaçon raisonnablementconvaincante.
On noteC(n)letempsde calculdanslepiredescas pourappliquerletrirapideavec une1/2-pseudomédiane.
Danscette évaluation en premièreapproximation,on s’autoriseàécrireC(x)mêmelorsquexn’estpas entier:
ce seraun raccourcipourC(⌈x⌉),avec ⌈x⌉la« partie entièresupérieuredex».
IV.A–JustifierqualitativementlefaitqueCvérifieuneinégalitédelaforme
C(n)6C(n−√n)+Kn
IV.B–MontrerqueC(n)=C(n/2) +O(n3/2).
On pourraétudierlasuitedéfinieparα0=netαk+1 =αk−√αksiαk>1(etαk+1 =0sinon):
établirparexemplequeαk6n/2sik>ðn/2.
IV.C–Conclure.
IV.D–Quepeut-on raisonnablementespérercomme complexitédanslepiredescas,pourun trirapide
effectué encalculantuneln2/ln3-pseudomédianeavec l’algorithmedelapartieIII?
• • • FIN• • •
Téléchargé gratuitement sur www.Doc-Solus.fr .
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!