Projeto e Análise de Algoritmos Aula de Exercícios - 1 Prof. André Amaral Página 1 de 3 1. Mostrar que 1 2 n − 3n é Θ(n2). 2 2. Mostrar que f(n) = 37n 2 + 120n + 17 é O( g(n) ) , onde g(n) = n3 . 3 3. A fim de analisar um algoritmo, pode-se concentrar em uma operação fundamental para o problema estudado denominada operação básica. Desta forma, ignoram-se as inicializações, os controles de laço e conta-se apenas o número de operações básicas realizadas. Desde que as operações básicas sejam bem escolhidas, e o numero total de operações realizadas seja aproximadamente proporcional ao número de operações básicas, teremos nas operações básicas uma boa medida do trabalho realizado por um algoritmo. Para cada problema abaixo, faça uma escolha razoável para a operação básica a ser realizada. a) Encontrar um nome x em uma lista de nomes. b) Multiplicar duas matrizes contendo valores iguais. c) Ordenar uma lista de números. 4. Considere um vetor A contendo n valores. O algoritmo de pesquisa linear, apresentado abaixo, encontra o índice de um valor v especificado, se v estiver no vetor. Retorna zero se v não estiver no vetor. Entrada: Uma seqüência de n números A= < a1, a2,.., an > e um valor v. Saída: Um índice i tal que v= A[i] ou zero se v não está presente em A. 1. index Å 1 2. enquanto index ≤ n e A[index] ≠ v faça 3. index Å index + 1 4. fim {enquanto} 5. se index > n então index Å0 a) Qual seria uma escolha razoável para a operação básica realizada? b) Qual o número máximo de operações básicas realizadas pelo algoritmo? c) Determine o número de operações básicas realizadas em média pelo algoritmo.(Suponha que (i) sabemos que v está na lista; (ii) Qualquer posição na lista é igualmente provável para v; (iii) Os elementos de A são distintos). Projeto e Análise de Algoritmos Aula de Exercícios - 1 Prof. André Amaral Página 2 de 3 5. Considere o algoritmo abaixo: Entrada: Um vetor contendo n números A= < a1, a2,.., an >. Saída: Uma variável max contendo o maior elemento em A. 1. max ÅA[1] 2. para index Å2 até n se max < A[index] 3. então max ÅA[index] 4. fim {se} 5. 6. fim {para} a) Forneça uma escolha razoável para a operação básica realizada. b) Forneça um limitante superior para o número de comparações necessárias para se encontrar o máximo elemento no pior caso. c) Forneça um limitante inferior para o número de comparações necessárias para se encontrar o máximo elemento no pior caso. 6. Considere o seguinte algoritmo (pesquisa binária): Entrada: Um vetor ordenado contendo n números A= < a1, a2,.., an > e um valor v. Saída: Um índice i tal que v= A[i] ou zero se v não está presente em A. 1. first Å 1; last Å n 2. found Å FALSO 3. enquanto first ≤ last e found = FALSO faça 4. index Å (first + last) / 2 se v = A[index] então found ÅVERDADEIRO 5. senão se v < A[index] então last Å index – 1 6. senão first Å index + 1 7. fim {se} 8. 9. fim {enquanto} 10. se found = FALSO então index Å 0 Determine o número de operações básicas realizadas pelo algoritmo de pesquisa binária no pior caso. 7. Mostrar que a solução exata para a recorrência F(n) = 1 F(n) = F( n / 2 ) + 1 é F(n) = lg n + 1, para n ≥1. para n =1, para n >1, Projeto e Análise de Algoritmos Aula de Exercícios - 1 Prof. André Amaral Página 3 de 3 8. Suponha que se quer ordenar n elementos contidos em um vetor A, inicialmente, encontrando-se o menor elemento de A e trocando-o de posição com o elemento A[1]. Em seguida, encontre o segundo menor elemento de A e o troque com o elemento A[2]. Continue desta maneira para os primeiros (n –1) elementos de A. a) Escreva um pseudocódigo para este algoritmo, o qual é conhecido como selection sort. b) Qual o tempo de execução no pior caso? E no melhor caso? 9. Mostre que a solução de é O(n2). T(n) = 2.T( n / 2) + n 10. Mostrar que a solução para a recorrência T(n) = Θ(1) T(n) = T( n – 1) + Θ(1) para n =0, para n >0, é T(n) = O (n). 11. Considere o problema de ordenação de uma seqüência de n números em ordem nãodecrescente. Um método simples para ordenar os números é localizar o menor elemento varrendo a seqüência e então trocar o menor elemento com o primeiro. A seguir repetimos o processo para os (n – 1) últimos elementos resultando na colocação do segundo menor elemento na segunda posição. Repetindo este processo para os (n – 2), (n – 3),..., 2 elementos, teremos a seqüência completamente ordenada. Este algoritmo é conhecido como selection sort. Escreva uma recorrência para o tempo de execução da versão recursiva do algoritmo selection sort. 12. Mostrar que a solução exata para a recorrência T(n) = 0 T(n) = T( n – 1) + n –1 é T(n) = n (n–1) / 2, para n ≥1. para n =1, para n >1,