Anda di halaman 1dari 21

Material Anlise de Algoritmos

Aluno: Vincius Ferreira de Oliveira Professora: Mrcia Aparecida Fernandes

Sumrio:

Ementa:
1 Conceitos bsicos Modelo de computao, algoritmo, instncia, anlise de algoritmo, tamanho de entrada e tempo de execuo.

2 Fundamentos matemticos - Somas e recorrncias; - Notao assinttica; - Induo matemtica; - Frmula fechada.

3 Tcnica Divide-and-Conquer (Decomposio) - Mergesort; - Quicksort; - Heapsort.

4 Programao dinmica - Produto de n matrizes; - rvore de busca tima; - Maior subsequncia comum;

5 Algoritmos gulosos (Greedy) - Seleo de atividades; - Problema da mochila.

6 Algoritmos aproximados - Razo de aproximao; Caixeiro viajante.

7 Algoritmos em grafos - Buscas; - rvores geradoras de custo mnimo.

8 Estatsticas ordenadas

Cronograma
Data Prova 1 Prova 2 Prova 3 Trabalho Vista final 16/04 31/05 02/07 25 e 28/06 04/07 Valor 25,00 30,00 30,00 15,00 Contedo Tpicos 1, 2 e 3 Tpicos 4 e 5 Tpicos 6, 7 e 8 -

Referncias:
Jon Kleinberg e va Tardos - Algorithm Design Thomas H. Cormen e Charles E. Leiserson - Algoritmos Teoria e Pratica Laira Vieira Toscani e Paulo A. S. Veloso - Complexidade de Algoritmos

Introduo
1 - Conceitos bsicos Algoritmo Definio: um procedimento computacional bem definido que toma um valor (conjunto de valores) como entrada e produz um conjunto de valores como sada. Ferramenta computacional para resolver um problema bem especificado. Em geral, o enunciado do problema especifica, de maneira geral, a relao entre a entrada e sada. Exemplo 1: Problema: Somar uma sequncia de n valores inteiros. - Entrada: Uma sequncia de n valores inteiros. - Sada: A soma dos valores da sequncia. Exemplo 2: Problema: Ordenar uma sequncia de n elementos inteiros no negativos em ordem no decrescente. - Entrada: Uma sequncia de n inteiros no negativos. a1, a2, ... , an. - Sada: Uma permutao (reordenao) dos n elementos. a1, a2, ... , an tal que a1 <= a2 <= ... <= an. A sequncia 1, 2, 3, 4, 5, 6, 7, 8, 9 e 10 uma entrada para um possvel algoritmo do exemplo anterior. Uma instncia de um problema uma entrada que satisfaz todas as restries impostas no problema. Um algoritmo correto se, para toda instncia, ele para com a sada correta. Anlise de Algoritmos: Descreve os recursos exigidos para a execuo do algoritmo. 1 - Tempo de execuo. 2 - Espao ocupado. Deve-se definir um modelo de computao, desde que os algoritmos devem ser implementados em um computador, que estabelece as operaes envolvidas e seus custos. Os mais importantes recursos so: 1) Um processador genrico e as instrues so executadas sequencialmente. 2) Operaes tais como aritmtica e atribuies so consideradas de tempo constante.

Na prtica, o custo destas operaes no relevante (estas operaes so ignoradas), ou seja, considerando-se que devem existir apenas operaes mais significativas para encontrar a soluo do problema. Tempo de execuo: o tempo do algoritmo em funo do tamanho da entrada n. Desde que o tempo de execuo cresce medida que cresce o tamanho da entrada, o tempo de execuo uma funo de acordo com o tamanho da entrada. O tamanho da entrada o nmero de itens na entrada e, em geral, denotado por n. Este valor (tamanho) depende do problema. Exemplo 1: Em um problema envolvendo grafos, o tamanho da entrada pode ser o nmero de vrtices (n) e o nmero de arestas (m). Exemplo 2: Em um problema de ordenao, a operao significativa a comparao. Assim, o tempo de execuo uma funo f(n) tambm conhecida como funo custo ou complexidade de tempo. Funo Custo, Funo Complexidade, Complexidade de Tempo e Eficincia so denominaes para expressar a funo que diz como o tempo de execuo cresce medida que cresce o tamanho da entrada. Notao: f(n). Exemplo de funes: f(n) = an + b f(n) = n + nlogn f(n) = 2n+3n+1 f(n)=2n f(n) = n! f(n) = logn f(n) = c

Exemplo: Seja um jogo de cartas. As cartas so distribudas e cada jogador toma cada carta da mesa com a mo direita e a coloca na mo esquerda, de forma ordenada, da seguinte maneira: - Toma a carta e procura sua posio ordenada, da direita para a esquerda, entre as cartas que esto na mo esquerda. Algoritmo Ordena-Insero A sequncia de entrada dada por um vetor A[1 ... n ], onde n o nmero de cartas, ou seja, o tamanho da entrada.
Numerao Pseudo-Cdigo 1. for j 2 to n 2. do chave A*j+ 3. Insira chave na sequncia ordenada A*1 ... j+ 4. i j-1 5. while i > 0 && A[i] > chave 6. do A*i+1+ A*i+ 7. i i-1 8. A*i+1+ chave Tempo de Exec. C1 C2 0 C4 C5 C6 C7 C8 Qtd. De Exec. n n-1 n-1 n-1 (Sum[2,n] Tj) (Sum[2,n] Tj-1) (Sum[2,n] Tj-1) n-1

Anlise do Algoritmo Ordena-Insero Supondo que anlise considere um passo do algoritmo como sendo cada linha do pseudocdigo, tem-se que o custo de cada linha i relativo ao tempo constante. Assim, o tempo de execuo dado pela soma do custo total de cada linha, que dado pelo produto do tempo de execuo da linha e o nmero de vezes que a linha executada. Assuma que T(n) o tempo de execuo do algoritmo, onde n o comprimento da sequncia de cartas, representada pelo vetor A. Seja Tj o numero de vezes que o teste da linha 5 executado para cada carta j, com j=2, ..., n . Assim, o nmero de vezes que a linha 5 executada para toda carta j a . Desta maneira, o nmero de vezes que as linha 6 e 7 so executadas Portanto, T(n) = C1 * n + C2 * (n-1) + C4 * (n-1) + C5 * + C8 * (n-1). + (C6 + C7) * .

Como o valor de Tj depende da ordem em que se encontram as cartas na sequncia A, analisam-se casos para este valor. Desta maneira, a anlise do algoritmo feita por casos. Pior caso: A sequncia de entrada dada na ordem inversa ordem desejada. Neste caso, so feitos j - 1 testes, um para cada carta da mo esquerda e mais um teste para deixar o lao quando i = 0. Da, Tj = j, tal que = = (n*(n+1)/2) - 1 e - = (n*(n+1)/2) 1 (n-1) = (n*(n-1))/2. = =

Portanto, T(n) = C1 * n + C2 * (n-1) + C4 * (n-1) + C5 * [((n*(n+1))/2) 1] + (C6+C7) * [(n*(n-1))/2] + C8 * (n-1). T (n) = ( (C5 + C6 + C7)/2) * n + (C1 + C2 + C4 + C5/2 (-C6-C7)/2 + C8) (C2+C4+C5+C8) Mas, como as somas de Cis so constantes tem-se que T(n) = an + bn - c, onde a, b e c so constantes que representam as somas de Cis, ou seja, o tempo de execuo, neste caso, uma funo quadrtica. Melhor caso: A sequncia de entrada se encontra ordenada na ordem desejada. Neste caso, a linha 5 executada apenas uma vez e as linhas 6 e 7 no executadas. Assim, Tj = 1, =n1 e = 0. Portanto: T(n) = C1 * n + C2 * (n-1) + C4 * (n-1) + C5 * (n-1) + C8 * (n-1) T(n) = (C1 + C2 + C4 + C5 + C8) * n (C2 + C4 + C5 + C8) T(n) = a * n b onde a e b so constantes.

Caso Mdio: Considera-se a metade dos testes feitos no pior caso, ou seja, T = j/2. Neste caso, T(n) = a * n + b * n + c, onde a, b e c so constantes resultantes das somas das constantes Cis.

Exerccios
1. Considere o pseudocdigo alternativo. maior_ou_igual(x,y) 1. i 0 2. while (1 = 1) do 3. if ((x-i) = y) retorne sim 4. If ((y-i) = x) retorne no 5. i i + 1 Isto um algoritmo? Justifique sua resposta. 2. Considere o pseudocdigo abaixo, que decide se a universidade estar fechada em algum dia. fechada_universidade(x) 1. y random() 2. if (y>0.5) return sim 3. else return no Isto um algoritmo? Justifique. 3. Dado o cdigo abaixo e T(n) o nmero de vezes que Ol impresso. Expresse T(n) como um somatrio e avalie este somatrio. 1. for i 1 to n do 2. for j 1 to 3*i + 1 do 3. Imprima Ol

2.1.1 - Usando a Figura 2.2 como modelo, ilustre a operao de INSERTION-SORT no arranjo A = { 31, 41, 59, 26, 41, 58}. Figura 2.2

2.1.2 - Inverter sinal linha 5. 2.1.3 -

2 Fundamentos matemticos Recorrncias Exemplo: Torre de Hani: n o nmero de discos e T(n) o nmero de movimentos para transferir os discos. T(1) = 1 T(n) = 2T(n-1) + 1, se n > 1 Avaliar recorrncias : significa encontrar a frmula fechada. Ex1: Frmula fechada do Torre de Hani. T(n) = T(n-1)+T(n-2). Formas de avaliar: 1 - Mtodo da Expanso 2 - rvores de Recurso 3 - Teorema Master 4 - Induo Matemtica

Notao Assinttica Definio: Uma funo f(n) domina assintoticamente uma funo g(n) se existem constantes positivas c e n0, tais que para todo n >= n0, g(n) <= f(n). Notao O Dadas g(n) e f(n) duas funes, esta notao define um limite superior assinttico superior assinttica para g(n) em f(n). Em outras palavras: O (f(n)) = {g(n)/ constantes positivas c e n0 tais que 0 <= g(n) <= cf(n), n >= n0}

Neste caso, diz-se que g(n) = O(f(n)), por abuso de linguagem. Graficamente:

Exemplo: Seja Suponha , onde , , e so constantes positivas. e mostre que .

Deve-se mostrar que existem constantes positivas , .

tais que, para todo

----------------------- Page 8-----------------------

Pgina|8

Mas, .

, para

. Ento

Portanto, para

Exemplo: Seja e , mostre que .

Deve-se mostrar que existem constantes positivas todo , .

tais que para

Como

para todo e

, tomando , .

, a desigualdade

acima verdadeira. Para

Notao

Esta notao define um limite assinttico inferior para uma dada funo Em outras palavras:

=,

/ constantes positivas }

tais que,

Neste caso, diz-se que Graficamente:

, por abuso de linguagem.

Exemplo: Sejam e , mostrar que .

----------------------- Page 9-----------------------

Pgina|9

Deve-se mostrar que existem constantes positivas , Para todo . , . . Ento para e

tais que, para todo

Notao

Esta notao define um limite assinttico inferior e superior para uma funo . Assim:

={

/ constantes positivas

,e

tais que,

Neste caso, diz-se que Graficamente:

, por abuso de linguagem.

Tal definio constitui um limite apertado.

Exemplo:

. Mostrar que

----------------------- Page 10-----------------------

P g i n a | 10

Sabe-se que

, ento deve-se mostrar que e

. tais que para todo

Ou seja, provar que existem constantes positivas , , ou seja, .

Assim,

, da

Para . Para

, o lado esquerdo da inequao menor ou igual a zero para todo

, o lado direito maior ou igual a zero.

Assim, para

Logo, como

Exemplo:

e . Mostrar que .

Deve-se mostrar que existem constantes positivas , , e

tais que, para

todo .

, ou seja,

Dividindo os trs lados da inequao por

, tem-se que

De

tem-se

, quando

e ento

Da, para

, a equao verdadeira.

De

tem-se

. Ento para todo

, o lado

esquerdo sempre negativo e para zero.

o lado direito sempre maior ou igual a

Para , ,e

, temos que .

Classes de Comportamento

O algoritmo independe do tamanho da entrada. Supe-se a diviso do problema em subproblemas, no havendo, em geral, a combinao das solues.

----------------------- Page 11-----------------------

P g i n a | 11

Para cada elemento na entrada realizou-se um trabalho de tempo constante. Diviso do problema em subproblemas, havendo a combinao das solues. Os elementos da entrada foram analisados aos pares.

H, por exemplo, trs laos aninhados. Utilizou-se a fora bruta.

Definio: Um algoritmo dito eficiente se o tempo de execuo polinomial.

Operaes com Notao Assinttica

( (

) ( ) (

), se c for uma constante. ), se c for uma constante.

( (

))

Resolvendo Somas com Notao Assinttica

Exemplo:

a 1 Opo: Resoluo Direta

2a Opo: Utilizando a Induo Matemtica

Dada a soma, para mostrar o limite superior, toma-se uma funo f(n) como palpite e prova-se este limite atravs de induo matemtica.

. Mostrar que e tais que . por induo matemtica mostrar que existem

Caso Base: Para um pequeno, mostrar

----------------------- Page 12-----------------------

P g i n a | 12

Hiptese de Induo:

Tese de Induo:

...

Exemplo:

Mostrar que

o 1 Palpite: 2o Palpite: e ento mostrar que e ento mostrar que , ou seja, , ou seja, . .

Caso Base: Para n = 1,

verdade para todo

Hiptese de Induo:

Suponha a afirmao verdadeira para .

, isto ,

Tese de Induo: Mostrar que .

Se

, da

Como e so positivos, ,e , .

. Assim, para

Mtodo da Expanso Dadas as equaes da recorrncia, expande-se a equao geral at que seja possvel obter uma soma. Atravs desta, ou de sua frmula fechada, pode-se determinar um limite assinttico (em geral, superior) para o comportamento da recorrncia. Exemplo: T(1) = 1 T(n) = T(n - 1) + n, se n > 1 T(n) = T(n - 2) + (n - 1) + n = T(n - 3) + (n - 2) + (n - 1) + n ... = T(n - i) + (n - (i - 1)) + (n - (i - 2)) + ... + (n - 0) = 1 + 2 + 3 + ... + n Ento, se n - i = 1, ento i = n 1 e T(n) = Mtodo da Substituio Para mostrar que T(n) = O(f(n)) para alguma funo, utiliza-se a definio de notao assinttica e induo matemtica. = n (n+1)/2 = (n).

O objetivo mostrar que T(n) <= c*f(n), para c > 0 e n0 >= 0. Caso Base: Em geral, utiliza-se o caso base da recorrncia, ou seja, se este caso dado por T(a) = b, deve-se verificar se T(a) = b <= c*f(a) verdade para c>0. Hiptese de Induo: Assuma que a afirmao verdadeira para qualquer valor de n expresso no termo recorrente T(n - 1) <= c*f(a) verdade para c>0 . Tese de Induo: Mostrar que T(n) <= c*f(n) para algum c>0, utilizando a hiptese de induo. Exemplo: T(1) = 1 T(n) = T(n - 1) + n, se n > 1 Supondo f(n) = n . Caso Base: Para n = 1, T(1) = 1 <= c*f(1), ou seja, 1 <= c*1. Ento para c >= 1, a afirmao verdadeira para n = 1. Hiptese de Induo: Suponha que para n 1, T(n 1) .

Tese de Induo: Deve-se mostrar que T(n) <= c*f(n) para c > 0. Mas T(n) = T(n-1) + n e pela hiptese de induo tem-se que T(n) <= c*(n - 1) + n. T(n) = T(n - 1) + n <= c*(n - 1) + n = cn - 2cn + c + n <= cn, se 2cn >= c + n (2c-1)n>=c, ento n >= c/(2c-1). Mas 2c - 1 > 0 e c > . Para c = 1 e no = 1, T(N) = O(N).