Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Algoritmo
Anlise de Algoritmos
Anlise de Algoritmo
tempo de processamento em funo dos dados de entrada; espao de memria total requerido para os dados; comprimento total do cdigo; correcta obteno do resultado pretendido (convervncia); robustez (como comporta-se com as entradas invlidas ou no previstas).
quantidade de "trabalho" necessria para a sua execuo, expressa em funo das operaes fundamentais, as quais variam de acordo com o algoritmo, e em funo do volume de dados.
Complexidade
Performance
Escolher entre vrios algoritmos o mais eficiente para implementar; Desenvolver algoritmos mais eficientes (melhorar os algoritmos), devido ao aumento constante do "tamanho" dos problemas a serem resolvidos.
Complexidade
Tipos de Complexidade
Espacial
Este tipo de complexidade representa, por exemplo, o espao de memria usado para executar o algoritmo. Este tipo de complexidade o mais usado podendo dividir-se em dois grupos:
Temporal
Tempo (real) necessrio execuo do algoritmo. (como podemos medir?) Nmero de instrues necessrias execuo.
Analise de Algoritmos
Medidas de Anlise
Devem ser independentes da tecnologia (hardware/software) Modelos Matemticos simplificados baseados nos factores relevantes:
Tempo de Execuo
Uma funo que relaciona o tempo de execuo com o tamanho de entrada:
t = F(n)
Complexidade
Exemplo
Sejam 5 algoritmos A1 a A5 para resolver um mesmo problema, de complexidades diferentes. (Supomos que uma operao leva 1 ms para ser efetuada.) Tk(n) a complexidade ou seja o nmero de operaes que o algoritmo efectua para n entradas
n
16 32 512
T1(n)= n
A1
T2(n)=nlog n
A2
T3
A3
(n)=n2
T4
A4
(n)=n3
T5(n)=2n
A5
0.064s 0.16s 9s
0.256s 1s 4m22s
Operaes primitivas
Atribuio de valores a variveis Chamadas de mtodos Operaes aritmticas Comparao de dois nmeros Acesso a elemento de um array Seguir uma referncia de objeto (acesso a objeto) Retorno de um mtodo
tmpMax <- A[0] for i<-1 to n-1 do if tmpMax < A[i] then tmpMax <- A[i] return tmpMax
Simplificamos a anlise
Na analise de algoritmos importante concentrar-se na taxa de crescimento do tempo de execuo como uma funo do tamanho de entrada n, obtendo-se um quadro geral do comportamento.
Assim para o exemplo basta saber que o tempo de execuo de algoritmo cresce proporcionalmente a n.
tempo real seria n*factor constante, que depende de SW e HW). (O
11
Notao Assinttica
Notao O (big O)
Definio: Considere uma funo f(n) no negativa para todos os inteiros n0. Dizemos que f(n) O(g(n)) e escrevemos f(n) = O(g(n)), se existem um inteiro n0 e uma constante c>0, tais que para todo o inteiro nn0, f(n) cg(n)
Caracteriza o comportamento assinttico de uma funo, estabelecendo um limite superior quanto taxa de crescimento da funo em relao ao crescimento de n. Permite ignorar fatores constantes e termos de menor ordem, centrando-se nos componentes que mais afetam o crescimento de uma funo.
12
Diagrama
Definio do Grande O
13
Notao Assinttica
Terminologia de classes mais comuns de funes:
Logartmica - O(log n) Linear - O(n) Quadrtica - O(n2) Polinomial O(nk), com k1 Exponencial O(an), com a>1
14
Teoremas
1.
Comportamento assinttico da soma de duas funes cujos comportamentos assintticos particulares so conhecidos: Se f1(n) = O(g1(n)) e f2(n) = O(g2(n)), ento: f1(n) + f2(n) = O(max(g1(n)) , g2(n)))
1.
2.
16
Eficincia de um Algoritmo
O(n)
O(n2)
O(1)
Eficincia de um Algoritmo
Eficcia
O(n)
20
Eficcia
O(n2)
21
Eficcia
22
Complexidade de Algoritmos
Existem trs escalas de complexidade:
Melhor Caso Caso Mdio Pior Caso
Nas trs escalas, a funo f(N) retorna a complexidade de um algoritmo com entrada de N elementos
Complexidade de Algoritmos
Mas como saber qual a complexidade de um determinado algoritmo implementado? Para resolver esse problema, dividiu-se os algoritmos em Classes de Problemas, de acordo com o parmetro que afeta o algoritmo de forma mais significativa