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 nestpasimposé.
Les candidatstravaillanten Pascalpourrontécriredes fonctionsoudes procédures.
Choixdupivotdans letrirapide
L’objetde ce problème estle choixdun pivot dansl’algorithmedu trirapide.Ons’intéresseau trienordre
croissantdun tableau dentiersquipourront 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 06i6t1.Cettelongueurutiletdevradonc être éventuellement
donnée en paramètre.
EnCaml,on rappellequelalongueurdun tableau estdonnée par vect_length enCaml lightetArray.length
enOcaml.
ITrirapidedun tableau
I.AÉcrireunefonction/produreechange réalisantl’échange dedeuxélémentsdun tableau.
echange :int -> int -> int vect -> unit =<fun>
procedure echange(i, j : integer ;var t : tableau);
I.BDécrireun algorithmesimpledetri ; évaluersacomplexitédanslepiredescas entermesde compa-
raisons.Le programmer.
I.CL’algorithmedu trirapidesurun tableau consiste en unepremière étapeoù on permuteleséléments
du tableau desortequelesélémentspluspetits(respectivementplusgrands)quun 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<
i26t1,condition queleprogrammenaurapas àvérier),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émodié.
separation: ’a vect -> int -> int -> int =<fun>
function separation(var v: tableau ;i1, i2: integer): integer;
I.C.3) Écrireunefonction tri_rapide réalisantletridun vecteur/tableau enappliquantl’algorithmedécrit
plushaut.
II Étudedecomplexité
Ons’intéressemaintenantàlacomplexitédu trirapidedansdeuxcas particuliers.
II.ADonnerun ordredegrandeurdu nombrede comparaisonseectuéeslorsqueletableau estdéjàtriédans
l’ordre croissant (respectivementdécroissant).Sansformentdonnerun équivalentde ce nombrede comparaison
C(n),on donnera(enjustiant) 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.BOnsupposeiciquelorsdune exécution du trirapide,chaqueséparation du tableau acoupéletableau
en deuxpartségales.
II.B.1) Montrerquun majorantraisonnabledu nombrede comparaisonseectuéespourtrierun tableau de
taillenvérieunerelation delaformeM(2n)=2M(n)+αn.
II.B.2) Donner(enfonction den)lavaleurdeM(n)lorsquenestdelaforme2kavec kN.
II.B.3) On nesupposeplus, ici, quenestdelaforme2k.Montrerque,sion supposeque(M(n))nNest
croissante,alorsM(n)=O(nlnn).
III Recherchedunepseudomédiane
Cequiprécèdesuggèrequele choixdun pivot « prochedelamédiane» permetdaméliorerlesperformances
du trirapide.Ilexisteun algorithmepermettantdetrouvercettemédiane en un tempslinéaire enlatailledu
tableau,maiscetalgorithmedicileneserapas discutéici. Unefon simplepourluttercontrelepiredescas
consisteàchoisirlepivot defon aléatoire,maislegainobtenu estrelativementsubtil etlepiredescas reste
quadratique.Uneméthodeintermédiaire consisteàrechercherune« pseudomédiane».
Lorsqueα]0,1[,uneα-pseudo médianedun tableau estunevaleurprésentedansletableau tellequau moins
K1nα(respectivementK2nα)élémentsdu tableau luisontinférieurs(respectivementsupérieurs),avec K1et
K2deuxconstantes strictementpositives.
Pourun tableau detaillen=3k,on utiliseral’algorithmederecherchedunepseudomédianesuivant:
sik=0,on retournedirectementleseulélémentconsidéré;
sinon,on regroupelesélémentsdu tableau par 3,on calculeles3k1médianesde cesgroupes,puison
appliquerécursivementl’algorithmeàces3k1valeurs.
DanslesquestionsIII.AetIII.B,on admetque cetalgorithmepermetle calculdunepseudomédiane eton
proposedelemettre enœuvrededeuxmanièresdiérentes.
Onrappellequelesdiérentsélémentsdu tableau pourrontêtresupposésdistincts.
III.ADans 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Àlaidedunarbreternaire
On proposede construireun arbreternaire: lesfeuilles sontétiquetéespar lesentréesdu tableau etchaque
nœud interne estlamédianedesesls.La gure1montrel’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 etapourlscestroisarbres.
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’aidedun arbreternaire,unepseudomédianedun tableau (dontla
longueurpourraêtresupposée delaforme3k).
III.CÉtudethéoriquedelalgorithme
III.C.1) Donnerun ordredegrandeurdu tempsdexécution del’algorithmede calculdunepseudomé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 aunelongueurquinest
pas unepuissance de3?
III.DExtensions duprincipedelalgorithme
III.D.1) Sion modiel’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 algorithmesexécutanten un ctlinéaire etpermettantde
calculerune(1ε)-pseudomédianedun tableau.
IVGainapportépar lapseudomédiane
Ons’intéresse enfin au gainquapportel’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
defon raisonnablementconvaincante.
On noteC(n)letempsde calculdanslepiredescas pourappliquerletrirapideavec une1/2-pseudomédiane.
Danscette évaluation en premièreapproximation,on sautoriseàécrireC(x)mêmelorsquexnestpas entier:
ce seraun raccourcipourC(x),avec xla« partie entièresupérieuredex».
IV.AJustierqualitativementlefaitqueCvérieuneinégalitédelaforme
C(n)6C(nn)+Kn
IV.BMontrerqueC(n)=C(n/2) +O(n3/2).
On pourraétudierlasuitedénieparα0=netαk+1 =αkαksiαk>1(etαk+1 =0sinon):
établirparexemplequeαk6n/2sik>ðn/2.
IV.CConclure.
IV.DQuepeut-on raisonnablementespérercomme complexitédanslepiredescas,pourun trirapide
eectué 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 linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !