Sie sind auf Seite 1von 6

Disciplina de Teoria da Computao

Trabalho sobre Complexidade de Algoritmos


complexidade de seus componentes bsicos
atribuio, sequncia, condicional, for e while

Docente: Simone Costa


Alunos: Thiago Davison Gonalves, Leonardo Campos Soares, Wagner Ishizaka
Penny, Wilson Cardoso

Complexidade das Estruturas Algortmicas


til utilizar uma metodologia para analisar a complexidade de um
algoritmo, passo a passo, a partir da complexidade de cada uma de suas
componentes. Somando-se a complexidade de cada estrutura que compe
um algoritmo obtm-se a complexidade do algoritmo. Sero consideradas a
seguir as estruturas:
Atribuio: a := b ou a b;
Sequncia: a ; b ;
Condicional: if a then b else c ;
Iterao definida (ou incondicional): for k = i to j do a ;
Iterao indefinida (ou condicional): while a do b ;
A descrio das metodologias utiliza as seguintes notaes:

c(a)Complexidadedeanopiorcaso
(n)Tamanhodeentrada
Ser considerada a complexidade pessimista ou de pior caso nas anlises a
seguir realizadas.
A complexidade de um algoritmo pode ser definida a partir da soma das
complexidades de suas partes. A complexidade de uma parte pode ser
absorvida pela de outra parte no seguinte caso:
A complexidade de a absorvida pela complexidade de b, se e somente
se
c N n N complexidade(a)(n) c . complexidade(b)(n). Neste caso,
diz-se que:
complexidade(a) + complexidade (b) = complexidade(b)
Por exemplo, considere complexidade(a) e complexidade(b) polinmios, n2
e n3 respectivamente.
Neste caso a complexidade de menor grau absorvida pela de maior grau.
Desta forma, complexidade(a) absorvida por complexidade(b), ou seja, n2
absorvida por n3.
A seguir cada uma das estruturas algortmicas citadas analisada e
definida uma expresso para a complexidade.

Atribuio
A atribuio uma estrutura sintaticamente simples e apresentada na
forma:
a := b ou a b
A complexidade associada a esta estrutura depende do tipo dos dados
envolvidos.
c (a := b) = c(:=) + c (b)
A atribuio pode ser uma operao simples, como a atribuio de um valor
a uma varivel, ou uma atribuio mais complexa, como a insero de um
nodo num grafo, a atualizao de uma matriz, dentre outros. A atribuio
pode ainda requerer uma avaliao de b, que pode ser uma expresso ou
uma funo. Nestes casos, existe um esforo computacional associado a
operao de atribuio c(:=) propriamente dita e um esforo associado
avaliao de b.
Sequncia
Esta estrutura tem a seguinte forma:
a;b;
A complexidade da sequncia a soma das complexidades das
componentes. A execuo de a, entretanto, pode alterar o volume de dados
para b, ento:
c(a ; b) (n) = c(a) (n) + c(b) (t(n))
onde, t(n) o tamanho da entrada aps a execuo de a, dado que antes da
execuo era n. O valor t(n) pode ser menor, maior ou igual a n.
Condicional
A estrutura condicional pode apresentar-se de diversas formas, sendo a
mais usual:
if a then b else c
A complexidade desta estrutura definida pela complexidade da avaliao
da condio a mais a complexidade de b ou a complexidade de c, conforme
o critrio de complexidade a ser utilizado.

Como esta se tratando de complexidade no pior caso, a complexidade


definida como a complexidade de a mais a complexidade mxima entre b e
c. Ou seja;
c(if a then b else c) = c(a) + max(c(b),c(c))
Ocorre, porm, que max no tem uma interpretao padro nesse caso, que
c(b) e c(c) no so simples naturais, mas sim funes de em .
Se tomarmos a complexidade de b e c com funes f(n) e g(n),
frequentemente, a partir de certo ponto, f(n) fica sempre maior do que g(n),
ou vice-versa. Ento, parece razovel tomar f ou g como max(f,g), conforme
o caso. Entretanto, pode acontecer, como no exemplo abaixo, que no exista
essa dominncia.
Para exemplificar este situao, pode-se imaginar um algoritmo que
manipula grafos e efetua duas operaes, uma cuja complexidade depende
exclusivamente do nmero de arestas e outra cuja complexidade varia
exclusivamente com o nmero de nodos. A funo da entrada do algoritmo
tem
duas componentes: nmero de arestas e nmero de nodos, combinados de
alguma forma (somados, por exemplo). O algoritmo constitui-se de um
condicional cujo ramo then efetua uma das operaes, por exemplo aquela
dependente do nmero de arestas, e o ramo else efetua a outra operao.
Aumentando o nmero de arestas, aumenta somente a complexidade do
ramo then e efetua uma das operaes, por exemplo aquela dependente do
nmero de arestas, e o ramo else efetua a outra operao. Aumentando o
nmero de arestas, aumenta somente a complexidade do ramo then e
aumentando o nmero de nodos, somente aumenta a complexidade do
ramo else. Desta forma, aumentando convenientemente a entrada, a
complexidade de cada ramo pode superar a do outro.
Nesse ponto, o mximo ponto a ponto pode ser usado, i.e., a funo:
max(f,g)(n) := max(f(n),g(n)).
Uma soluo simplista, mas muitas vezes usada, utilizar como mximo a
soma ponto a ponto das duas funes: max (f,g) = f + g, com
( f+g )(n) := f(n) + g(n).
Na verdade, h vrias possveis escolhas para mximo assinttico de
funes de naturais. Para definir o mximo entre funes preciso ter uma
relao de ordem entre elas. A estrutura condicional tambm pode
apresentar-se num modo mais simples sem a presena do else:
if a then b
neste caso, a complexidade desta estrutura simplificada para:
c(if a then b) = c(a) + c(b)

Iterao Definida ou Incondicional (For)


O caso mais simples de iterao incondicional (ou definida) :
for k = i to j do a
A execuo da iterao causa a execuo de a (j-i+1) vezes, com o valor de k
variando de i at j. Considerando-se que os valores de i e j no so alterados
na execuo de a, o nmero de iteraes determinado como (j-i+1). Pode
ocorrer, entretanto, a situao onde a complexidade de execuo de a varia
a cada iterao, por exemplo, alterando o tamanho da entrada, ento tem
que ser considerada a complexidade de cada iterao executada. Por estas
razes, a complexidade desta estrutura tem dois casos a serem
considerados:
Se a complexidade de execuo de a no varia durante a iterao:
c(for k = i to j do a) = (j-i+1).c(a)
De modo geral, se a complexidade da execuo de a varia durante a
iterao, a ordem da complexidade de pior caso ser determinado por uma
cota assinttica superior:
j(n)

c(for k=i to j do a)(n) = O( ( c(a).( s(ki(n))(n) )))


k=i(n)

onde s uma funo de tamanho mximo, s(n):=Max {tam(a(d)) / tam(d)


n}, sendo d a entrada que pode ter tamanho at n.
Iterao Condicional (ou Indefinida) (While)
As estruturas de iterao condicional (ou indefinida), podem assumir
vrias formas. A forma estudada ser o while, mas o tratamento para as
demais estruturas similar.
Estrutura while a do b
Neste tipo de iterao b ser executado sucessivamente enquanto a
condio a for satisfeita, possivelmente com alterao no volume dos
dados. Como o nmero de iteraes no est definido eventualmente o lao
pode no parar e ficar em loop, entretanto, em termos de anlise de
complexidade sero estudadas apenas iteraes que terminam. A
complexidade do while no pior caso tambm uma ordem assinttica
superior, dada por:

h(n)1

c(while a do b)(n) = O( c(a)( sh(n)(n) + (c(a)( si (n)+c(b) si (n))))


i=0

onde h(n):=Max{H(d) N / tam(d) n} sendo d a entrada e H(d) o nmero


de vezes que b precisa ser executado para que o teste a d valor falso.

Das könnte Ihnen auch gefallen