3. ANÁLISE DE COMPLEXIDADE PESSIMISTA
|
|
|
- Kevin Santiago Campos
- 8 Há anos
- Visualizações:
Transcrição
1 3. ANÁLISE DE COMPLEXIDADE PESSIMISTA Este capítulo introduz uma metodologia para analisar a complexidade pessimista (i. e. no pior caso) de um algoritmo com base em sua estrutura. O processo de construção de um algoritmo seria mais eficaz se a complexidade fosse um fator integrante do projeto do mesmo. Apesar de a complexidade ser uma medida muito particular à classe do algoritmo que está sendo analisado, alguns aspectos do cálculo da complexidade não dependem do que faz o algoritmo. Entre as medidas de complexidade, a complexidade no pior caso é o critério de avaliação mais utilizado. Serão estudadas, uma a uma, as principais estruturas algorítmicas a seguir: o Atribuição: v e, o Seqüência (ou composição): S ; T, o Condicional: se b então S senão T (ou se b então S), o Iteração definida (ou incondicional): para i de j até m faça S, o Iteração indefinida (ou condicional): enqto b faça S. Na seção 2 do capítulo 2 (cf ), introduzimos as seguintes variantes para o critério pessimista de complexidade de um algoritmo a: c P = [ a ](n) := Máx { desemp[ a ](d) IN / tam(d) = n }, c P < [ a ](n) := Máx { desemp[ a ](d) IN / tam(d) < n }; onde desemp[ a ](d) := custo(exec[ a ](d)). Neste capítulo daremos ênfase à variante c P < [a](n), onde vários resultados podem ser adaptados para a variante c P = [a](n). Entre as medidas de complexidade, a complexidade no pior caso é o critério de avaliação mais utilizado. Visão geral do capítulo 3.1 Preliminares e conceitos auxiliares. Introduz algumas idéias básicas importantes e conceitos auxiliares, como os de absorção e máximo assintótico em ordem, que serão usadas a seguir. 3.2 Equações de complexidade pessimista. Estuda a complexidade de cada uma das principais estruturas algorítmicas, estabelecendo equações, ilustradas por exemplos simples. 3.3 Exemplos de aplicação. Ilustra a metodologia da seção 3.2, aplicando-a a alguns exemplos de algoritmos. 3.1 PRELIMINARES E CONCEITOS AUXILIARES A motivação é reduzir o desempenho - e a complexidade - de um algoritmo à informações sobre suas partes. Podemos operar ponto a ponto com funções. Consideremos funções f e g de um conjunto D no conjunto IR+, onde definimos sua soma pontual por: ( f + g )(d) := f(d) + g(d), para cada d D. Definimos, ainda, seu máximo e mínimo pontuais, respectivamente, por: Máx ( f, g )(d) := Máx { f(d), g(d) } e mín ( f, g )(d) := mín { f(d), g(d) } Idéias básicas: componentes de algoritmos A complexidade de um algoritmo poderá ser obtida a partir das complexidades das suas partes. Em geral, cada componente executada dá sua contribuição para o desempenho e a complexidade do algoritmo.
2 Torna-se conveniente classificar as componentes de um algoritmo em conjuntivas ou disjuntivas, conforme sejam sempre executadas ou não. Por exemplo, no (trecho de) algoritmo j i + 1 ; k i - 1, essas duas atribuições são suas componentes conjuntivas. Por outro lado, essas duas atribuições são as componentes disjuntivas do (trecho de) algoritmo se i j então j i + 1 senão k i - 1. Consideremos um algoritmo a 0 com duas componentes a 1 e a 2. Para entradas de tamanho até n, a complexidade pessimista, pela sua própria definição, dá uma cota superior para o desempenho: para uma entrada d com tam(d) < n, sabemos que desemp[ a j ](d) < c P < [ a j ](n), para j = 0, 1, 2. Para o caso de componentes conjuntivas, na execução do algoritmo a 0 sobre entrada d, temos esforços computacionais associados às execuções das duas componentes a 1 e a 2. Assim, o desempenho do algoritmo a 0,com entrada d é dado por: desemp[ a 0 ](d) = desemp[ a 1 ](d) + desemp[ a 2 ](d) (3.1.1). Como as complexidades pessimistas dão cotas superiores para os desempenhos, temos: desemp[ a 0 ](d) < c P < [ a 1 ](n) + c P < [ a 2 ](n). Assim, pela definição de complexidade pessimista, obtemos a seguinte cota superior: c P < [ a 0 ](n) < c P < [ a 1 ](n) + c P < [ a 2 ](n). Por outro lado, pela equação (3.1.1) os desempenhos das partes dão cotas inferiores: desemp[ a j ](d) < desemp[ a 0 ](d), para cada j = 1, 2. De novo, como a complexidade pessimista é cota superior para o desempenho, temos: desemp[ a i ](d) < c P < [ a 0 ](n), para cada i = 1, 2. Assim, pela definição de complexidade pessimista, obtemos as seguintes cotas inferiores: c P < [ a j ](n) < c P < [ a 0 ](n), para cada j = 1, 2. Portanto, da definição de máximo pontual, vem a seguinte cota inferior para c P < [ a 0 ]: Máx ( c P < [ a 1 ], c P < [ a 2 ] )(n) < c P < [ a 0 ](n). Princípio das partes conjuntivas Para o caso de componentes conjuntivas, com o exemplo do algoritmo anterior, a complexidade pessimista do algoritmo a 0 tem cotas. Máx ( c P < [ a 1 ], c P < [ a 2 ] ) < c P < [ a 0 ] < c P < [ a 1 ] + c P < [ a 2 ]. Logo, a complexidade pessimista do algoritmo a 0 tem ordem Θ ( c P < [ a 1 ] + c P < [ a 2 ] ). Consideremos agora um algoritmo a 0 com duas componentes a 1 e a 2 disjuntivas. Neste caso, temos esforços computacionais associados às execuções ora da componente a 1, ora da componente a 2. Assim, para cada entrada d, temos: desemp[ a 0 ](d) = desemp[ a 1 ](d) ou desemp[ a 0 ](d) = desemp[ a 2 ](d) (3.1.2). Como as complexidades pessimistas dão cotas superiores para os desempenhos, temos: desemp[ a 0 ](d) < c P < [ a 1 ](n) ou desemp[ a 0 ](d) < c P < [ a 2 ](n). Assim, pela definição de máximo pontual, obtemos a seguinte cota superior: desemp[ a 0 ](d) < Máx (c P < [ a 1 ], c P < [ a 2 ] )(n). Portanto, pela definição de complexidade pessimista, obtemos a seguinte cota superior: c P < [ a 0 ](n) < Máx (c P < [ a 1 ], c P < [ a 2 ] )(n). Por outro lado, como a complexidade pessimista é cota superior para o desempenho, da expressão (3.1.2) temos: se desemp[ a 0 ](d) = desemp[ a 1 ](d), então: desemp[ a 1 ](d) < c P < [ a 0 ](n); se desemp[ a 0 ](d) = desemp[ a 2 ](d), então: desemp[ a 2 ](d) < c P < [ a 0 ](n). Assim, para qualquer entrada d com tam(d) < n, temos a seguinte cota inferior: Máx { desemp[ a 1 ](d), desemp[ a 2 ](d) } < c P < [ a 0 ](n). Logo, para o pior caso de entradas com tamanho até n, temos a cota inferior: Máx { Máx { desemp[ a 1 ](d), desemp[ a 2 ](d) } / tam(d) < n } < c P < [ a 0 ](n).
3 Mas, pode-se mostrar que Máx { c P < [ a 1 ](n), c P < [ a 2 ](n) } é uma cota inferior para: Máx { Máx { desemp[ a 1 ](d), desemp[ a 1 ](d) } / tam(d) < n }. Portanto, a definição de máximo pontual, vem a ser cota inferior para c P < [ a 0 ]: Máx ( c P < [ a 1 ], c P < [ a 2 ] )(n) < c P < [ a 0 ](n). Princípio das partes disjuntivas Para o caso de componentes disjuntivas, com o exemplo do algoritmo anterior, a complexidade pessimista do algoritmo a 0 tem cotas. c P < [ a 0 ] = Máx ( c P < [ a 1 ], c P < [ a 2 ] ). Logo, a complexidade pessimista do algoritmo a 0 tem ordem Ω ( c P < [ a 0 ] ) Conceitos auxiliares Os conceitos de absorção e máximo assintótico (em ordem) são motivados por idéias de reduzir a complexidade de um algoritmo às ordens das suas partes. A idéia de uma componente de um algoritmo absorver outra se aplica quando ambas as componentes são conjuntivas. Para o caso de componentes disjuntivas, aparece a idéia de máximo assintótico, que será considerada em seguida. Uma complexidade é absorvida por outra, por exemplo, se ambas são polinômios na mesma variável. Nesse caso, a complexidade de menor grau é absorvida. Assim, n é absorvida por n 2. Também, n. logn é absorvida por n 2. Dadas funções f e g de IN em IR+, dizemos que f é absorvida por g, sse, f é O( g ). Isto significa que: ( c IR+) ( n 0 IN) ( n > n 0 ): f(n) < c. g(n). Princípio da absorção Para funções f e g de IN em IR+, se f é absorvida por g, sua soma pontual f + g é Θ ( g ). Assim, como n. logn é absorvida por n 2, a soma ( n. logn + n 2 ) é Θ ( n 2 ). Máximo assintótico Considerando funções f e g de IN em IR+, vamos a seguir examinar algumas expressões mais simples para a ordem do máximo pontual Máx ( f, g )(n) := Máx { f(n), g(n) }. Pode acontecer, no entanto, que não exista uma dominância. Quando isso acontece, uma solução simplista, mas muitas vezes usada, é utilizar para a ordem do máximo pontual Máx ( f, g ) a soma pontual, dada por ( f + g )(n) := f(n) + g(n). Inicialmente, é claro que o máximo assintótico deve ser comutativo. (i): MxAO ( f, g ) = MxAO ( g, f ). Devemos também requerer que as funções sejam dominadas. (ii): f = O( MxAO ( f, g ) ) e g = O( MxAO ( f, g ) ). Podemos exigir que o máximo assintótico seja a melhor cota superior. (iii): MxAO ( f, g ) = O( h ), sempre que f = O( h ) e g = O( h ). Podemos requerer também a seguinte propriedade. (iv): MxAO ( f, g ) = g, sempre que ( n 0 IN) ( n > n 0 ): f(n) < g(n). Consideremos, por sua vez, funções f e g de IN em IN. O que devemos esperar de seu máximo assintótico MxAO ( f, g )?
4 3.2 EQUAÇÕES DE COMPLEXIDADE PESSIMISTA Precisamos das complexidades das componentes básicas e saber como combinar complexidades de componentes. Vamos analisar a complexidade de cada uma das principais estruturas algorítmicas. Daremos ênfase à variante c P < [a], cuja notação simplificaremos para c P [a]. Vários resultados podem ser adaptados para a variante c P = [a] Atribuição Exemplo Considere as atribuições a seguir: a) Para variáveis inteiras i e j: i 0 {inicialização} ; j i {transferência}. Ambas têm complexidade constante: Θ (1). b) Para lista v de inteiros e variável inteira m: m Max(v) {valor máximo}. Esta atribuição envolve (sendo n o comprimento da lista em v): - determinar o máximo da lista v, com complexidade Θ (n); - transferir este valor, com complexidade Θ (1). Sua complexidade tem ordem linear: Θ (n). c) Para listas u, v e w: u v {transfere lista}; w Reversa(v) {inverte lista}. A atribuição de transferência de cada elemento da lista v, tendo complexidade O (n), para uma lista u com comprimento n. A atribuição w Reversa(v) envolve: - inverter a lista v, com complexidade Θ (n); - transferir os elemento da lista invertida, com complexidade Θ (n). Sua complexidade tem ordem n + n, i. e. O (n). Assim, o desempenho da atribuição v e, com entrada d é dado por: desemp[ v e ](d) = cálc[ e ](d) + transf[ e(d) ]. Complexidade pessimista da atribuição A complexidade pessimista da atribuição v e tem cotas: Máx ( c P [ e ], c P [ e ] ) < c P [ v e ] < c P [ e ] + c P [ e ]. Logo, a ordem da complexidade pessimista da atribuição v e é dada por: c P [ v e ] = O ( c P [ e ] + c P [ e ] ). Exemplo Para listas u e v de inteiros, temos: c P [ u Ordene(v) ] = O ( c P [ Ordene ] + c P [ Ordene(v) ] ). Supondo que Ordene é um algoritmo com tempo O ( n 2 ), teremos: c P [ u Ordene(v) ] = O ( n 2 + n ) = O ( n 2 ). Note que, se a operação fundamental é a comparação, então: c P [ u Ordene(v) ] = O ( c P [ Ordene ] ) Seqüência (ou composição) Exemplo Considere as seqüências a seguir: a) Para variáveis inteiras i e j: i 0 ; j i. Sua complexidade tem ordem 1 + 1: Θ ( 1 ).
5 b) Para lista v de inteiros e variável inteira m: m Max(v) ; m m + 1. Sua complexidade tem ordem n + 1: O ( n ). c) Para listas u, v e w: u v ; w Reversa(v). Sua complexidade tem ordem n + n: Θ ( n ). Assim, o desempenho da seqüência S ; T com entrada d é dado por: desemp[ S ; T ](d) = desemp[ S ](d) + desemp[ T ](S(d)). Exemplo Considere o trecho de algoritmo: v Reversa(u) ; w Ordene(v), onde Reversa e Ordene têm complexidades Θ(n) e O(n 2 ), respectivamente. O algoritmo composto tem complexidade de ordem n + n 2, i. e. O ( n 2 ). Complexidade da seqüência com perservação (assintótica) de tamanho Se S preserva tamanho assintoticamente, então a complexidade pessimista da seqüência S ; T tem cotas: Máx ( c P [ S ], c P [ T ] ) < c P [ S ; T ] < c P [ S ] + c P [ T ]. A ordem da complexidade pessimista da seqüência S ; T é dada por: c P [ S ; T ] = O ( c P [ S ] + c P [ T ] ). Exemplo Dados algoritmos Prim(u) e Buscab(a,v), considere a seqüência: v Prim(u) ; Buscab( a, v ). Vamos supor que: - Prim(u) dá como saída a primeira metade da lista em u, com comprimento n / 2, e tem complexidade Θ ( n ); - Buscab( a, v ) procura a na lista v, com complexidade O ( logm ), para lista v com comprimento m. Assim, o algoritmo composto tem complexidade de ordem: n + log n / 2, ou seja O ( n ). Complexidade pessimista da seqüência (em geral) Para entradas com tamanho até n, i. e. s(n) := Máx { tam(s(d)) / tam(d) < n }, a complexidade pessimista da seqüência S ; T tem cotas: Máx ( c P [ S ](n), c P [ T ](s(n)) ) < c P [ S ; T ](n) < c P [ S ](n) + c P [ T ](s(n)). Logo, a complexidade pessimista da seqüência S ; T é dada por: c P [ S ; T ](n) = O ( c P [ S ](n) + c P [ T ](s(n)) ). Exemplo Considere a seqüência: v Prim(u) ; w Fin(u) ; v Ordene(v) ; w Ordene(w) ; u Concat( v, w ). Vamos supor que: - Prim é como no exemplo e, analogamente, Fin dá a segunda metade de sua entrada; - Ordene tem complexidade quadrática; - Concat( v, w ) dá como saída a concatenação das listas v e w, com complexidade O ( p + q ). Assim, o algoritmo composto tem complexidade de ordem: n + n + n n ( n 2 + n 2 ), ou seja O ( n2 ).
6 3.2.3 Condicionais Exemplo Considere as estruturas condicionais a seguir: a) Para variável inteira i: se i = 0 então i i + 1. Esta estrutura condicional envolve: - determinar se o valor de i é 0, com complexidade Θ ( 1 ); - se sim, executar a atribuição i i + 1, com complexidade Θ ( 1 ). Sua complexidade tem ordem constante: Θ ( 1 ). b) Para lista v de inteiros e variável inteira m: se m = 0 então m Max(v). Esta atribuição envolve: - determinar se o valor de m é 0, com complexidade Θ ( 1 ); - se sim, executar a atribuição m Max(v), com complexidade Θ ( n ). Sua complexidade, no pior caso, tem ordem linear: Θ ( n ). Assim, o desempenho desemp[ se b então S ](d) da estrutura condicional se b então S, com entrada d é dado por: aval[ b ](d) + desemp[ S ](d) caso o valor de b em d seja verdadeiro; aval[ b ](d) caso o valor de b em d seja falso. Complexidade da estrutura condicional simples A complexidade pessimista de se b então S tem cotas: c P [ b ] < c P [ se b então S ] < c P [ b ] + c P [ S ]. Logo, a ordem da complexidade pessimista de se b então S é dada por: c P [ se b então S ] = O ( c P [ b ] + c P [ S ] ). Exemplo Dados algoritmos Max e Ordene, (ex e 3.2.2), considere o seguinte trecho de algoritmo, para lista v de inteiros: se Max(v) = 0 então v Ordene(v). Para esta estrutura condicional temos: c P [ se Max(v) = 0 então v Ordene(v) ] = = O ( c P [ Max(v) = 0 ] + c P [ v Ordene(v) ] ). Como seus componentes têm complexidades pessimistas: c P [ Max(v) = 0 ] = O ( n ) e c P [ v Ordene(v) ] = O ( n 2 ); a ordem da complexidade pessimista desta estrutura condicional é: c P [ se Max(v) = 0 então v Ordene(v) ] = O ( n + n 2 ) = O( n 2 ). Exemplo Considere as estruturas condicionais a seguir: a) Para variáveis inteiras i e j: se i j então i i + j senão j i + 1. Esta estrutura condicional envolve: - saber se os valores de i e j são diferentes, tem complexidade Θ ( 1 ); - se sim, executar a atribuição i i + j, com complexidade Θ ( 1 ); - se não, executar a atribuição j i + 1, com complexidade Θ ( 1 ). Sua complexidade tem ordem constante: Θ ( 1 ). b) Para listas u e v (de inteiros): se u = v então v Prim(u) senão u Ordene(v). Esta estrutura condicional envolve: - determinar se as listas u e v são iguais, com complexidade O ( n ); - se sim, executar a atribuição v Prim(u), com complexidade O ( n ); - se não, executar a atribuição u Ordene(v), com complexidade O(n 2 ). Sua complexidade, no pior caso, tem ordem quadrática: O ( n 2 ).
7 Assim, a estrutura condicional se b então S senão T, com entrada d tem desempenho desemp[ se b então S senão T ](d) dado por: aval[ b ](d) + desemp[ S ](d) aval[ b ](d) + desemp[ T ](d) caso o valor de b em d seja verdadeiro; caso o valor de b em d seja falso. Complexidade pessimista da estrutura condicional composta A complexidade pessimista de se b então S senão T tem as cotas: inferior : Máx ( c P [ b ], c P [ S ], c P [ T ] ) < c P [ se b então S senão T ]; superior : c P [ se b então S senão T ] < c P [ b ] + MxAO ( c P [ S ], c P [ T ] ). A ordem da complexidade pessimista de se b então S senão T é dada por: c P [ se b então S senão T ] = O ( c P [ b ] + MxAO ( c P [ S ], c P [ T ] ). Exemplo Dados algoritmos Max, Reversa e Ordene (ex e 3.2.2), considere o seguinte trecho de algoritmo, para lista v de inteiros: se Max(v) > 0 então v Reversa(v) senão v Ordene(v). Para esta estrutura condicional temos: c P [ se Max(v) > 0 então v Reversa(v) senão v Ordene(v) ] = = O ( c P [ Max(v) > 0 ] + MxAO ( c P [ v Reversa(v) ],c P [ v Ordene(v) ] ) ). Suas componentes têm as seguintes complexidades pessimistas: c P [ Max(v) > 0 ] = O ( n ); c P [ v Reversa(v) ] = O ( n ) e c P [ v Ordene(v) ] = O ( n 2 ). Assim, temos o seguinte máximo assintótico em ordem de complexidades: MxAO ( c P [ v Reversa(v) ], c P [ v Ordene(v) ] ) = = MxAO ( n, n 2 ) = O( n 2 ). A ordem da complexidade pessimista desta estrutura condicional é: c P [ se Max(v) > 0 então v Reversa(v) senão v Ordene(v) ] = = O( n + n 2 ) = O( n 2 ).
Complexidade de Algoritmos. Edson Prestes
Edson Prestes Conceitos Auxiliares Mostre o principio da absorção Conceitos Auxiliares Considere duas funções f e g de IN em IR +. Freqüentemente, a partir de um certo ponto, uma função fica sempre maior
Complexidade de Algoritmos. Edson Prestes
Edson Prestes Exemplos Exemplos A complexidade no pior caso é linear e igual a n, ou seja, é O(n) A complexidade média é linear e igual a (1+n)/2, ou seja, é O(n) Exemplos Considere o produto C de uma
Análise de Complexidade de Algoritmos. mario alexandre gazziro
Análise de Complexidade de Algoritmos mario alexandre gazziro Definição A complexidade de um algoritmo consiste na quantidade de esforço computacional necessária para sua execução. Esse esforço é expresso
MCTA028 Programação Estruturada Aula 20 Exercícios de custos de um algoritmo
MCTA028 Programação Estruturada Aula 20 Exercícios de custos de um algoritmo Prof. Jesús P. Mena-Chalco Q-2017 1 Estudo de algoritmos O projeto de algoritmos é influenciado pelo estudo de seus comportamentos.
Comportamento Assintótico. Algoritmos e Estruturas de Dados Flavio Figueiredo (http://flaviovdf.github.io)
Comportamento Assintótico Algoritmos e Estruturas de Dados 2 2017-1 Flavio Figueiredo (http://flaviovdf.github.io) 1 Até Agora Falamos de complexidade de algoritmos com base no número de passos Vamos generalizar
Aula 1. Teoria da Computação III
Aula 1 Teoria da Computação III Complexidade de Algoritmos Um problema pode ser resolvido através de diversos algoritmos; O fato de um algoritmo resolver um dado problema não significa que seja aceitável
BCC202 - Estrutura de Dados I
BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) ASN Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Material elaborado com base nos slides do Prof. Reinaldo
1 a Lista Professor: Claudio Fabiano Motta Toledo Estagiário PAE: Jesimar da Silva Arantes
SSC0503 - Introdução à Ciência de Computação II 1 a Lista Professor: Claudio Fabiano Motta Toledo ([email protected]) Estagiário PAE: Jesimar da Silva Arantes ([email protected]) 1. O que significa
Algoritmo. Exemplo. Definição. Programação de Computadores Comparando Algoritmos. Alan de Freitas
Algoritmos Programação de Computadores Comparando Algoritmos Um algoritmo é um procedimento de passos para cálculos. Este procedimento é composto de instruções que definem uma função Até o momento, vimos
ANÁLISE DE ALGORITMOS: PARTE 3
ANÁLISE DE ALGORITMOS: PARTE 3 Prof. André Backes 2 A notação grande-o é a forma mais conhecida e utilizada de análise Complexidade do nosso algoritmo no pior caso Seja de tempo ou de espaço É o caso mais
BCC202 - Estrutura de Dados I
BCC202 - Estrutura de Dados I Aula 05: Análise de Algoritmos (Parte 2) Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Ciência da Computação, DECOM Website: www.decom.ufop.br/reifortes
Construção de Algoritmos II Aula 06
exatasfepi.com.br Construção de Algoritmos II Aula 06 André Luís Duarte Porque mil anos são aos teus olhos como o dia de ontem que passou, e como a vigília da noite. Salmos 90:4 Recursividade e complexidade
Complexidade de Algoritmos
Complexidade de Algoritmos! Uma característica importante de qualquer algoritmo é seu tempo de execução! é possível determiná-lo através de métodos empíricos, considerando-se entradas diversas! é também
Quantidade de memória necessária
Tempo de processamento Um algoritmo que realiza uma tarefa em 10 horas é melhor que outro que realiza em 10 dias Quantidade de memória necessária Um algoritmo que usa 1MB de memória RAM é melhor que outro
Complexidade Assintótica de Programas Letícia Rodrigues Bueno
Complexidade Assintótica de Programas Letícia Rodrigues Bueno Análise de Algoritmos 1. Introdução; Análise de Algoritmos 1. Introdução; 2. Conceitos básicos; Análise de Algoritmos 1. Introdução; 2. Conceitos
André Vignatti DINF- UFPR
Notação Assintótica: Ω, Θ André Vignatti DINF- UFPR Limitantes Inferiores Considere o seguinte trecho de código: void main () { /* trecho que le N da entrada padrao */ for (i = 0 ; i< N; i++) puzzle(i);
Pra início de conversa... O que é um algoritmo? Exemplos de algoritmos. Como podemos descrever algoritmos? Como podemos descrever algoritmos?
Pra início de conversa... O que é um algoritmo? Como podemos descrever algoritmos? avaliar algoritmos? Introdução à Análise de Algoritmos Prof. Cláudio E. C. Campelo http://claudiocampelo.com Derivado
Análise de Algoritmos
Análise de Algoritmos Estes slides são adaptações de slides do Prof. Paulo Feofiloff e do Prof. José Coelho de Pina. Algoritmos p. 1 Introdução CLRS 2.2 e 3.1 AU 3.3, 3.4 e 3.6 Essas transparências foram
Aula 02 Notação Assintótica p. 4. Usodanotação O. Notação O. Notação O, Ω, ΘeExemplos. Intuitivamente... O(f(n)) funções que não crescem mais
Notação O Aula 02 Notação Assintótica Notação O, Ω, Θe Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Intuitivamente... O() funções que não crescem mais rápido que funções menores
Melhores momentos AULA 1. Algoritmos p.38/86
Melhores momentos AULA 1 Algoritmos p.38/86 Definições x := inteiro i tal que i x < i + 1 x := inteiro j tal que j 1 < x j Exercício A1.B Mostre que n 1 2 n 2 n 2 e n 2 n 2 n + 1 2 para qualquer inteiro
André Vignatti DINF- UFPR
Notação Assintótica: O André Vignatti DINF- UFPR Notação Assintótica Vamos expressar complexidade através de funções em variáveis que descrevam o tamanho de instâncias do problema. Exemplos: Problemas
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa Livro Projeto de Algoritmos Nívio Ziviani Capítulo 1 Seção 1.3.1 http://www2.dcc.ufmg.br/livros/algoritmos/ Comportamento Assintótico de Funções O parâmetro n
Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR
Medida do Tempo de Execução de um Programa David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Classes de Comportamento Assintótico Se f é uma função de complexidade para um algoritmo F, então
ALGORITMOS AVANÇADOS UNIDADE I Análise de Algoritmo - Notação O. Luiz Leão
Luiz Leão [email protected] http://www.luizleao.com Conteúdo Programático 1.1 - Algoritmo 1.2 - Estrutura de Dados 1.2.1 - Revisão de Programas em C++ envolvendo Vetores, Matrizes, Ponteiros, Registros
Projeto e Análise de Algoritmos
Projeto e Análise de Algoritmos A. G. Silva Baseado nos materiais de Souza, Silva, Lee, Rezende, Miyazawa Unicamp Ribeiro FCUP 18 de agosto de 2017 Conteúdo programático Introdução (4 horas/aula) Notação
Área que visa determinar a complexidade (custo) de um algoritmo, com isso é possível:
Área que visa determinar a complexidade (custo) de um algoritmo, com isso é possível: Comparar algoritmos: existem algoritmos que resolvem o mesmo tipo de problema. Determinar se o algoritmo é ótimo :
Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência
Busca Binária Aula 05 Equações com Recorrência Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Idéia: Divisão e Conquista Busca_Binária(A[l...r],k) 1:if r < lthen 2: index = 1
BC1424 Algoritmos e Estruturas de Dados I Aula 05 Custos de um algoritmo e funções de complexidade
BC1424 Algoritmos e Estruturas de Dados I Aula 05 Custos de um algoritmo e funções de complexidade Prof. Jesús P. Mena-Chalco 1Q-2016 1 1995 2015 2 Custo de um algoritmo e funções de complexidade Introdução
Algoritmos e Estruturas de Dados I Aula 06 Custos de um algoritmo
Algoritmos e Estruturas de Dados I Aula 06 Custos de um algoritmo Prof. Jesús P. Mena-Chalco 1Q-2019 1 lista 3 7-2 6 NULL Node *Busca(int x, Node *lista) { while (lista!=null && lista->data!=x) lista =
ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS
1/18 ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS Algoritmos 2/18 Algoritmos Algoritmo - sequência de instruções necessárias para a resolução de um problema bem formulado (passíveis de implementação em computador)
Lista de Exercícios 6 Funções
UFMG/ICEx/DCC DCC Matemática Discreta Lista de Exercícios 6 Funções Ciências Exatas & Engenharias o Semestre de 06 Conceitos. Determine e justifique se a seguinte afirmação é verdadeira ou não para todas
Complexidade de Algoritmos
Complexidade de Algoritmos O que é um algoritmo? Sequência bem definida e finita de cálculos que, para um dado valor de entrada, retorna uma saída desejada/esperada. Na computação: Uma descrição de como
Análise de Algoritmos
Análise de Algoritmos Aula 04 Prof. Fernando Freitas Classes de Comportamento Assintótico Se f é uma função de complexidade para um algoritmo F, então O(f) é considerada a complexidade assintótica ou o
É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser
É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser executado 1 Fazendo estimativas e simplificações... O número
BCC202 - Estrutura de Dados I
BCC202 - Estrutura de Dados I Aula 06: Análise de Algoritmos (Parte 3) Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Ciência da Computação, DECOM Website: www.decom.ufop.br/reifortes
Comportamento assintótico
ANÁLISE DE ALGORITMOS: PARTE 2 Prof. André Backes 2 Na última aula, vimos que o custo para o algoritmo abaixo é dado pela função f(n) = 4n + 3 1 3 Essa é a função de complexidade de tempo Nos dá uma ideia
Lista de Exercícios 6: Soluções Funções
UFMG/ICEx/DCC DCC Matemática Discreta Lista de Exercícios 6: Soluções Funções Ciências Exatas & Engenharias o Semestre de 06 Conceitos. Determine e justifique se a seguinte afirmação é verdadeira ou não
2. Complexidade de Algoritmos
Introdução à Computação II 5952011 2. Complexidade de Algoritmos Prof. Renato Tinós Depto. de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 2.1. Introdução 2.1.1. Revisão de Pseudo-Código 2.1.2.
Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.
Lista 1 8 de abril de 2013 1 Exercícios Básicos 1.1 Na bibliografia Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b. 1.2 Outros 1. Projete
Introdução à Análise Algoritmos
Introdução à Análise Algoritmos Notas de aula da disciplina IME 4-182 Estruturas de Dados I Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) abril/218 Ordenação por SELEÇÃO: Idéia: Dado um vetor
Análise de Algoritmos Estrutura de Dados II
Centro de Ciências Exatas, Naturais e de Saúde Departamento de Computação Análise de Algoritmos Estrutura de Dados II COM10078 - Estrutura de Dados II Prof. Marcelo Otone Aguiar [email protected]
FACULDADE CAMPO LIMPO PAULISTA BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto a Análise de Algoritmos I Lista de Exercícios 1
FACULDADE CAMPO LIMPO PAULISTA BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO Projeto a Análise de Algoritmos I Lista de Exercícios 1 Prof. Osvaldo. 1. Descreva alguns problemas associados ao emprego de metodologias
Complexidade de Algoritmos
60 Desempenho 50 40 30 20 Algoritmo1 Algoritmo2 Algoritmo3 10 0 Complexidade de Algoritmos INFORMÁTICA BÁSICA Prof. Demétrios Coutinho C a m p u s P a u d o s F e r r o s D i s c i p l i n a d e A l g
Análise de Complexidade de Algoritmos
Análise de Complexidade de Algoritmos Algoritmos e Estruturas de Dados 2009/2010 Introdução Algoritmo: conjunto claramente especificado de instruções a seguir para resolver um problema Análise de algoritmos:
Otimização em Grafos
Otimização em Grafos Luidi G. Simonetti PESC/COPPE 2017 Luidi Simonetti (PESC) EEL857 2017 1 / 33 Definição do Problema Dado: um grafo ponderado G = (V, E), orientado ou não, onde d : E R + define as distâncias
Projeto e Análise de Algoritmos
Projeto e Análise de Algoritmos Aula 01 Complexidade de Algoritmos Edirlei Soares de Lima O que é um algoritmo? Um conjunto de instruções executáveis para resolver um problema (são
UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO. 4 a Lista de Exercícios Gabarito de algumas questões.
UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO MATEMÁTICA COMBINATÓRIA 4 a Lista de Exercícios Gabarito de algumas questões. Este gabarito foi feito direto no computador
Introdução à Ciência da Computação II
Introdução à Ciência da Computação II 2semestre/200 Prof Alneu de Andrade Lopes Apresentação com material gentilmente cedido pelas profas Renata Pontin Mattos Fortes http://wwwicmcuspbr/~renata e Graça
7. Introdução à Complexidade de Algoritmos
7. Introdução à Complexidade de Algoritmos Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 7. Introdução à Complexidade de Algoritmos Estruturas de Dados 1 / 1 Análise de Algoritmos
Análise de algoritmos
Análise de algoritmos Introdução à Ciência de Computação II Baseados nos Slides do Prof. Dr. Thiago A. S. Pardo Análise de algoritmos Existem basicamente 2 formas de estimar o tempo de execução de programas
Análise e Projeto de Algoritmos
Análise e Projeto de Algoritmos Mestrado em Ciência da Computação Prof. Dr. Aparecido Nilceu Marana Faculdade de Ciências I think the design of efficient algorithms is somehow the core of computer science.
ANÁLISE DE ALGORITMOS: PARTE 4
ANÁLISE DE ALGORITMOS: PARTE 4 Prof. André Backes 2 Função recursiva Função que chama a si mesma durante a sua execução Exemplo: fatorial de um número N. Para N = 4 temos 4! = 4 * 3! 3! = 3 * 2! 2! = 2
Teoria da Computação Aula 9 Noções de Complexidade
Teoria da Computação Aula 9 Noções de Complexidade Prof. Esp. Pedro Luís Antonelli Anhanguera Educacional Análise de um Algoritmo em particular Qual é o custo de usar um dado algoritmo para resolver um
ALGORITMOS AVANÇADOS Lista de Exercícios 01. Luiz Leão
Lista de Exercícios 01 Luiz Leão [email protected] http://www.luizleao.com Exercício 01 Qual a importância de estudarmos a complexidade dos algoritmos? Exercício 01 Resposta Qual a importância de estudarmos
Classes, Herança e Interfaces
Escola de Artes, Ciências e Humanidades EACH-USP ACH2002 Introdução à Ciência da Computação II Professor: Delano Medeiros Beder revisada pelo professor: Luciano Digiampietri EACH Segundo Semestre de 2011
Complexidade de algoritmos Notação Big-O
Complexidade de algoritmos Notação Big-O Prof. Byron Leite Prof. Tiago Massoni Engenharia da Computação Poli - UPE Motivação O projeto de algoritmos é influenciado pelo estudo de seus comportamentos Problema
7. Introdução à Complexidade de Algoritmos
7. Introdução à Complexidade de Algoritmos Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 7. Introdução à Complexidade de Algoritmos Estruturas de Dados 1 / 1 Análise de Algoritmos
Algoritmos e Programação I
Algoritmos e Programação I Estruturas de Controle e Repetição Prof. Fernando Maia da Mota [email protected] CPCX/UFMS Fernando Maia da Mota 1 Estruturas de Controle Uma vez que a expressão condicional
Algoritmos e Estrutura de Dados. Aula 04 Recorrência Prof. Tiago A. E. Ferreira
Algoritmos e Estrutura de Dados Aula 04 Recorrência Prof. Tiago A. E. Ferreira Esta Aula... Nesta aula veremos três métodos para resolver recorrência: Método da substituição É suposto um limite hipotético
Elementos de Análise Assintótica
Elementos de Análise Assintótica Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia 23 de Março de 2018 Aula de hoje Nesta aula veremos: Elementos de Análise Assintótica
Algoritmos - 3. Alexandre Diehl. Departamento de Física - UFPel
Algoritmos - 3 Alexandre Diehl Departamento de Física - UFPel Estrutura sequencial Estrutura condicional Estrutura de repetição PCF2017 2 Estrutura sequencial As ações ao longo do algoritmo são executadas
ANÁLISE DE ALGORITMOS: PARTE 1. Prof. André Backes. Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa
ANÁLISE DE ALGORITMOS: PARTE 1 Prof. André Backes Algoritmos 2 Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa Precisamos escrever o seu algoritmo Um algoritmo
INF 1010 Estruturas de Dados Avançadas
INF 1010 Estruturas de Dados Avançadas Complexidade de Algoritmos 2012 DI, PUC-Rio Estruturas de Dados Avançadas 2012.2 1 Introdução Complexidade computacional Termo criado por Hartmanis e Stearns (1965)
Melhores momentos AULA PASSADA. Complexidade Computacional p. 136
Melhores momentos AULA PASSADA Complexidade Computacional p. 136 Configurações controle q 7 cabeça 1 0 1 1 0 1 1 1 fita de leitura e escrita Configuração 1 0 1q 7 1 0 1 1 1 Complexidade Computacional p.
Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder
Divisão e Conquista Norton T. Roman Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder Divisão e Conquista Construção incremental Ex: Consiste em, inicialmente, resolver
Algoritmos 3/17/ Algoritmos como área de estudo e investigação
Algoritmos e Complexidade Ana Teresa Freitas INESC-ID/IST ID/IST 3/17/2005 1 O que é um algoritmo? Algoritmos: Sequência de instruções necessárias para a resolução de um problema bem formulado [passíveis
Análise de algoritmos
Análise de algoritmos Recorrências Conteúdo Introdução O método mestre Referências Introdução O tempo de execução de um algoritmo recursivo pode frequentemente ser descrito por uma equação de recorrência.
Algoritmos Avançados Análise de Complexidade
CCAE Centro de Ciências Aplicadas e Educação UFPB - Campus IV - Litoral Norte Algoritmos Avançados Análise de Complexidade COMPLEXIDADE DE ALGORITMOS Definição: A Complexidade de um Algoritmo consiste
COMPLEXIDADE DE ALGORITMOS
COMPLEXIDADE DE ALGORITMOS Algoritmos Seqüência de instruções necessárias para a resolução de um problema bem formulado Permite implementação computacional COMPLEXIDADE DE ALGORITMOS Um algoritmo resolve
ANÁLISE DE ALGORITMOS
ANÁLISE DE ALGORITMOS Paulo Feofiloff Instituto de Matemática e Estatística Universidade de São Paulo agosto 2009 Introdução P. Feofiloff (IME-USP) Análise de Algoritmos agosto 2009 2 / 102 Introdução
Análise de Algoritmos
Análise de Algoritmos Parte 3 Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 06 Algoritmos e Estruturas de Dados I Como escolher o algoritmo mais adequado para uma situação? (continuação) Exercício
Técnicas de análise de algoritmos
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Técnicas de análise de algoritmos Algoritmos e Estruturas de Dados I Natália Batista https://sites.google.com/site/nataliacefetmg/ [email protected]
Projeto e Análise de Algoritmos
Projeto e Análise de Algoritmos Aula 10 Métodos de Ordenação de Complexidade Linear Edirlei Soares de Lima Ordenação Problema: Entrada: conjunto de itens a 1, a 2,..., a n ; Saída:
Lista de exercícios sobre contagem de operações Prof. João B. Oliveira
Lista de exercícios sobre contagem de operações Prof. João B. Oliveira 1. metodo m ( Vetor V ) int i, res = 0; para i de 1 a V.size res = res + V[i]; return res; Soma de elementos de um vetor, O( ). 2.
Algoritmos e Programação
Algoritmos e Programação Aula 5 Estruturas de Repetição Profa. Marina Gomes [email protected] 26/04/2017 Engenharia de Computação - Unipampa 1 Aula de Hoje Estrutura de repetição Comando for
INF 1010 Estruturas de Dados Avançadas
INF 1010 Estruturas de Dados Avançadas Complexidade de Algoritmos 1 Introdução Complexidade computacional Termo criado por Juris Hartmanis e Richard Stearns (1965) Relação entre o tamanho do problema e
Análise e Projeto de Algoritmos
Análise e Projeto de Algoritmos Prof. Eduardo Barrére www.ufjf.br/pgcc www.dcc.ufjf.br [email protected] www.barrere.ufjf.br Consumo de tempo assintótico Seja A um algoritmo para um problema
Definimos a soma de seqüências fazendo as operações coordenada-a-coordenada:
Aula 8 polinômios (Anterior: chinês. ) 8.1 séries formais Fixemos um anel A. Denotaremos por A N o conjunto de todas as funções de N = {, 1, 2,... } a valores em A. Em termos mais concretos, cada elemento
