Escolar Documentos
Profissional Documentos
Cultura Documentos
Plexidade PDF
Plexidade PDF
Introduo
Algoritmo: conjunto claramente especificado de
instrues a seguir para resolver um problema
Anlise de algoritmos:
provar que um algoritmo est correcto
determinar recursos exigidos por um algoritmo (tempo,
espao, etc.)
comparar os recursos exigidos por diferentes algoritmos que
resolvem o mesmo problema (um algoritmo mais eficiente
exige menos recursos para resolver o mesmo problema)
prever o crescimento dos recursos exigidos por um algoritmo
medida que o tamanho dos dados de entrada cresce
1
Complexidade Espacial e Temporal
Complexidade espacial de um programa ou algoritmo:
espao de memria que necessita para executar at ao
fim
S(n) - espao de memria exigido em funo do tamanho (n) da entrada
Complexidade temporal de um programa ou algoritmo:
tempo que demora a executar (tempo de execuo)
T(n) - tempo de execuo em funo do tamanho (n) da entrada
Complexidade versus Eficincia
Por vezes estima-se a complexidade para:
o "melhor caso" (pouco til)
o "pior caso" (mais til)
o "caso mdio" (igualmente til)
3
Notao de O grande
Na prtica, difcil (seno impossvel) prever com
rigor o tempo de execuo de um algoritmo ou
programa
Para obter o tempo a menos de:
constantes multiplicativas (normalmente estas constantes so tempos
de execuo de operaes atmicas)
parcelas menos significativas para valores grandes de n
Identificam-se as operaes dominantes (mais frequentes ou
muito mais demoradas) e determina-se o nmero de vezes
que so executadas (e no o tempo de cada execuo, que
seria uma constante multiplicativa)
Exprime-se o resultado com a notao de O grande
4
2
Notao de O grande
Definio:
T(n) = O(f(n)) (ler: T(n) de ordem f(n))
se e s se existem constantes positivas c e n0 tal que
T(n) cf(n) para todo o n>n0
Exemplos:
ck nk + ck-1 nk-1 + + c0 = O(nk) (ci - constantes)
log2 n = O(log n)
(no se indica a base porque mudar de base multiplicar por constante)
n log n
n n (linear)
log n (logartmica)
1 (constante)
3
Termo Dominante
Suponha que se usa N3 para estimar N3+350N2 + N
Para N = 10000
Valor real = 1 003 500 010 000
Valor estimado = 1 000 000 000 000
Erro = 0.35% (no significativo)
4
Eficincia Temporal da Pesquisa Binria
Em cada iterao, o tamanho do sub-array a analisar dividido
por um factor de aproximadamente 2
Ao fim de k iteraes, o tamanho do sub-array a analisar
aproximadamente n / 2k
Se no existir no array o valor procurado, o ciclo s termina
quando n / 2k 1 log2 n - k 0 k log2 n
InsertionSort(v, n) :
faz InsertSorted(,1,), InsertSorted(,2,), ...,
InsertSorted(,n-1,)
o n total de iteraes do ciclo for de InsertSorted :
no melhor caso, 1 + 1 + ... + 1 (n-1 vezes) = n-1 n
no pior caso, 1 + 2 + ... + n-1 = (n-1)(1 + n-1)/2 = n(n-1)/2 n2/2
em mdia, metade do anterior, isto , aproximadamente n2/4
T(n) = O(n2) (quadrtico) (pior caso e mdia) 10
5
Eficincia da Ordenao por Partio
As operaes realizadas mais vezes no passo de partio so as
comparaes efectuadas nos passos 2.3.1 e 2.3.2.
No conjunto dos dois passos, o nmero de comparaes
efectuadas :
no mnimo n (porque todas as posies do array so
analisadas)
no mximo n+2 (correspondente situao em que i=j+1 no
fim do passo 2.3.2)
Por conseguinte, o tempo de execuo do passo de partio
O(n)
Para obter o tempo de execuo do algoritmo completo,
necessrio somar os tempos de execuo do passo de partio,
para o array inicial e para todos os sub-arrays aos quais o
algoritmo aplicado recursivamente 11
6
Eficincia da Ordenao por Partio (cont.)
Prova-se que no caso mdio (na hiptese de os valores estarem
aleatoriamente distribudos pelo array), o tempo de execuo
da mesma ordem que no melhor caso, isto :
T(n) = O(n log n)
13
Quick sort
Fonte: Sahni, "Data Structures,
Algorithms and Applications in
C++"
7
Complexidade Espacial de QuickSort
O espao de memria exigido por cada chamada de QuickSort,
sem contar com chamadas recursivas, independente do
tamanho (n) do array
O espao de memria total exigido pela chamada de
QuickSort, incluindo as chamadas recursivas, pois
proporcional profundidade de recurso
Assim, a complexidade espacial de QuickSort :
O(log n) no melhor caso (e no caso mdio)
O(n) no pior caso
Exemplos:
-2, 11, -4, 13, -4, 2
1, -3, 4, -2, -1, 6
16
8
Subsequncia mxima - cbico
// MaxSubSum1: Calcula a Subsequncia mxima utilizando trs ciclos
17
Como melhorar
Remover um ciclo
Ciclo mais interior no necessrio
thisSum para prximo j pode ser calculado facilmente a
partir do antigo valor de thisSum
18
9
Subsequncia mxima - quadrtico
// MaxSubSum2: Calcula a Subsequncia mxima utilizando dois ciclos
19
possivel melhorar?
Algoritmo linear melhor : tempo de execuo
proporcional a tamanho de entrada (difcil fazer melhor)
Se Aij uma subsequncia com custo negativo, Aiq com q>j no a
subsequncia mxima
20
10
Subsequncia mxima - linear
// MaxSubSum3: Calcula a Subsequncia mxima utilizando um ciclo
21
11
Subsequncia mxima - recursivo
// MaxSubSumRec: Calcula a Subsequncia mxima utilizando recurso
23
24
12
Subsequncia mxima - recursivo
Anlise
Seja T(N) = tempo execuo para problema tamanho N
T(1) = 1 (recorda-se que constantes no interessam)
T(N) = 2* T(N/2) + N
duas chamadas recursivas, cada uma de tamanho N/2. O tempo de
execuo de cada chamada recursiva T(N/2)
tempo de execuo de caso c) N
25
26
13