Vous êtes sur la page 1sur 9

ListadeExercicios Ordenao (Loopinvarianteerecorrnicia) Questo 1 Usando o teorema mestre, resolva as recorrncias seguintes (a) T(n) = 13 * T(n/4) + f(n), onde

f(n) = n n (b) T(n) = 6 * T(n / 4) + f(n), onde f(n) = nlg(n3) + 5n (c) T(n) = 2 * T(n) + f(n), onde f(n) = 3 lg(n) + 5 (d) T(n) = 4 * T(n/5) + f(n), onde f(n) = n/5 + 3 lg(n) (e) T(n) = T(n) + 1 Questo2 ConsidereoalgoritmoALGOdedividireconquistaraseguir ALGO(A,n) 1.sen>1 2. ento dDIVIDIR(A,n) 3. parai1at4faa 4. ALGO(A,d) 5. fimpara 6. retornaCOMBINAR(A,n,d) 7. senoretornaNIL 8.fimse (a)ExibaaequaoderecorrnciasdotempodeexecuodeALGO. (b)Usandooteoremamestre,resolvaarecorrnciaobtidaem(a)sabendoque: dsempreigualan/8 otempodeexecuodeDIVIDIRnlgn otempodeexecuodeCOMBINARn+d Questo3 ConsidereoalgoritmoALGOdedividireconquistaraseguir ALGO(A,n) 1.sen>1 2. ento dDIVIDIR(A,n) 3. parai1at5faa 4. ALGO(A,d) 5. fimpara 6. retornaCOMBINAR(A,n,d) 7. senoretornaNIL

8.fimse DIVIDIR(A,n) 1.kn 2.enquantok>0faa 3. kndiv2 4. OUTRO(A,n,k) 5.fimenquanto 6.retornandiv4 (a)ExibaaequaoderecorrnciasdotempodeexecuodeALGO. (b)Usandooteoremamestre,resolvaarecorrnciaobtidaem(a)sabendoque: dsempreigualan/4 otempodeexecuodeOUTRO3 otempodeexecuodeCOMBINARn+d Questo 4 Construi a arvore de comparaes de Quick-Sort para n=3. Questo 5 Considereoseguintealgoritmo: Entrada:ninteiropositivo Sada:n3 Cubo(n) 1. i 1; j 1; k 1; 2. enquanto i <> n faa 3. k k + 3j + 3i + 1; 4. j j + 2i + 1; 5. ii+1 6. fim-enquanto 7. retorne k (a)Mostre,usandooprincipiodeinduo,queoloopinvariantedoenquanto: j=i2 e k=i3 (b)Concluidoitem(a)queoalgoritmoCubo(n)correto. Questo 6 Considere o algoritmo INSERTION-SORT em anexo. LOOP LOOP INVARIANTE Para (l.1 a l.10) Enquanto (l.5 a l.8) O vetor A[1 .. j 1] ordenado Os valores de A[i+1 .. j] so valores estritamente maiores que a chave e os dois primeiros valores so repetidos. (isto valido depois da primeira iterao,

LOOP

LOOP INVARIANTE de fato no inicio da primeira iterao A[i+1..j] = A[j] = chave.)

Supondo que o loop invariante do enquanto do algoritmo valido, mostre a corretude do loop invariante do para do algoritmo. Questo7 ConsidereoalgoritmoSORTaseguir SORT(A) 1.parai1atcomprimento[A]faa 2. paraji+1atcomprimento[A]faa 3. seA[j]A[j1] 4. entoA[j]A[j1] 5. fimse 6. fimpara 7.fimpara (a)QualoloopinvariantedosegundoloopparadoalgoritmoSORT? (b)QuaissoasdifernciaseassimilitudesentreoalgoritmoSORTeoalgoritmoMERGESORT.O algoritmoSORTestvel?Explique. Questo 8 Considere o seguinte algoritmo: /* p r */ SEPARA(A, p, r) 1. chave A[p] 2. ip 3. jr 4. para k p + 1 at r faa 5. se A[k] chave 6. ento B[i] A[k] 7. ii+1 8. seno B[j] A[k] 9. jj1 10. fim-se 11. fim-para 12. B[i] chave 13. para k p at r faa 14. A[k] B[k] 15. fim-para 16. retorna i Observao: No final do algoritmo, i = j e o vetor A da forma: p i chave chave r > chave

(a) Qual o loop invariante do primeiro loop para do algoritmo SEPARA? (b) Prove que o loop invariante do item (a) valido. (c) Use os item (a) e (b) para concluir sobre a correteza do algoritmo SEPARA. (d) Compare a eficincia do algoritmo SEPARA ao algoritmo PARTITION visto em classe. Qual voc escolheria e por qu? Questo 9 Enuncie os loop invariante do primeiro (l.1 a l.15) e segundo (l.4 a l.8) loop para do algoritmo SELEO-SORT. Questo 10 /* * Ordena os seguintes subvetores de A * A[t mod k], A[t mod k + k], ... , A[t k], A[t] */ InsertionSubSort(A, n, k) 1. para i k + l at n faa 2. chave A[i] 3. indice i k 4. enquanto indice 1 e chave < A[indice] faa 5. A[indice + k] A[indice] 6. indice indice k 7. fim-enquanto 8. A[indice+k] chave 9. fim-para /* * D um vetor estritamente decrescente D[1] > D[2] > ... > D[m] = 1 */ ShellSort(A, D) 1. n comprimento[A] 2. m comprimento[D] 3. para i l at m faa 4. InsertionSubSort(A, n, D[i]) 5. fim-para (a) Escreva o loop invariante do para (linhas 1 a 9) do algoritmo InsertionSubSort. (b) Supondo que o loop invariante do para valido na m-sima iterao do loop enquanto mostre que: Por m > 1 (entra pelo menos uma vez no loop), o loop invariante do enquanto (linhas 4 a 7), que no inicio da m-sima iterao: chave < A[indice+k] e A[indice+k] = A[indice+2k]. (c) Concluir, supondo que os loops invariantes do item (a) e (b) so corretos, a corretude do algoritmo InsertionSubSort (d) Mostre que ShellSort no estvel.

Questo 11 Considere o algoritmo HOARE-PARTITION(A, p, r) 1. chave A[p] 2. i p - 1 3. j r + 1 4. teste VERDADE 5. enquanto teste faa 6. jj1 7. enquanto A[j] > chave faa 8. jj1 9. fim-enquanto 10. ii+1 11. enquanto A[i] < chave faa 12. ii+1 13. fim-enquanto 14. se i < j 15. ento A[i] A[j] 16. seno teste FALSO 17. fim-se 18. fim-enquanto 19. retorna j (a) Enuncie os loop invariante do algoritmo HOARE-PARTITION. (b) Prove que o loop invariante do segundo enquanto do algoritmo valido. (c) Supondo que os loop invariante do segundo e do terceiro enquanto do algoritmo so validos, mostre a correteza do loop invariante do primeiro enquanto do algoritmo. (d) Use os itens (a) e (b) para concluir sobre a correteza do algoritmo HOARE-PARTITION, ou seja, retorna um ndice j tal que os valores de A[p .. j] so menores ou iguais a chave. e os valores de A[j + 1 .. r] so maiores ou iguais a chave. (e)OsvalorsdeA[j..i]nofinaldoalgoritmoHOAREPARTITIONsoiguaisachave? Questo12 ConsidereoalgoritmoNOTCOUNTINGSORTaseguir /*OsvaloresdeAsointeirosde1ak.Bovetorordenado.*/ NOTCOUNTINGSORT(A,k)

1.parai1atkfaa 2. C[i]0 3.fimpara 4.paraj1atcomprimento[A]faa 5. C[A[j]]C[A[j]]+1 6.fimpara 7.B[1]C[1] 8.parai2atkfaa 9. B[i]B[i1]+C[i] 10.fimpara 11.parai1atkfaa 12. B[i]B[i]C[i]+1 13fimpara 14.paraj1atcomprimento[A]faa 15. D[B[A[j]]]A[j] 16. B[A[j]]B[A[j]]+1 17.fimpara 18.parai1atcomprimento[A]faa 19. A[i]D[i] 20.fimpara (a)QualoloopinvariantedosegundoloopparadoalgoritmoNOTCOUNTINGSORT? (b)QualasdifernciaseassimilitudesentreoalgoritmoNOTCOUNTINGSORTeCOUNTINGSORT. OalgoritmoNOTCOUNTINGSORTestvel?Explique. (c)EscreveoalgoritmoEXISTENCIA(A,?,v)detempo(1)queutilisaumdosvetoresauxiliaresdo NOTCOUNTINGSORT.AsadadoalgoritmoverdadeiroseovalorapareceemAefalsoseno. Obs.:Ovalorvuminteirode1ak. Questo13 ConsidereoalgoritmoPESQUISAORDENADAaseguir /*Aumvetorordenado*/ PESQUISAORDENADA(A,v) 1.p1 2.rcomprimento[A] 3.medio(p+r)/2 4.enquantopreA[medio] vfaa 5. seA[medio]>v 6. ento rmedio1

7. seno pmedio+1 8. fimse 9. medio(p+r)/2 10.fimequanto 11.sepr 12. ento retornamedio 13. seno retornaNIL 14. fimse (a)ProvequeoseguinteloopinvariantedoenquantodoalgoritmoPESQUISAORDENADAvalido. SeovalorvaparecenovetorAnaposioi(i.eA[i]=v)entopir. Obs.:Sabemosqueseprentop(p+r)/2r. (b)Useoitem(a)paraconcluirsobreacorretezadoalgoritmoPESQUISAORDENADA,esdecir, retornaumnduceitalquev=A[i]ouovalorespecialNIL,sevnoapareceremA. Questo 14 (a) Mostre que o loop invariante do enquanto do algoritmo HEAP-INCREASE-KEY : No comeo de cada iterao, o arranjo A[1..t], onde t = tamanho-do-heap[A], satisfaz propriedade de heap mximo, a no ser pelo fato de que possvel haver uma violao: A[i] pode ser maior que A[PARENT(i)]. (b) Mostre a corretude do algoritmo HEAP-INCREASE-KEY usando o loop invariante do item anterior. Questo15 IlustrecadaumdosseguintesvetoresemformadeheapantesedepoisdachamadadeBUILDMAX HEAP(A). ExplicitacadachamadadeMAXHEAPIFYnodecorrerdeBUILDMAXHEAP(A)eparacada, ilustraapartedoheapondetevemodificaes. (a)o vetor dado por < 9, 3, 0, 1, 4, 5, 2, 6, 4>. (b) ovetordadopor<23,1,16,33,8,23,37,35,8,13>. (c)ovetordadopor<1,8,3,5,6,4,4,2,3,7>. Questo 16 Considere o vetor A dado por < 32, 15, 8, 16, 9, 10, 5, 20, 2, 9, 5, 3 >. (a) Represente este vetor sobre forma de heap (arvore). Ele satisfaz a propriedade do heap mximo? Se no, para qual ou quais n(s), ele no satisfaz a propriedade do heap mximo? (b) Enumere o mnimo de chamadas a MAX-HEAPIFY que preciso para que o heap dado no item (a)

satisfaz a propriedade do heap mximo. Estas chamadas produzem o mesmo heap que a chamada a BUILD-MAX-HEAP? (c) Ilustre o heap obtido antes e depois da primeira chamada do loop para de HEAPSORT(A). Questo 17 Escreve um algoritmo HEAP-MODIFY-KEY(A, i, chave) que modifica o valor do elemento de um heap mximo em posio i para o valor da chave. Explique brevemente a corretude de seu algoritmo e mencione qual seria a sua complexidade. Questo 18 \* * entrada: A um vetor tal que se existir os heaps enraizados nos filhos de i satisfazem a * propriedade de heap minimo. * sada: A um vetor tal que o heap enraizado em i satisfaz a propriedade do heap minimo *\ MIN-HEAPIFY(A, i) 1. l LEFT(i) 2. r RIGHT(i) 3. se l tamanho-do-heap[A] e A[l] < A[i] 4. ento menor l 5. seno menor i 6. fim-se 7. se r tamanho-do-heap[A] e A[r] < A[maior] 8. ento menor r 9. fim-se 10.se menor i 11. ento A[i] A[menor] 12. MIN-HEAPIFY(A, menor) 13.fim-se Propriedade do Heap minimo: A[PARENT(i)] <= A[i] Mostrar que a corretude do algoritmo MIN-HEAPIFY. Questo 19 (a) Prove a corretude do algoritmo TREE-INCREASE-KEY (b) Supondo que os algoritmos so implementados em arvores balanceadas, discute as diferencias entre os algoritmos TREE-INCREASE-KEY e TREE-CHANGE-KEY. Questo 20 (a) Elaborar um algortimo recursivo para TREE-MINIMUM (b) Provar que o loop invariante do enquanto da verso iterativa de TREE-MINIMUM O menor elemento da arvore enraizada no n inicial x_0 = x pertence a arvore enraizada no n x Observe que x_0 um n fixo enquanto o n x varia a cada iterao do loop.

(c) Enuncie o loop invariante do enquanto de TREE-SUCCESSOR

Vous aimerez peut-être aussi