Академический Документы
Профессиональный Документы
Культура Документы
Setembro de 2011
Engenharia de Computao
Anlise de algoritmos
Engenharia de Computao
Engenharia de Computao
uma metodologia utilizada para estimar os recursos exigidos por um algoritmo. A anlise de algoritmos permite comparar os custos relativos de dois ou mais algoritmos na resoluo de um mesmo problema.
Engenharia de Computao
uma metodologia utilizada para estimar os recursos exigidos por um algoritmo. A anlise de algoritmos permite comparar os custos relativos de dois ou mais algoritmos na resoluo de um mesmo problema. Um recurso levado em considerao para analisar um algoritmo , em geral, o tempo necessrio para a execuo do mesmo.
Engenharia de Computao
Funo de complexidade de tempo: f (n) mede o tempo necessrio para executar um algoritmo em um problema de tamanho n.
Engenharia de Computao
Funo de complexidade de tempo: f (n) mede o tempo necessrio para executar um algoritmo em um problema de tamanho n. A anlise do tempo de execuo de um algoritmo est relacionada com o nmero de operaes bsicas utilizadas pelo algoritmo.
Engenharia de Computao
Funo de complexidade de tempo: f (n) mede o tempo necessrio para executar um algoritmo em um problema de tamanho n. A anlise do tempo de execuo de um algoritmo est relacionada com o nmero de operaes bsicas utilizadas pelo algoritmo. Um outro recurso levado em considerao para analisar um algoritmo o espao de memria exigido por suas estruturas de dados.
Engenharia de Computao
Funo de complexidade de tempo: f (n) mede o tempo necessrio para executar um algoritmo em um problema de tamanho n. A anlise do tempo de execuo de um algoritmo est relacionada com o nmero de operaes bsicas utilizadas pelo algoritmo. Um outro recurso levado em considerao para analisar um algoritmo o espao de memria exigido por suas estruturas de dados. Funo de complexidade de espao: f (n) mede o espao de memria necessrio para a execuo de um algoritmo em um problema de tamanho n.
Professora Andriana S. L. O. Campanharo Engenharia de Computao
Para analisar a performance de um algoritmo, levamos em considerao o nmero de operaes bsicas exigidas para processar um input de um dado tamanho.
Engenharia de Computao
Exemplo 1
Consideremos um algoritmo para determinar o maior valor em uma vetor de n posies. O algoritmo pesquisa cada nmero, salvando o maior valor encontrado. Ou seja:
Engenharia de Computao
Exemplo 1
Consideremos um algoritmo para determinar o maior valor em uma vetor de n posies. O algoritmo pesquisa cada nmero, salvando o maior valor encontrado. Ou seja:
Engenharia de Computao
Exemplo 1
Neste exemplo, o tamanho do problema n, o nmero de inteiros armazenados no vetor vet[n]. A cada iterao, a operao bsica comparar dois inteiros.
Engenharia de Computao
Exemplo 1
Neste exemplo, o tamanho do problema n, o nmero de inteiros armazenados no vetor vet[n]. A cada iterao, a operao bsica comparar dois inteiros. O fator determinante, que afeta o tempo de execuo do programa anterior, o tamanho do input (n). Ou seja, quanto maior o tamanho de vet[n], maior o nmero de comparaes a serem feitas na busca pelo seu maior valor.
Engenharia de Computao
Exemplo 1
Engenharia de Computao
Exemplo 1
Se c o tempo necessrio para examinar um valor, ento T (n) = cn. O tempo c inclui o tempo necessrio para incrementar a varivel i e atribuir varivel maior_valor o maior valor encontrado at aquele momento. Ou seja, no estamos preocupados com o valor exato de c.
Engenharia de Computao
Exemplo 2
O tempo de execuo para atribuir a primeira posio de um vetor de inteiros para uma varivel simplesmente o tempo necessrio para copiar o valor da primeira posio do vetor. A equao para este algoritmo : T (n) = c1 indicando que o tamanho do input no afeta o tempo de execuo (ou seja, o tempo de execuo constante).
Engenharia de Computao
Exemplo 3
Engenharia de Computao
Exemplo 3
Qual o tempo de execuo do trecho do programa acima? A operao bsica em questo o incremento da varivel sum.
Engenharia de Computao
Exemplo 3
Qual o tempo de execuo do trecho do programa acima? A operao bsica em questo o incremento da varivel sum. Assumindo que cada incremento consome c2 unidades de tempo, o tempo de execuo do programa T (n) = c2 n2 .
Engenharia de Computao
Exemplo 4
Engenharia de Computao
Exemplo 4
Qual o tempo de execuo do trecho do programa acima? A operao bsica em questo o incremento da varivel sum.
Engenharia de Computao
Exemplo 4
Engenharia de Computao
Exemplo 4
A instruo sum++ ser executada: 1 vez quando i=1; 2 vezes quando i=2;
Engenharia de Computao
Exemplo 4
A instruo sum++ ser executada: 1 vez quando i=1; 2 vezes quando i=2; ...
Engenharia de Computao
Exemplo 4
A instruo sum++ ser executada: 1 vez quando i=1; 2 vezes quando i=2; ... n vezes quando i = n
Engenharia de Computao
Exemplo 4
n i=1 i
n(n+1) 2
Engenharia de Computao
Exemplo 4
n i=1 i
n(n+1) 2
Assumindo que cada incremento consome c3 unidades de tempo, o tempo de execuo do programa T (n) = c3 n(n+1) . 2
Engenharia de Computao
Exerccio 1
Engenharia de Computao
Exerccio 1
Engenharia de Computao
Exerccio 1
Qual o tempo de execuo do trecho do programa acima? O loop externo executado log2 n + 1 (j que a cada iterao k multiplicado por 2 at atingir n).
Engenharia de Computao
Exerccio 1
Qual o tempo de execuo do trecho do programa acima? O loop externo executado log2 n + 1 (j que a cada iterao k multiplicado por 2 at atingir n). O loop interno executado n vezes.
Professora Andriana S. L. O. Campanharo Engenharia de Computao
Exerccio 1
n = n log2 n + n = n(log2 n + 1)
k =0
Engenharia de Computao
Exerccio 1
n = n log2 n + n = n(log2 n + 1)
k =0
Assumindo que cada incremento de sum1 consome c unidades de tempo, o tempo de execuo do programa : T (n) = cn(log2 n + 1)
Engenharia de Computao
Exerccio 2
Engenharia de Computao
Exerccio 2
Engenharia de Computao
Exerccio 2
Qual o tempo de execuo do trecho do programa acima? O loop externo executado log2 n + 1 (j que a cada iterao k multiplicado por 2 at atingir n).
Engenharia de Computao
Exerccio 2
Qual o tempo de execuo do trecho do programa acima? O loop externo executado log2 n + 1 (j que a cada iterao k multiplicado por 2 at atingir n). O loop interno tem um custo k que dobra a cada iterao.
Professora Andriana S. L. O. Campanharo Engenharia de Computao
Exerccio 2
2k = 2log2 n+1 1 = 2n 1
k =0
Engenharia de Computao
Exerccio 2
2k = 2log2 n+1 1 = 2n 1
k =0
Assumindo que cada incremento de sum2 consome c unidades de tempo, o tempo de execuo do programa : T (n) = c(2n 1)
Engenharia de Computao
Para valores sucientemente pequenos de n, qualquer algoritmo custa pouco para ser executado, mesmo os inecientes.
Engenharia de Computao
Para valores sucientemente pequenos de n, qualquer algoritmo custa pouco para ser executado, mesmo os inecientes. A escolha do algoritmo no um problema crtico para problemas de tamanho pequeno.
Engenharia de Computao
Para valores sucientemente pequenos de n, qualquer algoritmo custa pouco para ser executado, mesmo os inecientes. A escolha do algoritmo no um problema crtico para problemas de tamanho pequeno. Logo, a anlise de algoritmos realizada para valores grandes de n.
Engenharia de Computao
Estuda-se o comportamento assinttico das funes de custo (comportamento de suas funes de custo para valores grandes de n).
Engenharia de Computao
Estuda-se o comportamento assinttico das funes de custo (comportamento de suas funes de custo para valores grandes de n). O comportamento assinttico de f (n) representa o limite do comportamento do custo quando n cresce.
Engenharia de Computao
Estuda-se o comportamento assinttico das funes de custo (comportamento de suas funes de custo para valores grandes de n). O comportamento assinttico de f (n) representa o limite do comportamento do custo quando n cresce. Logo, a anlise de algoritmos realizada para valores grandes de n.
Engenharia de Computao
Dominao assinttica
Engenharia de Computao
Dominao assinttica
A anlise de um algoritmo geralmente conta com apenas algumas operaes elementares. A medida de custo ou medida de complexidade relata o crescimento assinttico da operao considerada.
Engenharia de Computao
Dominao assinttica
Denio Uma funo f (n) domina assintoticamente outra funo g(n) se existem duas constantes positivas c e m tais que, para n m, temos |g(n)| c|f (n)|.
Engenharia de Computao
Dominao assinttica
Denio Uma funo f (n) domina assintoticamente outra funo g(n) se existem duas constantes positivas c e m tais que, para n m, temos |g(n)| c|f (n)|.
Engenharia de Computao
Notao O
Denio Uma funo g(n) O(f (n)) se existem duas constantes positivas c e m tais que g(n) cf (n), para todo n m.
Engenharia de Computao
Notao O
Denio Uma funo g(n) O(f (n)) se existem duas constantes positivas c e m tais que g(n) cf (n), para todo n m. Escrevemos g(n) = O(f (n)) para expressar que f (n) domina assintoticamente g(n). L-se g(n) da ordem no mximo f (n).
Engenharia de Computao
Notao O
Denio Uma funo g(n) O(f (n)) se existem duas constantes positivas c e m tais que g(n) cf (n), para todo n m. Escrevemos g(n) = O(f (n)) para expressar que f (n) domina assintoticamente g(n). L-se g(n) da ordem no mximo f (n). Exemplo: quando dizemos que o tempo de execuo T (n) de um programa O(n2 ), signica que existem constantes c e m tais que, para valores de n m, T (n) cn2 .
Engenharia de Computao
Notao O
Engenharia de Computao
Notao O
Engenharia de Computao
Notao O
Seja g(n) = (n + 1)2 . g(n) O(n2 ) pois para m = 1 e c = 4, temos: (n + 1)2 4n2 para n 1.
Engenharia de Computao
Notao O
Engenharia de Computao
Notao O
Mostrar que g(n) = 3n3 + 2n2 + n O(n3 ). Basta mostrar que 3n3 + 2n2 + n 6n3 , para n 0.
Engenharia de Computao
Notao O
Mostrar que g(n) = 3n3 + 2n2 + n O(n3 ). Basta mostrar que 3n3 + 2n2 + n 6n3 , para n 0. A funo g(n) = 3n3 + 2n2 + n tambm O(n4 ), entretanto esta armao mais fraca do que dizer que g(n) O(n3 ).
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
f (n) = O(1) - algoritmos de complexidade constante. Uso do algoritmo independe do tamanho da entrada n.
Engenharia de Computao
Engenharia de Computao
f (n) = O(log(n)) - algoritmos de complexidade logartmica. Quando n = 1000, log10 n = 3, quando n = 1000000, log10 n = 6.
Engenharia de Computao
Engenharia de Computao
f (n) = O(n) - algoritmos de complexidade linear. Cada vez que n dobra de tamanho, o tempo de execuo tambm dobra.
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
f (n) = O(n log n) Quando n 1 milho, n log10 n 6 milhes. Quando n 2 milhes, n log10 n cerca de 13 milhes, pouco mais do que o dobro.
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
f (n) = O(n3 ) - algoritmos de complexidade cbica. teis apenas para resolver pequenos problemas. Quando n 100, o nmero de operaes da ordem de 1 milho. Sempre que n dobra, o tempo de execuo ca multiplicado por 8.
Engenharia de Computao
Engenharia de Computao
f (n) = O(2n ) - algoritmos de complexidade exponencial. Quando n 20, o tempo de execuo cerca de 1 milho. Ocorrem na soluo de problemas quando se usa fora bruta para resolv-los. Geralmente no so teis sob o ponto de vista prtico.
Engenharia de Computao
f (n) = O(n!) - algoritmos de complexidade exponencial, , apesar de O(n!) ter comportamento muito pior do que O(2n ).
Engenharia de Computao
f (n) = O(n!) - algoritmos de complexidade exponencial, , apesar de O(n!) ter comportamento muito pior do que O(2n ). n = 20 20! = 2432902008176640000, um nmero com 19 dgitos. n = 40 um nmero com 48 dgitos. Geralmente ocorrem quando se usa fora bruta para na soluo do problema.
Engenharia de Computao
Engenharia de Computao
Comparaes de programas
Um programa com tempo de execuo O(n) melhor que outro com tempo O(n2 ). Porm, as constantes de proporcionalidade podem alterar esta considerao.
Engenharia de Computao
Comparaes de programas
Um programa com tempo de execuo O(n) melhor que outro com tempo O(n2 ). Porm, as constantes de proporcionalidade podem alterar esta considerao. Exemplo: um programa leva 100n unidades de tempo para ser executado e outro leva 2n2
Engenharia de Computao
Comparaes de programas
Qual dos dois programas melhor? Depende do tamanho do problema!
Engenharia de Computao
Comparaes de programas
Qual dos dois programas melhor? Depende do tamanho do problema! Para n < 50, o programa com tempo 2n2 melhor do que o que possui tempo 100n.
Engenharia de Computao
Comparaes de programas
Qual dos dois programas melhor? Depende do tamanho do problema! Para n < 50, o programa com tempo 2n2 melhor do que o que possui tempo 100n. Para problemas com entrada de dados pequena prefervel usar o programa cujo tempo de execuo O(n2 ).
Engenharia de Computao
Comparaes de programas
Qual dos dois programas melhor? Depende do tamanho do problema! Para n < 50, o programa com tempo 2n2 melhor do que o que possui tempo 100n. Para problemas com entrada de dados pequena prefervel usar o programa cujo tempo de execuo O(n2 ). Entretanto, quando n cresce, o programa com tempo de execuo O(n2 ) leva muito mais tempo que o programa O(n).
Professora Andriana S. L. O. Campanharo Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
Caso mdio Caso mdio (ou caso esperado): mdia dos tempos de execuo de todas as entradas de tamanho n.
Engenharia de Computao
Exemplo
Dado um vetor int v[n], determinar em qual posio de v se encontra um inteiro qualquer.
Engenharia de Computao
Exemplo
Dado um vetor int v[n], determinar em qual posio de v se encontra um inteiro qualquer. Melhor caso Elemento procurado o primeiro consultado. f (n) = 1
Engenharia de Computao
Exemplo
Pior caso Elemento procurado o ltimo consultado ou no est presente no vetor. f (n) = n
Engenharia de Computao
Exemplo
Pior caso Elemento procurado o ltimo consultado ou no est presente no vetor. f (n) = n Caso mdio f (n) = (n + 1)/2
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
Seja f (n) o nmero de comparaes entre os elementos de A, se A contiver n elementos. Melhor caso Logo f (n) = 2(n 1) para n > 0, para o melhor caso, pior caso e caso mdio.
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao
Engenharia de Computao