You are on page 1of 51

Algoritmos An

alise de Algoritmos Complexidade Computacional

Algoritmos

Prof. M.e. Walter Aoiama Nagai

UNIFEI Campus Avancado de Itabira

walternagai@unifei.edu.br

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

1 Algoritmos

2 Analise de Algoritmos
Complexidade de Algoritmos
Notacoes de Complexidade
Revisao de alguns fatos matematicos

3 Complexidade Computacional
Exemplos de Analise Computacional
Recorrencias

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Definicoes

Um algoritmo e qualquer procedimento computacional bem


definido que toma algum valor ou conjunto de valores, como
entrada e produz algum valor ou conjunto de valores, como
sada. Um algoritmo e, portanto, uma sequencia de passos
computacionais que transformam a entrada para a sada.
Um algoritmo como uma ferramenta para resolver um
problema computacional bem especificado.
Um algoritmo e dito ser correto se, para cada instancia de
entrada, ele para com a sada correta. Diz-se entao que um
algoritmo correto resolve o problema computacional dado.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Problemas resolvidos por Algoritmos

O Projeto Genoma Humano tem feito grandes progressos em


direcao a determinar as seq
uencias dos 3 bilhoes de pares de
bases qumicas que comp oem o DNA humano, armazenar
essas informacoes em bancos de dados e desenvolvimento de
ferramentas para analisar estes dados.
A Internet permite que pessoas de todo o mundo acessem e
recuperem quantidades grandes de informacao rapidamente.
Com a ajuda de algoritmos inteligentes, sites na Internet sao
capazes de gerenciar e manipular esse grande volume de
dados.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Problemas resolvidos por Algoritmos

O comercio eletronico permite que os bens e servicos sejam


negociados e trocados eletronicamente e isso depende da
privacidade de informacoes pessoais, como n umeros de cartoes
de credito, senhas e extratos bancarios. As principais
tecnologias utilizadas no comercio eletronico incluem
criptografia de chave publica e assinaturas digitais que sao
baseados em algoritmos numericos e teoria dos n umeros.
Fabricacao e outras empresas comerciais, muitas vezes,
precisam alocar recursos da maneira mais benefica a seus
negocios.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Algoritmos como Tecnologia

Efici encia diferentes algoritmos para resolver o mesmo


problema, muitas vezes, diferem dramaticamente em sua
eficiencia. Essas diferencas podem ser muito mais
significativas do que as diferencas devido ao hardware e
software.
Comparando com outras tecnologias:
arquiteturas de computadores e tecnologias avancadas de
fabricacao;
interfaces graficas de usuario (GUIs);
sistemas orientados a objetos,
tecnologias da Web integrados e
networking rapido, com e/ou sem fio.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Exemplo 1

Computador A executa 1010 instrucoes de maquina por segundo.


Considere que um algoritmo de ordenacao para um vetor de
tamanho N tenha 2 N 2 instruc
oes de maquina para serem
executadas. Qual o tempo gasto deste algoritmo para um vetor de
tamanho 107 ?

2 (107 )2
= 20000s
= 5.56h
1010

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Exemplo 2

Computador B executa 107 instruc


oes de maquina por segundo.
Considere que um algoritmo de ordenacao para um vetor de
tamanho N tenha 50 N log10 N instruc
oes de maquina para
serem executadas. Qual o tempo gasto deste algoritmo para um
vetor de tamanho 107 ?

50 107 log10 107


= 350s
= 5.83m
107

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Computador B e mais rapido que o Computador A ?

Algoritmo de ordenacao de B e mais rapido que o algoritmo de


ordenacao do computador A ?

O que aconteceria se no computador A fosse executado o


algoritmo do computador B?

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Analise de Algoritmos

Introducao `a Analise de Algoritmos


Complexidade Temporal
Complexidade Assint
otica
Recursividade
Revisao de Fatos Matematicos
Tecnicas de Demonstracao

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Tecnicas de Desenvolvimento de Algoritmos

Algoritmos de Forca-Bruta
Algoritmos Backtracking
Algoritmos Greedy Gulosos
Algoritmos de Programacao Dinamica
Algoritmos de Otimizacao
Algoritmos Branch-and-bound
Algoritmos Probabilsticos
Algoritmo de Monte Carlo
Algoritmo de Las Vegas

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Grafos

Coloracao de Grafos
Cobertura de Grafos
Caixeiro Viajante
Empacotamento da Mochila

Arvore Geradora Mnima

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Algoritmos

Uma seq uencia finita de instruc


oes computaveis e
nao-ambguas capazes de solucionar um problema.
Um algoritmo deve ter as seguintes propriedades:
Finitude - seq
uencia finita de instruc
oes;
Objetividade - determinstico;
Generalidade - soluciona uma classe de problemas;
Estruturas de dados estabelecem formas de armazenar
informacoes.
Algoritmos eficientes utilizam
otimas estruturas de dados

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Detalhando Algoritmos

Estrategia
1 Especificacao (definir propriedades);
2 Arquitetura (estruturas de dados);
3 Complexidade (tempo de execucao/mem oria);
4 Implementacao (linguagem de programacao);
5 Testes (submiss ao de entradas para testar as propriedades
especificadas).

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Algoritmos vs Estruturas de Dados

Algoritmos sao metodos Estruturas de dados


para resolver problemas determinam a eficiencia do
algoritmo
Problemas possuem Algoritmos simples
dados; podem usar estruturas
de dados complexas;
Dados sao tratados Algoritmos complexas
computacionalmente; podem usar estruturas
de dados simples;

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Forca Bruta (Brute Force)

O algoritmo examina todas as alternativas possveis para


encontrar uma solucao particular;
Normalmente, nao encontra uma solucao em um tempo
otimo, mas garante que a encontra.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Dividir e Conquistar (Divide-and-Conquer )

Resolver um problema pode ser difcil, mas dividi-lo pode


torna-lo significativamente mais simples;
Dividir o problema em problemas menores e resolver cada um
de uma forma independente;
Combinar as solucoes de todos os sub-problemas para obter a
solucao do problema original;
A etapa de recombinacao das soluc
oes e normalmente crtica
e dispendiosa em termos de tempo;

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Metodo Guloso (Greedy )

Varios algoritmos possuem procedimentos iterativos e


escolhem a cada iteracao um n
umero de possveis alternativas;
Selecionam as alternativas mais corretas que podem levar a
solucao, porem pode selecionar as alternativas que nao levam
a solucao correta;

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Programacao Dinamica (Dynamic Programming )

Divide o problema em sub-problemas e utiliza as solucoes


desses sub-problemas para construir a solucao do problema
original;
O n
umero de sub-problemas pode se tornar demasiado grande,
podendo aumentar exponencialmente o tempo de execucao;

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Analise de Algoritmos

Desenvolver um algoritmo para um problema, `as vezes, pode


ser considerado uma tarefa trivial, porem oferecer um
algoritmo que tenha um otimo desempenho para um problema
consiste em uma ardua tarefa.
Ate o presente momento do curso foram observados varios
algoritmos para diferentes problemas, sendo que todos tinham
uma complexidade de poucas iteracoes.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Algoritmo de Busca
Na Figura 1 pode ser observado um algoritmo para busca de um
valor numerico, ou elemento, em um vetor.

1 int busca (int a[], int tam, int elem)


2 {
3 for (int i = 0; i < tam; i++) {
4 if (a[i] == elem)
5 return i; // retorna posi
c~ao
6 }
7 return -1;
8 }
Figura: Algoritmo de busca linear por um elemento em um vetor.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Algoritmo de Busca

Na linha 3 esta a condicao do laco, ou seja, o laco inicia no valor 0


(zero) ate o final do vetor que seria (tam -1). Com base nessa
condicao, as possveis situac
oes encontradas durante a busca do
valor seriam:
Caso o elemento esteja na primeira posicao e retornado o
valor 0 (zero);
Caso o elemento esteja na u
ltima posicao e retornado o valor
(tam-1);
Caso o elemento esteja em qualquer posicao indicada por i, e
retornado o valor do mesmo.
Caso o elemento nao esteja no vetor e retornado o valor -1;

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Algoritmo de Busca

Por essas situacoes levantadas pode-se observar alguns


comportamentos desse algoritmo:
A melhor situacao e encontrar o elemento na primeira posicao,
ou seja, apenas 1 comparacao (mais rapida);
A pior situacao e encontrar o elemento na u
ltima posicao
(mais demorada), ou seja, tam comparac oes;
A situacao media e encontrar o elemento entre a primeira e a
u
ltima posicoes, ou seja, um numero aproximado de (tam -
1)/2 comparacoes.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Algoritmo de Busca utilizando a estrategia de sentinela


Na Figura 2 pode ser observado o algoritmo para busca de um
valor numerico, ou elemento, em um vetor usando a estrategia de
sentinela. O sentinela, proprio valor a ser procurado, esta na
u
ltima posicao do vetor.
1 int busca sentinela (int a[], int tam, int elem)
2 {
3 int i = 0; a[tam] = elem;
4 while (a[i] != elem) i++;
5 if (i == tam) return -1;
6 return i;
8 }
Figura: Algoritmo de busca em um vetor usando sentinela.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Algoritmo de Busca

A escolha por um determinado algoritmo deve ser feita


considerando-se 3 caractersticas:
1 Eficiencia: cumpre com o objetivo;
2 Desempenho: rapidez com que e solucionado;
3 Robustez: pode ser utilizado independente do tamanho do
problema.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Complexidade de Algoritmos

Motivacao

Uma caracterstica inerente de qualquer algoritmo e seu


tempo de execucao.
Esse tempo de execucao e determinado por metodos
empricos, ou seja, pela pr
opria execucao do algoritmo
considerando entradas diversas.
Por outro lado, existem os metodos analticos que conseguem
obter uma expressao matematica que traduza o
comportamento de tempo de um algoritmo.
Essa expressao matematica seria independente do computador
utilizado, da linguagem e compiladores empregados e das
condicoes locais de processamento.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Complexidade de Algoritmos

Grafico de complexidades comuns de algoritmos

Figura: Grafico de complexidade de algoritmos de complexidade O(N), O(log(N)) e


O(N.log(N)
Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira
Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Complexidade de Algoritmos

Grafico de complexidades de algoritmos quadraticos

Figura: Grafico de complexidade de algoritmos de complexidade O(N 2 ), O(N 3 ).


Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira
Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Complexidade de Algoritmos

Grafico de complexidades de algoritmos exponenciais

Figura: Grafico de complexidade de algoritmos de complexidade O(2N ), O(3N ).


Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira
Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Complexidade de Algoritmos

Graficos completo com todas as complexidades de


Algoritmos

Figura: Grafico de complexidade de algoritmos mais comuns.


Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira
Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Complexidade de Algoritmos

Modelo de Analise Analtica

Quantidade de dados de entrada seja suficientemente grande;


Constantes aditivas ou multiplicativas na expressao
matematica nao serao consideradas;
Determinar a variavel em relacao `a qual a expressao
matematica avaliara o tempo de execucao. A ideia e exprimir
o tempo de execucao em funcao da entrada.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Complexidade de Algoritmos

Modelo de Analise Analtica

Um algoritmo possui elementos fundamentais para sua


execucao denominados de passos.
Cada passo consiste na execucao de um n umero fixo de
operacoes basicas cujos tempos de execucao sao consideradas
constantes.
A operacao basica de maior freq
uencia de execucao no
algoritmo e denominada operacao dominante.
Em cima dessa operacao dominante e que sera feita a analise
de um algoritmo. Por exemplo, em algoritmos de ordenacao a
operacao dominante seria a comparacao de elementos de um
vetor.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Complexidade de Algoritmos

Algoritmo de soma de 2 matrizes

1 void sum matrix(int a[][], int b[][], int c[][], int tam)
2 {
3 int i, j;
4 for (i = 0; i < tam; i++) {
5 for (j = 0; j < tam; j++) {
6 c[i][j] = a[i][j] + b[i][j];
7 }// fim for
8 }// fim for
9 }// fim sum matrix

Figura: Algoritmo de soma de elementos de 2 matrizes de tamanho igual.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Complexidade de Algoritmos

Algoritmo de soma de 2 matrizes

Considerando o algoritmo descrito na Figura 7, a soma de 2


matrizes a e b para uma matriz soma c, a operacao
dominante e a atribuicao de valores da soma dos elementos
das 2 matrizes.
Observe que nas linhas 4 e 5 sao descritos dois lacos for.
Quando i for igual a 0 (zero), j sera executado tam vezes, se i
igual a 1, j sera executado tam vezes, e assim por diante.
Para o problema da soma de matrizes, esse algoritmo tera
executado tam tam atribuic
oes de valores, sendo que tam e
o tamanho da entrada.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Complexidade de Algoritmos

Complexidade de Tempo

A nocao de complexidade de tempo e descrita da seguinte forma:


Seja A um algoritmo, {E1 , . . . , Em } o conjunto de todas as
entradas possveis de A.
Denote por ti , o numero de passos efetuados por A, quando
entrada for Ei . Definem-se:
Complexidade do pior caso, maxEi E {ti }, o maior n
umero de
passos ti de um determinada entrada Ei pertencente ao
conjunto de todas as entradas possveis;
Complexidade do melhor caso, minEi E {ti }, o menor n
umero
de passos ti de uma determinadaP entrada E i ;
Complexidade do caso medio, 1<=i<=m pi ti , na qual a pi e
a probabilidade de ocorrencia da entrada Ei .

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Notac
oes de Complexidade

Notacao O
Definic
ao Sejam f , h func
oes reais positivas de vari
avel inteira n. Diz-se que f
e O(h),
escrevendo-se f = O(h), quando existir uma constante c > 0 e um valor inteiro n0 , tal
que n > n0 f (n) <= c.h(n)

A notac
ao O atua como um limite superior para os valores da func
ao f .

f = n2 1 f = O(n2 )
f = n2 1 f = O(n3 )
f = 403 f = O(1)
f = 5 + 2.logn + 3.logn2 f = O(logn2 )
f = 5 + 2.logn + 3.logn2 f = O(n)
f = 3n + 5.logn + 2 f = O(n)
f = 5.2n + 5.n10 f = O(2n )

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Notac
oes de Complexidade

Notacao
Definic
ao Sejam f , h funco
es reais positivas de vari
avel inteira n. Diz-se que f
e (h),
escrevendo-se f = (h), quando existir uma constante c > 0 e um valor inteiro n0 , tal
que n > 0 f (n) >= c.h(n)
A notac
ao est
a relacionada ao limite inferior para os valores da func
ao f .

f = n2 1 f = (n2 )
f = n2 1 f = (n)
f = n2 1 f = (1)
A funcao f = (n3 ) nao existe para f = n2 1, pois e um
omio (n2 1) da expressao matematica.
valor superior ao polin
Definic
ao Seja P um problema com uma entrada de tamanho n. Um limite inferior
para o problema e denotado por l, tal que a complexidade de pior caso de qualquer
algoritmo que resolva P e (l). Isto e, todo algoritmo que resolve P efetua, pelo
menos, (l) passos. Sendo assim, se algum algoritmo A que resolva o problema P
possui complexidade O(l) ele
e considerado um algoritmo
otimo para o problema P.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Notac
oes de Complexidade

Notacao

Definic
ao Sejam f , g func
oes reais positivas da vari
avel inteira n. Diz-se que f
e (g ),
escrevendo-se f = (g ), quando ambas as condic oes f = O(g ) e g = O(f ) forem
verificadas. A notac
ao exprime o fato de que duas funco es possuem a mesma ordem
de grandeza assintotica.

A notacao define limites superior e inferior justapostos.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Revis
ao de alguns fatos matem
aticos

Logaritmos e expoentes

A funcao logaritmo e definida como: logb a = c , pois a = b c


As seguintes identidades sao validas para logaritmos e expoentes:
logb ac = logb a + logb c
logb (a/c) = logb a logb c
logb ac = c.logb a
logb a = (logc a)/(logc b)
b logc a = alogc b
(b a )c = b ac
b a .b c = b a+c
b a /b c = b ac

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Revis
ao de alguns fatos matem
aticos

Funcoes e relacoes inteiras

As funcoes teto e piso sao definidas respectivamente, como segue:


dxe = o menor inteiro maior ou igual a x;
bxc = o maior inteiro menor ou igual a x;
A funcao modulo (ou resto) e definida para inteiros a >= 0 e
b > 0 como:
jak
a mod b = a b
b
A funcao fatorial e definida como:

n! = 1 2 (n 1) n

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Revis
ao de alguns fatos matem
aticos

Somatorias
Fatoracao de somat
orias desde que uma constante a nao
dependa de i;
n
X n
X
af (i) = a f (i)
i=1 i=1
Troca de ordem;
n X
X m m X
X n
f (i, j) = f (i, j)
i=1 j=1 j=1 i=1
Somatoria de n
umeros inteiros;
n
X n(n + 1)
i = 1 + 2 + + (n 1) + n =
2
i=1
Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira
Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Revis
ao de alguns fatos matem
aticos

Somatorias
Somatoria de n
umeros inteiros elevado ao quadrado;
n
X n(n + 1)(2n + 1)
i = 1 + 4 + (n 1)2 + n2 =
6
i=1

Progressao geometrica para qualquer n


umero real fixo
0 < a 6= 1
n
X 1 an+1
ai =
1a
i=1
Progressao geometrica para qualquer n
umero real fixo
0<a<1
n
X 1
ai =
1a
i=1

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Analise de Complexidade Computacional


A analise de complexidade de um algoritmo, funcao de custo ou
complexidade T , deve ser feita de modo independente da execucao
em maquinas. A funcao T pode ser de dois tipos: tempo ou
espaco.
Complexidade de Tempo: Seja n o tamanho do problema a
ser resolvido, diz-se que T (n) e a medida de quantidade de
tempo necessario para resolver o problema. Entao, T (n) e a
complexidade de tempo do algoritmo.
Complexidade de Espaco: Seja n o tamanho do problema a
ser resolvido, diz-se que T (n) e medida de quantidade de
memoria necessaria para resolver o problema. Entao, T (n) e a
complexidade de espaco do algoritmo.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Classe de funcoes

Classe de func oes Complexidade


logartmica T (logn)
linear T (n)
quadratica T (n2 )
polinomial T (nk ) com k > 1
exponencial T (an ) com a > 1

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Exemplos de An
alise Computacional

Elemento maximo

int MaxElem (int a[]) Considere o algoritmo descrito


{ na Figura 8. para encontrar o
int i, maior elemento de um vetor de
temp;
n
umeros inteiros.
temp = a[0];
for (i = 1; i < n; i++) { A complexidade de tempo T (n)
if (temp < a[i]) deve observar o melhor caso, o
temp = a[i]; pior caso e o caso medio de
} execuc
ao do algoritmo.
return temp;
} A operac
ao dominante do
algoritmo e a comparac
ao de
Figura: Algoritmo para encontrar o elementos, pois e a operac
ao
elemento de valor maximo no vetor. determinante da execucao do
algoritmo.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Exemplos de An
alise Computacional

Elemento maximo

int MaxElem (int a[]) O melhor caso acontece quando


{ o maior elemento est a na
int i, primeira posicao, ou seja, em
temp;
a[0]. Neste caso, o valor de
temp = a[0];
for (i = 1; i < n; i++) { T (n) e igual a 1, T (n) e igual a
if (temp < a[i]) 1.
temp = a[i]; O pior caso e quando o
} elemento esta na ultima posic
ao
return temp;
} a[n]. Como a busca comeca na
segunda posicao, a[1], o valor
Figura: Algoritmo para encontrar o de T (n) = n 1.
elemento de valor maximo no vetor. O caso medio e obtido
observando-se (n + 1)/2
comparaco
es.

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Exemplos de An
alise Computacional

Elemento maximo
O valor do caso medio e obtido considerando pi a probabilidade do
i-esimo elemento do vetor ser escolhido e a funcao T (n) escrita
como:
T (n) = 1 p1 + . . . + i pi + . . . + n pn
A probabilidade de escolher qualquer elemento pode ser
considerada igual a 1/n, ou seja, probabilidades iguais.
T (n) = (1 + 2 + ... + i + ... + (n 1) + n) (1/n)
A somatoria de ni=1 i = n(n + 1)/2, entao
P
T (n) = n(n + 1)/2 (1/n) = (n + 1)/2 c.q.d
Usando a notacao O, determina-se que o algoritmo possui uma
complexidade O(T (n) = n 1) = n, pois desconsidera-se os
termos aditivos e multiplicativos.
Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira
Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Exemplos de An
alise Computacional

Ordenacao

void ordena (int a[], int tam) Na linha 4 da Figura 10, o laco
{ int i, j, temp; sera executado (tam 1) vezes,
for(i = 0; i<tam-1; i++) { enquanto na linha 5 o laco e
for (j = i+1; j<tam; j++) {
executado (n tam 1) vezes,
if (a[i] > a[j]) {
temp = a[i]; resultando em uma somat oria
a[i] = a[j]; (n 1) + (n 2) + . . . + 2 + 1.
a[j] = temp; Usando a somat oria de valores
}// fim if inteiros: P
}// fim for tam1
T (tam) = i=1 i=
}// fim for tam(tam1) tam2 tam
}// fim ordena 2
= 2
2
A func
ao T pode ser reescrita
Figura: Algoritmo de ordenacao de 2
como: T (n) = n2 n2 , caso
um vetor de numeros inteiros. tam = n.
Usando a notac
ao O, a
complexidade fica O(n) = n2 .
Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira
Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Recorr
encias

Recorrencia e a chamada recursiva

Quando um algoritmo possui uma chamada recursiva, o seu


tempo de execucao pode ser descrito por uma recorrencia.
Uma recorrencia e uma equacao ou desigualdade que descreve
uma funcao em termos de seus valores sobre entidades
menores.
O mergesort tem a seguinte f ormula de recorrencia
T (n) = 2 T (n/2) + n, ou seja, a cada chamada de T (n)
existem duas chamadas T (n/2) mais uma constante de valor
n.
A ideia de resolver recorrencias e expandi-la e expressa-la
como uma soma de termos dependentes de n e das condicoes
iniciais.
Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira
Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Recorr
encias

Exemplos

T (n) = T (n 1) + n, para n >= 2, T (1) = 1


Se n = (n 1), a func
ao fica igual a T (n 1) = T (n 2) + (n 1)
Se n = (n 2), T (n 2) = T (n 3) + (n 2), e assim por diante,
chega-se a seguinte equac
ao de T (n) :

T (n) = T (n k) + (n (k 1)) + ... + n (1)


Considerando que T (1) = 1, pode-se criar uma desigualdade que
(n k) = 1, ou seja, k = n 1. Substituindo essa desigualdade na
Equac
ao 1 chega-se ao seguinte resultado:
T (n) = T (n (n 1)) + (n (n 2)) + ... + n
T (n) = T (1) + 2 + 3 + ... + n
T (n) = 1 + 2 + 3 + ... + n
Pn n(n+1) 2
T (n) = w =1 w = 2
= n 2+n

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos
Algoritmos An
alise de Algoritmos Complexidade Computacional

Recorr
encias

Exemplos

T (n) = T ( n2 ) + 1, para n >= 2, T (1) = 0


T (n) = T ( n2 ) + 1
= T ( n4 ) + 1 + 1
= T ( n8 ) + 1 + 1 + 1
..
.
= T ( 2nk ) + k
Para resolver essa func ao T (n), considere que 2nk = 1, ou seja, n = 2k .
Aplicando o log2 nos dois lados da desigualdade a func ao fica igual a
log2 n = log2 2k , resultando em k = log2 n. Aplicando na func ao T (n):
T (n) = T ( 2nk ) + k
= T (1) + log2 n = 0 + log2 n
= log2 n

Prof. M.e. Walter Aoiama Nagai UNIFEI-Itabira


Algoritmos

You might also like