Algoritmos e Estruturas de Dados II Prof. Fabrcio Srgio de Paula Tpicos Complexidade de algoritmos Notao assinttica Exerccios Complexidade de algoritmos Tempo de execuo: caracterstica importante de um algoritmo Possibilita prever recursos necessrios para execuo Clculo do tempo de execuo 1. Mtodo emprico: mede-se o tempo durante execuo Diversas entradas distintas Tempo depende de software/hardware usado 2. Mtodo analtico: modelo matemtico Independe de hardware/software Nem sempre simples
Complexidade de algoritmos Mtodo analtico Tempo de execuo medido em funo do tamanho da entrada Exemplos: Ordenao: quantidade de elementos no vetor Multiplicao de dois nmeros grandes: quantidade de bits Considera operao dominante: operaes bsicas com maior frequncia de execuo Exemplos: Ordenao: comparao de elementos Multiplicao de matrizes: multiplicaes realizadas Complexidade de algoritmos Exemplo 1: Inverso de uma sequncia
Tamanho da entrada: n elementos da sequncia Operao dominante: troca de elementos Cada troca envolve trs operaes bsicas Complexidade: n/2 operaes dominantes Complexidade de algoritmos Exemplo 2: Soma de matrizes
Tamanho da entrada? Operao dominante? Complexidade? Complexidade de algoritmos Exemplo 3: Multiplicao de matrizes
Tamanho da entrada? Operao dominante? Complexidade? Complexidade de algoritmos Complexidade do pior caso: considera a situao onde o algoritmo executa o maior nmero de operaes possvel Mais utilizada: prever recursos (CPU) para execuo Complexidade do melhor caso: considera a situao onde o algoritmo executa o menor nmero de operaes possvel Complexidade do caso mdio: considera todas as situaes possveis e suas probabilidades de ocorrncia
Complexidade de espao: necessidade de memria, etc. Complexidade de algoritmos Exemplo: Busca em vetor pelo elemento x Operao dominante? Complexidade do pior caso? Complexidade do melhor caso? Complexidade do caso mdio?
Notao assinttica Anlise assinttica Estudo do comportamento de algoritmos com entradas grandes Ordem de crescimento do tempo de execuo em funo do tamanho da entrada Em geral Algoritmo assintoticamente mais eficiente: melhor Exceto para entradas pequenas Notao assinttica Notaes assintticas Notaes utilizadas para descrever o tempo de execuo assinttico de algoritmos Exemplos: O: limite superior Em geral, pior caso : limite inferior Em geral, melhor caso : limite superior e inferior justo Ordem de crescimento Notao O Dada funo g(n) O(g(n)) um conjunto de funes O(g(n)) = { f(n) : existem constantes positivas c e n 0 tais que 0 f(n) cg(n) para todo n n 0 } f(n) O(g(n)) se existem c e n 0 tais que f(n) nunca supere cg(n) f(n) = O(g(n)) sinnimo para f(n) O(g(n))
g(n) limite assinttico superior para f(n) Notao O
Notao O Exemplo: mostar que f(n) = 20n 2 + 10n O(n 2 ) O que fazer? Encontrar constantes positivas c e n 0 tais que 20n 2 + 10n
cn 2
para todo n n 0 f(n) = O(n 3 ) ? f(n) = O(n 4 ) ? f(n) = O(n n) ? f(n) = O(n lg n) ? Notao Dada funo g(n) (g(n)) um conjunto de funes (g(n)) = { f(n) : existem constantes positivas c e n 0 tais que 0 cg(n) f(n) para todo n n 0 } f(n) (g(n)) se existem c e n 0 tais que f(n) nunca supere cg(n) f(n) = (g(n)) sinnimo para f(n) (g(n))
g(n) limite assinttico inferior para f(n) Notao
Notao Exemplo: mostar que f(n) = n 2 20 - 10n (n 2 ) O que fazer? Encontrar constantes positivas c e n 0 tais que cn 2
n 2 20 - 10n para todo n n 0 f(n) = (n 3 ) ? f(n) = (n 4 ) ? f(n) = (n n) ? f(n) = (n lg n) ?
Notao Dada funo g(n) (g(n)) um conjunto de funes (g(n)) = { f(n) : existem constantes positivas c 1 , c 2 e n 0 tais que 0 c 1 g(n) f(n) c 2 g(n) para todo n n 0 } f(n) (g(n)) se existem c 1 , c 2 e n 0 tais que f(n) difere de g(n) apenas por fatores constantes f(n) = (g(n)) sinnimo para f(n) (g(n))
g(n) limite assinttico restrito (superior e inferior) para f(n)
Notao
Notao Exemplo: mostar que f(n) = n 2 2 3n (n 2 ) O que fazer? Encontrar constantes positivas c 1 , c 2 e n 0 tais que c 1 n 2
n 2 2 3n
c 2 n 2 para todo n n 0
f(n) = (n 3 ) ? f(n) = (n) ?
Algoritmo timo Seja um problema P que requer (n) operaes para ser resolvido para uma entrada de tamanho n. Algoritmo timo: algoritmo que resolve P com O(n) operaes Um algoritmo timo apresenta a menor complexidade possvel
Exerccios Livro Szwarcfiter: 1.4, 1.14, 1.15, 1.17, 1.18, 1.19, 1.20