Professional Documents
Culture Documents
Prof. Reinaldo
Ementa
Conceitos bsicos: motivao e soluo de problemas, critrios de anlise, correo e eficincia. Anlise de Algoritmos; tempo de processamento e operaes elementares, complexidade de pior caso, comparao de algoritmos. Anlise de Crescimento de Funes. Recorrncias e Funes Geradoras. Anlise Probabilstica e Anlise Amortizada. Algoritmos e estruturas de dados para problemas em grafos. Tcnicas de construo de algoritmos (gulosos, programao dinmica, diviso e conquista). Teoria da complexidade: as classes P, NP, Npcompleto. Hierarquia em complexidade computacional. Algoritmos heursticos, busca heurstica, algoritmos heursticos X algoritmos exatos. 2
REFERNCIAS
BSICA
ASCENDIO, Ana Fernanda Gomes. Estruturas de dados: algoritmos, anlise da complexidade e implementao em JAVA e C/C++. So Paulo:Person Prentice Hall, 2010. DROZDEK, Adam. Estrutura de dados e algoritmo em C++. So Paulo: Pioneira Thomson Learing, 2002. ZIVIANI, Nvio.Projeto de Algoritmos com Implementaes em Java e C++.So Paulo: Pioneira Thomson Learing, 2006.
3
CONTEDO PROGRAMTICO
UNIDADE 1 FUNDAMENTOS TERICOS SOBRE ANLISE DE ALGORTIMOS. CH TOTAL: 12 Introduo disciplina, apresentar definies importantes da rea de estudo denominada para anlise de algoritmos. Embasamento terico e uma viso geral das perspectivas, na rea de computao.
4
CONTEDO PROGRAMTICO
Ch Ch Ch Pra Teo Pra Ped
Viso geral da disciplina projeto e anlise de algoritmos. Objetivo da disciplina projeto e anlise de algoritmos. Resolver algoritmos e estrutura de dados em Java. Definir tipos de dados, tipos abstratos de dados, medida do tempo de execuo de um programa. Compreender comportamento assinttico de funes, classes de comportamento assinttico e tcnicas de anlise de algoritmos em Java.
01
01
04
02
01 03
5
Algoritmo
Segundo Cormen (2002), um algoritmo qualquer procedimento computacional bem definido que toma algum valor ou conjunto de valores como entrada e produz algum valor ou conjunto de valores como a sada
Algoritmo
Segundo Dijkstra, um algoritmo corresponde a uma descrio de um padro de comportamento, expresso em termos de um conjunto finito de aes.
CONTEDO PROGRAMTICO
Definir tipos de dados, tipos abstratos de dados, medida do tempo de execuo de um programa.
Algoritmos
Os algoritmos so utilizados para resolver diversos tipos de problemas, por exemplo:
Comrcio Eletrnico; Instrues para o uso de medicamentos; Indicaes de como montar um aparelho; Entre outros.
10
Estrutura de Dados
Quando os dados obtidos na entrada do algoritmo so dispostos e manipulados de forma homognea no processo de computao de sua sada, trata-se de tipo abstrato de dados. Uma estrutura de dados um meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificaes (Cormen, 2002).
11
Estrutura de Dados
Todos os problemas a serem resolvidos por algoritmos possuem dados. Estes so armazenados em estruturas, escolhidas de acordo com as operaes que podem ser realizadas sobre elas e com o custo de cada uma dessas operaes.
12
Estrutura de Dados
Estruturas de dados e algoritmos esto intimamente ligados:
no se pode estudar estruturas de dados sem considerar os algoritmos associados a elas, assim como a escolha dos algoritmos em geral depende da representao e da estrutura dos dados.
13
Estrutura de Dados
Para resolver um problema necessrio escolher uma abstrao da realidade, em
14
Programas
Programar basicamente estruturar dados e construir algoritmos. Programas so formulaes concretas de algoritmos abstratos, baseados em representaes e estruturas especficas de dados. Programas representam uma classe especial de algoritmos capazes de serem seguidos por computadores.
15
Tipos de dados
Caracteriza o conjunto de valores a que uma constante pertence, ou que podem ser
assumidos por uma varivel ou expresso, ou que podem ser gerados por uma funo. Tipos simples de dados so grupos de valores indivisveis (como os tipos bsicos int, float, double e char).
16
Anlise de Algoritmo
Envolve dois tipos de problemas distintos (Knusth, apud Ziviani, 1971): anlise de um algoritmo particular: calcular o custo de um determinado algoritmo na resoluo de um problema. anlise de uma classe de algoritmos: determinar o algoritmo de menor custo possvel para resolver um problema.
17
Anlise de Algoritmo
O que anlise de algoritmos Segundo Cormen (2002), a previso dos recursos de que o algoritmo necessitar. - Memria. - Largura de banda de comunicao. - Hardware de computao. - Tempo de computao.
18
Custo de um Algoritmo
Determinando o menor custo possvel para resolver problemas de uma dada classe, temos a medida da dificuldade inerente para resolver o problema. Quando o custo de um algoritmo igual ao menor custo possvel, o algoritmo timo para a medida de custo considerada.
21
Custo de um Algoritmo
Podem existir vrios algoritmos para resolver o mesmo problema. Se a mesma medida de custo aplicada a diferentes algoritmos, ento possvel compar-los e escolher o mais adequado.
22
Implementao de TADs
Considere uma aplicao que utilize uma lista de inteiros. Poderamos definir TAD Lista, com as seguintes operaes:
1. Faa a lista vazia; 2. Obtenha o primeiro elemento da lista; se a lista estiver vazia, ento retorne nulo; 3. Insira um elemento na lista.
24
32
Medidas de Complexidade
A quantidade de trabalho requerido por um algoritmo no pode ser descrita simplesmente por um nmero, porque o nmero de operaes bsicas efetuadas em geral no o mesmo para qualquer entrada (depende do trabalho da entrada).
34
Medidas de Complexidade Se a complexidade tomada como mxima para qualquer entrada de dado tamanho, a complexidade chamada no pior caso ou simplesmente complexidade.
35
Medidas de Complexidade
Se entanto, levada em conta a probabilidade de ocorrncia de cada entrada de um mesmo tamanho, a complexidade chamada complexidade esperada ou complexidade mdia.
36
Funo de Complexidade
Para medir o custo de execuo de um algoritmo comum definir uma funo de custo ou funo de complexidade f. f(n) a medida do tempo necessrio para executar um algoritmo para um problema de tamanho n. Funo de complexidade de tempo: f(n) mede o tempo necessrio para executar um algoritmo em um problema de tamanho n.
37
Funo de Complexidade
Funo de complexidade de espao: f(n) mede a memria necessria para executar um algoritmo em um problema de tamanho n. Utilizaremos f para denotar uma funo de complexidade de tempo daqui para a frente. A complexidade de tempo na realidade no representa tempo diretamente, mas o nmero de vezes que determinada operao considerada relevante executada.
38
public class Max { public static int max ( int v [ ] , int n) { int max = v[0] ; for ( int i = 1; i < n; i++) i f (max < v[ i ] ) max = v[ i ] ; return max;}}
39
Exemplo
Seja f uma funo de complexidade tal que f(n) o nmero de comparaes entre os elementos de v, se v contiver n elementos.
Logo f(n) = n 1, para n > 0.
Exemplo
Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto com n elementos, n>= 1, faz pelo menos n 1 comparaes. Prova: Deve ser mostrado, por meio de comparaes, que cada um dos n 1 elementos menor do que algum outro elemento.
41
Exemplo
Logo n 1 comparaes so necessrias. O teorema acima nos diz que, se o nmero de comparaes for utilizado como medida de custo, ento o mtodo max da classe Max timo.
42
44
Modelo RAM:
Instrues executadas uma aps a outra, sem operaes concorrentes. Instrues encontradas em computadores reais, tais como instrues aritmticas, de movimentao de dados e de controle.
Funo de Complexidade
O tempo de execuo de um algoritmo: funo de custo T, onde T(n) a medida do tempo necessrio para executar um algoritmo para um problema de tamanho n. T = funo complexidade de tempo. Se T(n) = medida de memria necessria para a execuo de um algoritmo, ento T = funo de complexidade de espao.
Funo de Complexidade
Um algoritmo nem sempre se comporta de modo uniforme, podendo identificar trs casos: Pior caso = maior tempo de execuo sobre todas as entradas de tamanho n. Melhor caso = menor tempo de execuo sobre todas as entradas de tamanho n. Caso mdio = mdia dos tempos de execuo sobre todas as entradas de tamanho n.
Tempo de Execuo
O tempo de execuo de um algoritmo aumenta proporcionalmente ao tamanho da entrada n do problema. Escolha do algoritmo pelo desempenho em entradas grandes. Estudo da eficincia assinttica.
Ordem Assintticas
A complexidade assinttica definida pelo crescimento da complexidade para entradas suficientemente grandes.
53
Introduo
As vezes no necessrio implementar um algoritmo para
verificar seu desempenho
Elementos da Anlise Assinttica Uma funo g(n) domina assintoticamente outra funo f(n) se existem duas constantes positivas c e n0 tais que, para n n0, temos que |f(n)| c . |g(n)|.
Notao O (Omicron)
Define limite assinttico superior sobre uma funo: f(n) = O(n2) ou f(n) O(n2)
Para todos os valores n direita de n0, o valor da funo f(n) est em ou abaixo de g(n).
Verificao da Equao
n 1 2 3 4
| | c=1 1 1 2 4 3 9 4 16
57
Notao
Uma funo f(n) (g(n)) se existem duas constantes positivas c e n0 tais que c . g(n) f(n), para todo n n0. A notao define um limite assinttico inferior sobre uma funo, dentro de um fator constante.
Notao
Para todos os valores n direita de n0, o valor da funo f(n) est em ou acima de g(n).
Notao
Uma funo f(n) (g(n)) se existem constantes positivas c1, c2 e n0 tais que 0 c1 g(n) f(n) c2 . g(n), para todo n n0. A notao define um limite assinttico firme sobre uma funo.
Notao
Para todos os valores n direita de n0, o valor da funo f(n) est sobre ou acima de c1g(n) e sobre ou abaixo de c2g(n).
Notao o
Fornece um limite assinttico superior que pode ou no ser assintoticamente restrito. o(g(n)) = {f(n): para qualquer constante positiva c > 0, existe uma constante n0 > 0 tal que 0 f(n) < c g(n)} para todo n n0}.
Notao
Fornece um limite assinttico inferior que pode ou no ser assintoticamente restrito.
(g(n)) = {f(n): para qualquer constante positiva c > 0, existe uma constante n0 > 0 tal que 0 c g(n) < f(n) para todo n n0}.
Recorrncias
Uma funo que chama a si mesma dita recursiva. Pode ser exemplificada pelo fatorial de um nmero n, que para todo n 0, definido por:
Recorrncias
A anlise do tempo de execuo de um algoritmo recursivo um pouco diferente. Todo algoritmo recursivo tem um caso base, que permite finalizar a recurso. Existem mtodos de soluo de recorrncias, mostrados a seguir.
Expanso Telescpia
Segundo Rezende (2002), a idia bsica expandir a relao de recorrncia at que possa ser detectado o seu comportamento no caso geral.
rvore de Recurso
Desenhar uma rvore cujos ns representam os tamanhos dos problemas correspondentes. Considerar: a altura da rvore e o nmero de passos executados em cada nvel.
68
Monotonicidade
Segundo Cormen (2002), uma funo f(n) monotonicamente crescente se a<=b produz f(a)<=f(b). Do mesmo modo, ela monotonicamente descrescente se a<=b produz f(a)>=f(b).Uma funo estritamente crescente se a<b produz f (a) < f(b) e estritamente descrescente se a<b produz f(a) > f(b).
70
Pisos e Tetos
Seja x um nmero pertencente ao conjunto dos nmeros reais. Para qualquer nmero x, denota-se por |x| (piso de x) o maior inteiro menor ou igual a x. Para qualquer nmero x, denota-se por |x| (teto de x) o menor inteiro maior ou igual a x. Para todo nmero x,
X-1<|X|<= X<=|X|<X+1.
71
Polinmios
Segundo Cormen (2002), dado um inteiro no negativo d, um polinmio em n de grau d uma funo p(n) da forma
=
=
72
Exponenciais
73
Logaritmos
74
Algoritmos Eficientes
Com um algoritmo ineficiente, um computador rpido no ajuda! Suponha que uma mquina resolva um problema de tamanho N em um dado tempo. Qual tamanho de problema uma mquina 10 vezes mais rpida resolve no mesmo tempo?
75
Algoritmos Eficientes
76
77
Exemplo
Esse exemplo mostra como calcular os dados da tabela acima. Suponha um algoritmo que precisa f(n) passos de execuo numa dada mquina e uma outra mquina que c vezes mais rpida. Portanto, ele capaz de executar c vezes mais passos que a primeira. Ao mesmo tempo, qual seria o tamanho de problema n0 que a nova mquina capaz de resolver? Temos
78
Exemplo
f(n0) = cf(n). Por exemplo para f(n) = log2n e c = 10 (exemplo acima), temos log2 n0 = 10 log2 n () n0 = n10. Em geral obtemos n0 = f1(cf(n)) (isso faz sentido para funes monotnicas, que tm inversa).
79
Anlise da complexidade
Grficos de desempenho
Grficos de desempenho
Grficos de desempenho
Custo c1 c2 c3
c4 c5
t
j 2 n
t
j 2 n
ii1
end A[i+1] key end
c6
t
j 2
c7
n-1
Anlise de Algoritmo
O custo total para a execuo do nalgoritmo ser: n T (n) c1n c2 (n 1) c3 (n 1) c4 t j c5 (t j 1)
j 2 j 2
c6 (t j 1) c7 (n 1)
j 2
Anlise de Algoritmo
No pior caso o vetor esta na ordem inversa, logo o while ser
executado todas as vezes
t
j 2 n j j 2
n(n 1) j 1 2
n
n(n 1) (t j 1) ( j 1) 2 j 2 j 2
Anlise de Algoritmo
n(n 1) n(n 1) T (n) c1n c2 (n 1) c3 (n 1) c4 ( 1) c5 ( ) 2 2 n(n 1) c6 ( ) c7 (n 1) 2
c4 c5 c6 2 c4 c5 c6 T (n) ( )n (c1 c2 c3 c7 )n 2 2 2 2 2 2 (c2 c3 c4 c7 )
No pior caso o tempo de execuo pode ser expresso como an2 + bn + c,
logo uma funo quadrtica
Anlise de Algoritmo
Ordem ou Grau de Crescimento
o Na verdade o que interessa no tempo de execuo apenas o termo de maior grau
o Nesse caso, os custos ci e os termos de menor ordem podem ser ignorados o No exemplo abaixo, diz-se que a ordem de crescimento n2
Anlise de Algoritmo
O melhor caso para o Insertion Sort quando o array j est
ordenado. Neste caso a comparao no lao interno sempre falhar na primeira comparao e o tempo de execuo depender apenas do lao externo. O tempo de execuo obedecer uma funo linear e a complexidade do algoritmo ser de O (n).
98
Grficos de desempenho
Grficos de desempenho
Anlise da complexidade
Grfico de desempenho
Anlise da complexidade
Antes, analisar a complexidade de heap_fica e transforma_heap.
Grficos de desempenho
Vetor no ordenado
Anlise da complexidade
Vetor ordenado
O tempo de execuo Pior caso: T(n) = O(n). Melhor caso: T(n) = O(1). O tempo de execuo Pior caso: T(n) = O(n). Melhor caso: T(n) = O(1).
Anlise da complexidade