• Aucun résultat trouvé

1Dénombrement(2pts) Consignes Examend’algorithmique

N/A
N/A
Protected

Academic year: 2022

Partager "1Dénombrement(2pts) Consignes Examend’algorithmique"

Copied!
6
0
0

Texte intégral

(1)

Examen d’algorithmique

EPITA ING1 2013 S1; A. DURET-LUTZ

Durée : 1 heure 30 Janvier 2011

Nom : Prénom :

Consignes

– Cet examen se déroulesans documentetsans calculatrice.

– Répondez sur le sujet dans les cadres prévus à cet effet.

– Il y a 5 pages d’énoncé, et une page d’annexe.

Rappelez votre nom en haut de chaque feuilleau cas où elles se mélangeraient.

– Ne donnez pas trop de détails. Lorsqu’on vous demande des algorithmes, on se moque des points- virgules de fin de commande etc. Écrivez simplement et lisiblement. Des spécifications claires et implémentables sont préférées à du code C ou C++ verbeux.

– Le barème est indicatif et correspond à une note sur 25.

1 Dénombrement (2 pts)

for (int i = 0; i <= N; i += 2) for (int j = i; j > 0; --j)

puts("x");

Combien de fois le programme ci-dessus affiche-t-il"x"? Donnez votre réponse en fonction deN en distinguant le cas oùNest pair de celui oùNest impair.

Réponse :

(2)

2 Ordres de grandeur (2 pts)

Lesquelles de ces affirmations sont vraies ?

(√n

)nO(nn) nnO((√n

)n)

(√n

)n(nn) nn((√n

)n)

nnΘ((√n )n) log2(n!) ∈ Θ(nlnn)

log2(n!)∈ O(nlogn) log2(n!)∈ (nn)

3 File de Priorité à double entrée (6 pts)

Une file de priorité à double entrée est un type de données abstrait représentant un ensemble de valeurs supportant les opérations suivantes :

– x←FINDMAX(S) retourne la valeur maximale deS

– DELETEMAX(S) retire la valeur maximale deS(cela inclut la recherche de cette valeur) – x←FINDMIN(S) retourne la valeur minimaleS

– DELETEMIN(S) retire la valeur minimale de S(cela inclut la recherche de cette valeur) – INSERT(S,x) insère la valeurxdansS

Une telle interface peut être implémentée sur plusieurs structures de données. Indiquez la complexité de ces cinq opérations sur chacune des structures de donnéees proposées dans le tableau suivant. Uti- lisez les notationsΘet O de façon précise, et en fonction du nombrend’éléments présents dans la file de priorité.

FINDMAX DELETEMAX FINDMIN DELETEMIN INSERT

Un tableau non trié Θ(n) Θ(n) Θ(n) Θ(n) Θ(1)

Un tableau circulaire trié

(valeurs croissantes) Θ(1) Θ(1) Θ(1) Θ(1) O(n) Une liste simplement chaînée

triée (valeurs croissantes) sans pointeur sur la queue

Θ(n) Θ(n) Θ(1) Θ(1) O(n) Une liste doublement chaînée,

circulaire et triée Θ(1) Θ(1) Θ(1) Θ(1) O(n)

Un tas “max” (c’est-à-dire dont chaque nœud est plus grand que ses fils)

Θ(1) O(logn) Θ(n) Θ(n) O(logn) Un tas “min” (c’est-à-dire dont

chaque nœud est plus petit que ses fils)

Θ(n) Θ(n) Θ(1) O(logn) O(logn) Un tas “min” et un tas “max”

maintenus en parallèle (inser- tion et suppression des valeurs se font dans les deux tas)

Θ(1) Θ(n) Θ(1) Θ(n) O(logn)

Une arbre rouge et noir Θ(logn) Θ(logn) Θ(logn) Θ(logn) Θ(logn)

(3)

4 Tas Min-Max (10 pts)

UnTas Min-Maxest une structure de donnée hybride entre leTas Minet leTas Max. Plus précisément, il s’agit d’un arbre binaire parfait dans lequel :

– les nœuds à un niveaupairsont pluspetitsque leurs descendants (directs ou indirects), et – les nœuds à un niveauimpairsont plusgrandsque leurs descendants (directs ou indirects).

Voici un exemple de tas min-max :

5

65 80

25 37 8 15

57 36 45 59 20 14 42 18

28 30 34 27 39

niveau 0 (min) niveau 1 (max) niveau 2 (min) niveau 3 (max) niveau 4 (min)

Constatez que la racine possède forcément la valeur minimale du tas, et que la valeur maximale est forcément l’un des deux fils de la racine (ou la racine elle-même si elle n’a pas de fils).

L’arbre étant parfait, il sera représenté et manipulé sous la forme d’un tableau : 5

1

65

2

80

3

25

4

37

5

8

6

15

7

57

8

36

9

45

10

59

11

20

12

14

13

42

14

18

15

28

16

30

17

34

18

27

19

39

20

Les fils du nœud d’indicei se trouvent aux positions LEFTCHILD(i)= 2i et RIGHTCHILD(i)= 2i+1 lorsqu’elles existent. Le père est à la position PARENT(i)=bi/2csi elle existe.

1. (2 pts) Écrivez une fonction ISONMINLEVEL(A,i) qui décide en temps constant si l’indicei cor- respond à un nœud se trouvant sur un niveau pair (ou niveau “min”) du tas min-max représenté par le tableau A. Les indices dans Acommencent à 1 et vous pouvez supposer que le calcul d’un logarithme se fait un temps constant.

Réponse :

Les algorithmes sur lestas min-maxsont similaires aux algorithmes sur lestas maxvus en cours.

La procédure HEAPIFY(A,i), prend un nœud d’indiceidont les deux sous-arbres vérifient la propriété de tas, et fait redescendre la valeur A[i] dans l’un des sous-arbres afin que la propriété du tas soit vérifiée à partir de l’indice i. Dans le cas des tas min-max, cette procédure est obligée de distinguer entre les niveauxminet les niveauxmaxcomme suit :

(4)

HEAPIFYMIN(A,i)

ifA[i]has childrenthen

m ←index of the smallest of the children and grandchildren (if any) of A[i] if A[m] <A[i]then

A[m]↔ A[i]

if A[m]is a grandchild of A[i]then

ifA[m]> A[PARENT(m)]thenA[m]↔ A[PARENT(m)]

HEAPIFYMIN(A,m)

La procédure HEAPIFYMAXest identique à HEAPIFYMINen changeant le sens des comparaisons et en définissantmcomme l’indice du plus grand des fils et petits-fils.

2. (2 pts)Donnez la complexité en pire cas de HEAPIFYen fonction du nombre nde valeurs conte- nues dans A. Justifiez votre réponse.

Réponse :

Supprimer la plus petite valeur (la racine) ou la plus grande valeur (l’un de ses fils s’ils existent) d’un tas min-maxse fait comme sur les tas classiques en remplaçant cette valeur par la dernière du tableau (dont on réduit la taille de 1) et en appelant HEAPIFYsur le nœud dont la valeur vient d’être modifiée.

3. (3 pts)Écrivez la procédure DELETEMAX(A) qui supprime la valeur maximale dutas min-maxre- présenté par le tableauA. Vous pouvez supposer que le tableau possède un champA.sizedonnant sa taille, et que cette procédure n’est jamais appelée sur un tableau vide.

Réponse :

(5)

4. (1 pt)Quelle est la complexité de la procédure précédente en fonction de la taillendu tableauA? (Vous pouvez exprimer cette complexité en fonction de la complexité H(n) de HEAPIFY si vous n’avez pas répondu à la question 2.)

Réponse :

5. (2 pts)Donnez le contenu du tableau Ade l’exemple aprèsdeuxappels à DELETEMAX(A).

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Nous ne traitons pas l’insertion dans cet examen, mais la procédure est semblable à celle d’un tas classique : on ajoute en feuille puis on fait remonter la valeur pour respecter les contraintes.

5 Diviser pour régner (5 pts)

Soit un gros problème de taillen, assez compliqué pour que vous n’ayez pas envie d’en connaître les détails. Pour résoudre ce problème, on vous propose trois algorithmes :

L’algorithme A résout le problème en le divisant en 5 sous-problèmes de taille n/2, en résolvant ces cinq sous problèmes récursivement, puis en combinant les solutions en temps linéaire.

L’algorithme B résout le problème en résolvant récursivement deux problème de taille n−1 puis en combinant leurs solutions en temps constant.

L’algorithme C résout le problème en le divisant en 9 sous-problèmes de taille n/3, en résolvant ces neuf sous-problèmes récursivement, puis en combinant les solutions en Θ(n2).

Dans les trois cas, le découpage du problème en sous-problèmes se fait en temps constant.

Calculez la complexité de chacun de ces algorithmes.

Réponse :

(6)

Notationsasymptotiques

O(g(n))={f(n)|∃cR+?,n0N,nn0,0f(n)cg(n)}(g(n))={f(n)|∃cR+?,n0N,nn0,0cg(n)f(n)}Θ(g(n))={f(n)|∃c1R+?,c2R+?,n0N,nn0,0c1g(n)f(n)c2g(n)} limn f(n)g(n) =g(n)O(f(n))etf(n)6∈O(g(n))f(n)O(g(n))g(n)(f(n)) limn f(n)g(n) =0f(n)O(g(n))etg(n)6∈O(f(n))f(n)Θ(g(n)) (f(n)(g(n))g(n)(f(n)) limn f(n)g(n) =cR+?f(n)Θ(g(n))

Ordresdegrandeurs

constanteΘ(1)logarithmiqueΘ(logn)polylogarith.Θ((logn)c)c>1Θ( n)linéaireΘ(n)Θ(nlogn)quadratiqueΘ(n2)Θ(nc)c>2exponentielleΘ(cn)c>1factorielleΘ(n!)Θ(nn)Identitésutiles

nk=0 k= n(n+1)2nk=0 xk= xn+11x1 six6=1

k=0 xk= 11x si|x|<1

k=0 kxk= x(1x)2si|x|<1

nk=1 1k =Θ(logn)

n!= 2πn ne n 1+Θ 1n Théorèmegénéral

SoitàrésoudreT(n)=aT(n/b)+f(n)aveca1,b>1

Sif(n)=O(nlogbaε)pourunε>0,alorsT(n)=Θ(nlogba).Sif(n)=Θ(nlogba),alorsT(n)=Θ(nlogbalogn).Sif(n)=(nlogba+ε)pourunε>0,etsiaf(n/b)cf(n)pourunc<1ettouslesnsuffisammentgrands,alorsT(n)=Θ(f(n)).(Note:ilestpossibleden’êtredansaucundecestroiscas.)

DéfinitionsdiversesLacomplexitéd’unproblèmeestcelledel’algo-rithmeleplusefficacepourlerésoudre.Untristablepréservel’ordrerelatifdedeuxélémentségaux(ausensdelarelationdecomparaisonutiliséepourletri).Untrienplaceutiliseunemémoiretemporairedetailleconstante(indépendanteden). Arbres

feuilles(f) nœudsinternes(ni)x profondeurdexhauteurdel’arbre(h)(nœudsn=ni+f) Pourtoutarbrebinaire:n2h+11hdlog2(n+1)1e=blog2ncsin>0f2hhdlog2fesif>0f=ni+1(sil’arbreestcomplet=lesnœudinternesonttous2fils)

Dansunarbrebinaireéquilibréunefeuilleestsoitàlaprofondeurblog2(n+1)1csoitàlaprofondeurdlog2(n+1)1e=blog2nc.Pourcesarbresh=blog2nc.Unarbreparfait(=complet,équilibré,avectouteslesfeuillesdudernierniveauàgauche)étiquetépeutêtrereprésentéparuntableau.a be cdf abecdf

12345678 Lesindicessontreliéspar:Père(y)=by/2cFilsG(y)=y×2FilsD(y)=y×2+1RappelsdeprobabilitésEspéranced’unevariablealéatoireX:C’estsavaleurattendue,oumoyenne.E[X]=x Pr{X=x}

Variance:Var[X]=E[(XE[X])2]=E[X2]E2[X]Loibinomiale:Onlancenballonsdansrpaniers.Leschutesdanslespanierssontéquiprobables(p=1/r).OnnoteXilenombredeballonsdanslepanieri.OnaPr{Xi=k}=Cknpk(1p)nk.OnpeutmontrerE[Xi]=npetVar[Xi]=np(1p). Tas

Untasestunarbreparfaitpartiellementordonné:l’étiquetted’unnœudestsupérieureàcellesdesesfils.

Danslesopérationsquisuiventlesarbresparfaitssontplusefficacementreprésentéspardestableaux.

Insertion:ajouterl’élémentàlafindutas,l’échangeravecsonpèretantqu’illuiestinférieur(enremontantverslaracine).Tinsert=O(logn) 18

1211

61094

23813 ?

? 18

1311

61294

23810

Suppressiondelaracine:laremplacerparlederniernœud;l’échangeravecsonplusgrandfilstantquecelui-ciestplusgrand.Trem=O(logn) 18

1311

61294

23810 10

1311

61294

238 ? ?13

1211

61094

238

Construction:interpréterletableaucommeuntas(incorrect)puisrétablirl’ordreenpartantdesfeuilles(vuescommedestascorrects).Tbuild=Θ(n) 8

103

1221118

496 ?? ? 8

1018

126113

492 ? ? 8

1218

106113

492 ?

? ?

ArbresRougeetNoir

LesARNsontdesarbresbinairesderecherchedanslesquels:(1)unnœudestrougeounoir,(2)racineetfeuilles(NIL)sontnoires,(3)lesfilsd’unnœudrougesontnoirs,et(4)touslescheminsreliantunnœudàunefeuille(desesdescendants)contiennentlemêmenombredenœudsnoirs(=lahauteurnoire).Cespropriétésinterdisentuntropfortdéséquilibredel’arbre,sahauteurresteenΘ(logn).

Insertiond’unevaleur:insérerlenœudaveclacouleurrougeàlapositionqu’ilauraitdansunarbrebinairederechercheclassique,puis,silepèreestrouge,considérerlestroiscassuivantsdansl’ordre.Cas1:Lepèreetl’oncledunœudconsidérésonttouslesdeuxrouges.Répétercettetransformationàpar-tirdugrand-pèresil’arrièregrand-pèreestaussirouge.

Cas2:Silepèreestrouge,l’onclenoir,etquelenœudcourantn’estpasdansl’axepère–grand-père,unerotationpermetd’alignerfils,père,etgrand-père.

Cas3:Silepèreestrouge,l’onclenoir,etquelenœudcourantestdansl’axepère–grand-père,unro-tationetuneinversiondecouleursrétablissentlespropriétésdesARN. (Danstouscescas,leslettresgrecquesreprésententdessous-arbresaveclamêmehauteurnoire.) C

AD

Bα

βγ δε C

AD

Bα

βγ δε inverserlescouleursdeA,CetD(cas1)

C

Aδ

Bα

βγ C

Bδ

Aγ

αβ B

AC

αβγδ rotation(cas2) rotation+inv.coul.BetC(cas3)

Références

Documents relatifs

[r]

[r]

Am´eliorations possibles : g´eom´etriquement, ce qui se passe est tr`es clair : par exemple si la plus grande valeur propre est de module sup´erieur ` a 1, quand on it`ere un

[r]

E 1 Puce reçoit une première liste de 2019 entiers compris entre 0 et n qu’il doit recopier sur une même colonne puis en face de chaque entier il doit écrire sur une

On doit donc avoir 13 premiers distincts (ou une de leurs puissances), dont on prend les 13 qui minimisent l'écart entre le plus petit et le

Les sommes des deux entiers contenus dans tous les dominos, horizontaux ou verticaux, constitués de deux cases adjacentes sont toutes différentes.. Déterminer en fonction de n la

Nous avons donné ici les idées d’une méthode d’étude des plus grandes valeurs propres dans le cas général de matrices aléatoires complexes. Des petites modifications sont