Você está na página 1de 25

Algoritmos e Estrutura

de Dados
Aula 02 Anlise de Algoritmos,
Notaes e Funes Comuns
Prof. Tiago A. E. Ferreira

Roteiro da Aula
Alguns Conceitos Bsicos
 Anlise de Algoritmos






Pior caso
Caso mdio
Dividir e conquistar

Funes



Notao Assinttica
Funes Comuns

Problema de Ordenao


Entrada:


Uma seqncia de n nmeros:




Sada:


Uma permutao dos nmeros de entrada:




< a1, a2, ..., an>

< a1, a2, ..., an>, tal que a1 a2 ... an (ordenao


crescente)

Obs.: os nmeros que deseja-se ordenar sero


chamados de chaves

Ordenamento por insero




O ordenamento por insero segue uma idia


bastante intuitiva:


Jogo de cartas: arrumamos as carta em uma certa


seqncia a medida que as pegamos

Procedimento
Procedimento: insertion-sort
 Entrada:


Arranjo de nmeros A[1...n]

Sada:


Arranjo de nmeros A[1...n] ordenados




Os nmeros de entrada so ordenados no local

Exemplo: Seja A=<5 2 4 6 1 3>

Pseudo-Cdigo
Loop invariante

Loop for
Loop While

O smbolo  indica um comentrio

Algoritmo correto?


Os loops invariantes so utilizados para ajudar o


entendimento do por que um algoritmo correto


Detalhes a serem mostrados:





Inicializao: ele verdadeiro antes da primeira iterao


Manuteno: Se for verdadeiro antes de uma iterao do loop,
continuar verdadeiro antes da prxima iterao
Trmino: Quando o loop termina, o invariante fornece uma
propriedade til que ajuda a mostrar que o algoritmo correto

Quando as duas primeiras propriedades so vlidas, o loop


invariante verdadeiro antes de toda a iterao do loop

Para o Exemplo de Ordenao




Inicializao:


j = 2, o sub-arranjo A[1..j-1] consiste apenas no nico


elemento A[1], que elemento de A e est ordendado


Isto mostra que o loop invariante vlido antes da primeira


iterao

Manuteno: (cada iterao mantm o loop invariante)

A medida que o for corre, desloca-se uma casa


direita em A (A[j-1] A[j-2] A[j-3]...) a procura da posio
ideal para A[j], mantendo o sub-arranjo A[1..j-1]
ordenado
 Trmino: (o que ocorre ao fim do loop)
 j = n+1, sendo gerado o sub-arranjo A[1..n] que contem
todos os elementos da seqncia de entrada e est
ordenado
 Logo o algoritmo correto!


Anlise de Algoritmos


Analisar Algoritmo ...




Prever recursos necessrios










Tempo de processamento
Memria necessria
Largura de banca para comunicaes
Etc...

Descartar algoritmos inviveis


Escolher algoritmo correto mais barato
computacionalmente

Anlise do algoritmo de ordenao




O custo do algoritmo de ordenao depender:




Tamanho da entrada


Nmero de itens na entrada (n) para o problema

Grau do pr-ordenamento da entrada

Tempo de execuo de um algoritmo




Em uma determinada entrada, o nmero de


operaes primitivas ou etapas executadas


Pode-se definir uma etapa por um passo no algoritmo que


seja o mais independente possvel da mquina
Considera-se que cada linha do pseudo-cdigo leve um
tempo constante para sua execuo
 i-sima linha, tempo ci

Custos por linha e total


N de vezes que
o teste do While
executado

Custo Total:

Melhor caso


No melhor caso, a entrada j se encontra


ordenada!


Custo:

Neste caso o teste do While executado apenas uma vez


para cada passo do for.
Este custo pode ser escrito como an+b, onde a e b so
constantes, i.e., uma funo linear em n

Pior Caso


No pio caso, a entrada se encontra ordenada de


forma decrescente! (ordem inversa de que se
deseja ordenar)


Custo:


Para o pior caso, o teste do While repetido j vezes para


cada passo do for.
Ento:

Pior Caso


Portanto o custo total dado por:

Esta uma funo do tipo: an2+bn+c




Um funo quadrtica de n

Notao O()


As equaes de custo so dependentes das


constantes c1, c2, ..., ck


Fica impraticvel tentarmos estabelecer os valores


exatos destas constantes

Desta forma, importante ter uma estimativa de


como o custo cresce com o tamanho n da
entrada


Considera-se o termo de maior importncia da


expresso de custo:



an2+bn+c
an+b

O(n2) : da ordem de n2
O(n) : da ordem de n

Notao O


Quando se considera o nmero de passo


efetuados por um algoritmo,


Pode-se desprezar constantes aditivas e


multiplicativas


Ex.: 3n ser aproximado por n

So considerados apenas valores assintticos,


termos de menor grau podem ser desprezados


n2+n +5 ser aproximado por n2

Notao O


Formalizando:


Sejam f e h funes positivas e uma varivel inteira n.


Diz-se que f O(h), escrevendo-se f=O(h), quando
existir uma constante c>0 e um valor inteiro n0, tal
que
n>n0 f(n) ch(n)
Ou seja, a funo h(n) um limite superior para a
funo f(n)

Propriedades, onde g e h so funes e k uma


constante:



O(g+h) = O(g) + O(h)


O(k.g) = k.O(g) = O(g)

Notao


A notao til para exprimir limites


superiores





Sejam f e g funes reais e positivas da varivel


inteira n. Diz que f (g), escrevendo-se f =(g),
quando ambas as condies f =O(g) e g =O(f) forem
verificadas
A notao exprime o fato que duas funes
possuem a mesma ordem de grandeza assinttica.
Exs.:


f=n2-1 ; g=n2 ; h=n3 , assim, f= (g) mas f no (h)

Notao


A notao utilizada para limites assintticos


inferiores


Sejam f e h funes reais positivas da varivel n. Dizse que f (h), escrevendo-se f= (h), quando
existir uma constante c > 0 e um valor inteiro n0, tal
que
n>n0 f(n) c.h(n)
Exemplo, se f=n2-1, ento vlido afirmar:





f= (n2)
f= (n)
f= (1)
Mas no vlido afirmar que f= (n3)

Funes Comuns


Funes montonas


Funo monotonicamente crescente (ou monotonamente


crescente)


Funo monotonicamente decrescente (ou


monotonamente decrescente)


Se mn f(m) f(n)

Se mn f(m) f(n)

Funes estritas


Funo estritamente crescente




Se mn f(m)< f(n)

Funo estritamente decrescente




Se mn f(m)f(n)

Funes Comuns


Piso



Teto



x-1 > x x x < x+1

Para qualquer inteiro n




Seja x um nmero real, seu teto o menor inteiro maior que ou igual a x
Notao x

Para todo real x:




Seja x um nmero real, seu piso o maior inteiro menor ou igual a x


Notao: X

n/2 + n/2 = n

Para qualquer real n 0 e inteiros a,b >0







n/a/b = n/ab
n/a /b = n/ab
a/b (a+(b-1))/b
a/b (a-(b-1))/b

Funes Comuns


Aritmtica Modular


Para qualquer inteiro a e qualquer inteiro positivo n,


a mod n = a - a/n n
Se (a mod n) = (b mod n), ento a b (mod n) (a equivalente a
b, modulo n)

Polinmios


Dado um inteiro no negativo d, um polinmio em n de grau d


uma funo p(n) da forma,
d

p (n ) = ai n i
i =0


dito que uma funo f(n) polinomialmente limitada se


f(n)=O(nk) para alguma constante k.

Funes Comuns


Funo Exponencial



Para todo n e a 1, a funo an monotonicamente crescente em n.


Para a>1,

nb
lim n = 0 n b = O a n
n a

( )

Portanto, qualquer funo exponencial com base escritamente maior


que 1 cresce mais rapidamente que qualquer funo polinomial

Funo Logartmica

log b n
lim a = 0 log b n = O n a
n
n

( )

Para qualquer constante a>0. Qualquer funo polinomial positiva


cresce mais rapidamente que qualquer funo polilogartmica.

Funes Comuns


Funo Fatorial

se n = 0
1
n!=
n (n 1)! se n > 0

Note que n!nn, logo n!=O(nn)

Iterao Funcional

f


(i )

Se f(n)=2n, ento f(i)(n)=2in

n
=
(i 1)
(n )
f
f

se i = 0
se i > 0

Nmeros de Fibonacci


Os nmeros de Fibonacci so definidos como:









F0=0
F1=1
Fi=Fi-1+Fi-2, para i 2

Seqncia: 0,1,1,2,3,5,8,13,21,34,55,89,...
Uma forma alternativa e definir os nmeros de Fibonacci
a partir da razo urea e seu conjugado ^

1+ 5
=
= 1,61803K
i i

2
Fi =
5
1 5

= 0,61803K
=
2

Você também pode gostar