Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
4 Programao dinmica - Produto de n matrizes; - rvore de busca tima; - Maior subsequncia comum;
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 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:
Pgina|8
Mas, .
, para
. Ento
Portanto, para
Como
para todo e
, tomando , .
, a desigualdade
Notao
Esta notao define um limite assinttico inferior para uma dada funo Em outras palavras:
=,
/ constantes positivas }
tais que,
Pgina|9
Deve-se mostrar que existem constantes positivas , Para todo . , . . Ento para e
Notao
Esta notao define um limite assinttico inferior e superior para uma funo . Assim:
={
/ constantes positivas
,e
tais que,
Exemplo:
. Mostrar que
P g i n a | 10
Sabe-se que
Assim,
, da
Para . Para
Assim, para
Logo, como
Exemplo:
e . Mostrar que .
todo .
, ou seja,
, tem-se que
De
tem-se
, quando
e ento
Da, para
, a equao verdadeira.
De
tem-se
, o lado
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.
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.
( (
) ( ) (
( (
))
Exemplo:
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
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, . .
Hiptese de Induo:
, isto ,
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).