Vous êtes sur la page 1sur 13

Antes de mais nada. . .

Uma versao anterior deste conjunto de slides foi



MC448 Analise de Algoritmos I
preparada por Cid Carvalho de Souza e Candida Nunes

da Silva para uma instancia anterior desta disciplina.
O que voces tem em maos e uma versao modificada

Cid Carvalho de Souza Candida Nunes da Silva preparada para atender a meus gostos.
Orlando Lee Nunca e demais enfatizar que o material e apenas um guia
deve ser usado como unica
e nao fonte de estudo. Para
isso consultem a bibliografia (em especial o CLR ou
17 de agosto de 2009 CLRS).

Orlando Lee


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos


Agradecimentos (Cid e Candida)
Introducao


Varias pessoas contriburam direta ou indiretamente com
deste material.
a preparacao O nome da disciplina e Analise
de Algoritmos.
Algumas destas pessoas cederam gentilmente seus O que e entao
um algoritmo?
arquivos digitais enquanto outras cederam gentilmente o
e dando sugestoes.
seu tempo fazendo correcoes Informalmente, um algoritmo e um procedimento
computacional bem definido que:

Uma lista destes colaboradores (em ordem alfabetica) e
dada abaixo: recebe um conjunto de valores como entrada e
Picinin de Mello
Celia produz um conjunto de valores como sada.
Jose Coelho de Pina Um algoritmo e uma ferramenta para resolver um determinado
Orlando Lee
problema computacional. A descricao do problema define a
Paulo Feofiloff
Pedro Rezende que deve existir entre a entrada e a sada do algoritmo.
relacao
Ricardo Dahab
Zanoni Dias


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos

Exemplo: Problema da Ordenacao
Instancia de um problema

Problema: rearranjar um vetor A[1 . . . n] em ordem crescente. Dizemos que o vetor


Entrada:
1 n
1 n 33 55 33 44 33 22 11 99 22 55 77
33 55 33 44 33 22 11 99 22 55 77

e uma instancia
do problema de ordenacao.
Sada:

Em geral, uma instancia de um problema e um conjunto de
1 n valores que serve de entrada para o problema (respeitando as
11 22 22 33 33 33 44 55 55 77 99 impostas na descricao
restricoes deste).


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos


MC448 - Analise de Algoritmos
A importancia
dos algoritmos para a computacao

O uso/desenvolvimento de algoritmos eficientes e desejavel



O que veremos nesta disciplina?
em varios contextos:
projetos de genoma de seres vivos
Como estimar a quantidade de recursos (tempo,

memoria) que um algoritmo consome/gasta = analise
de rede mundial de computadores
complexidade geografica
sistemas de informacao
Como provar a corretude de um algoritmo
comercio
eletronico

Como projetar algoritmos eficientes (= rapidos) para planejamento da producao de industrias


varios problemas computacionais
logstica de distribuicao
...


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Algoritmos e tecnologia Algoritmos e tecnologia

de um vetor de n elementos
Exemplo: ordenacao
O avanco da tecnologia permite a construcao de maquinas


cada vez mais rapidas. Isto possibilita que um algoritmo Suponha que os computadores A e B executam
para determinado problema possa ser executado mais por segundo, respectivamente.
1G e 10M instrucoes
rapidamente. Ou seja, A e 100 vezes mais rapido
que B.
Paralelamente a isto, ha o projeto/desenvolvimento de Algoritmo 1: implementado em A por um excelente
algoritmos intrinsecamente mais eficientes para
programador em linguagem de maquina
(ultra-rapida).
determinado problema. Isto leva em conta apenas as Executa 2n2 instrucoes.

caractersticas inerentes ao problema, desconsiderando
detalhes de software/hardware.
Algoritmo 2: implementado na maquina B por um
programador mediano em linguagem de alto nvel
Vamos comparar estes dois aspectos atraves de um
dispondo de um compilador meia-boca.
exemplo.

Executa 50n log10 n instrucoes.


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos

Algoritmos e tecnologia Algoritmos e tecnologia

O que acontece quando ordenamos um vetor de um


de elementos? Qual algoritmo e mais rapido?
milhao
O uso de um algoritmo em lugar de outro pode levar a
Algoritmo 1 na maquina A:
2.(106 )2 instruc
oes
ganhos extraordinarios de desempenho.
2000 segundos
109 instruc
oes/segundo importante quanto o projeto de
Isso pode ser tao
hardware.
Algoritmo 2 na maquina B:
50.(106 log 106 ) instruc
oes significativa que nao
A melhoria obtida pode ser tao
100 segundos
107 instruc
oes/segundo poderia ser obtida simplesmente com o avanco da
tecnologia.

Ou seja, B foi VINTE VEZES mais rapido do que A!
de elementos, esta razao
Se o vetor tiver 10 milhoes sera
de 2.3 dias para 20 minutos!


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Complexidade de algoritmos
Exemplo: Problema da Ordenacao

Problema: ordenar um vetor em ordem crescente


Queremos projetar/desenvolver algoritmos eficientes

(rapidos). Entrada: um vetor A[1 . . . n]

Mas o que seria uma boa medida de eficiencia de um Sada: vetor A[1 . . . n] rearranjado em ordem crescente
algoritmo?
Nao estamos interessados em quem programou, em que Vamos comecar analisando o algoritmo de ordenacao baseado

linguagem foi escrito e nem qual a maquina foi usada!
no metodo (Insertion sort).
de insercao

Queremos um criterio uniforme para comparar algoritmos. Isto nos permitira destacar alguns dos aspectos mais
importantes no estudo de algoritmos para esta disciplina.


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos

em um vetor ordenado
Insercao
Como fazer a insercao

chave = 38
1 i j n
1 j n 20 25 35 40 44 55 38 99 10 65 50
20 25 35 40 44 55 38 99 10 65 50
1 i j n
O subvetor A[1 . . . j 1] esta ordenado. 20 25 35 40 44 55 99 10 65 50
Queremos inserir a chave = 38 = A[j] em A[1 . . . j 1] de
modo que no final tenhamos: 1 i j n
1 j n 20 25 35 40 44 55 99 10 65 50
20 25 35 38 40 44 55 99 10 65 50
1 i j n
20 25 35 40 44 55 99 10 65 50
Agora A[1 . . . j] esta ordenado.
1 i j n
20 25 35 38 40 44 55 99 10 65 50


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
por insercao
Ordenacao por insercao
Ordenacao
chave 1 j n
99 20 25 35 38 40 44 55 99 10 65 50

chave 1 j n
99 20 25 35 38 40 44 55 99 10 65 50

chave 1 j n chave 1 j n
10 20 25 35 38 40 44 55 99 10 65 50 65 10 20 25 35 38 40 44 55 99 65 50

chave 1 j n chave 1 j n
10 10 20 25 35 38 40 44 55 99 65 50 65 10 20 25 35 38 40 44 55 65 99 50

chave 1 j
50 10 20 25 35 38 40 44 55 65 99 50

chave 1 j
50 10 20 25 35 38 40 44 50 55 65 99


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos

um algoritmo
Descricao
Ordena-Por-Insercao

de
Podemos formalizar o algoritmo O RDENA - POR -I NSERC AO

varias formas:
Pseudo-codigo

de alto nvel: C,
usando uma linguagem de programacao
Pascal, Java etc O RDENA -P OR -I NSERC A O(A, n)

implementando-o em linguagem de maquina diretamente 1 para j 2 ate n faca

executavel em hardware 2 chave A[j]
3 Insere A[j] no subvetor ordenado A[1..j 1]

em portugues
4 i j 1

em um pseudo-codigo de alto nvel, como no livro do 5 enquanto i 1 e A[i] > chave faca
CLRS 6 A[i + 1] A[i]
7 i i 1
Usaremos essencialmente as duas ultimas
alternativas nesta 8 A[i + 1] chave
disciplina.


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos

Analise do algoritmo
O algoritmo para

(A, n)
O RDENA -P OR -I NSERC AO
1 para j 2 ate n faca
...
O que e importante analisar/considerar? 4 i j 1
5 enquanto i 1 e A[i] > chave faca
Corretude do algoritmo: e preciso mostrar que para toda 6 ...

instancia e devolve uma
do problema, o algoritmo para 7 i i 1
resposta correta. 8 ...
Complexidade de tempo do algoritmo: quantas intrucoes No laco enquanto na linha 5 o valor de i diminui a cada
necessarias
sao no pior caso para ordenar os n e o valor inicial e i = j 1 1. Logo, a sua execucao
iteracao
elementos? em algum momento por causa do teste condicional i 1.
para
(o contador j atingira o
O laco na linha 1 evidentemente para
valor n + 1 apos
n 1 iteracoes).


Portanto, o algoritmo para.


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos


Ordena-Por-Insercao Invariantes de laco e provas de corretude

(A, n)
O RDENA -P OR -I NSERC AO
1 para j 2 ate n faca um invariante de um laco e uma propriedade
Definicao:
2 chave A[j]
que relaciona as variaveis
do algoritmo a cada execucao
3 Insere A[j] no subvetor ordenado A[1..j 1] completa do laco.
4 i j 1
Ele deve ser escolhido de modo que, ao termino do laco,
5 enquanto i 1 e A[i] > chave faca tenha-se uma propriedade util
para mostrar a corretude do
6 A[i + 1] A[i] algoritmo.
7 i i 1 A prova de corretude de um algoritmo requer que sejam
8 A[i + 1] chave
encontrados e provados invariantes dos varios lacos que o

compoem.
O que falta fazer?
Em geral, e mais difcil descobrir um invariante apropriado
Verificar se ele produz uma resposta correta.
do que mostrar sua validade se ele for dado de bandeja. . .
Analisar sua complexidade de tempo.


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Exemplo de invariante Corretude de algoritmos por invariantes

(A, n)
O RDENA -P OR -I NSERC AO
1 para j 2 ate n faca
A estrategia tpica para mostrar a corretude de um algoritmo
2 chave A[j] iterativo atraves de invariantes segue os seguintes passos:
3 Insere A[j] no subvetor ordenado A[1..j 1] 1 Mostre que o invariante vale no incio da primeira iteracao
4 i j 1 (trivial, em geral)
5 enquanto i 1 e A[i] > chave faca 2 Suponha que o invariante vale no incio de uma iteracao
6 A[i + 1] A[i]
qualquer e prove que ele vale no nicio da proxima
iteracao
7 i i 1 3 e o invariante vale no
Conclua que se o algoritmo para
8 A[i + 1] chave
nicio da ultima
entao
iteracao, o algoritmo e correto.

Invariante principal de O RDENA -P OR -I NSERC A O: (i1) Note que (1) e (2) implicam que o invariante vale no incio
do algoritmo. Isto e similar ao metodo
de qualquer iteracao
No comeco de cada iteracao do laco para das linha 18, o
matematica
de inducao finita!
ou inducao
subvetor A[1 . . . j 1] esta ordenado.


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos

por insercao
Corretude da ordenacao
Melhorando a argumentacao

por
Vamos verificar a corretude do algoritmo de ordenacao (A, n)
O RDENA -P OR -I NSERC AO
insercao
usando a tecnica de prova por invariantes de lacos. 1 para j 2 ate n faca
2 chave A[j]
Invariante principal: (i1) 3 Insere A[j] no subvetor ordenado A[1 . . . j 1]
No comeco de cada iteracao do laco para das linhas 18, o 4 i j 1

subvetor A[1 . . . j 1] esta ordenado. 5 enquanto i 1 e A[i] > chave faca
6 A[i + 1] A[i]
7 i i 1
1 j n 8 A[i + 1] chave
20 25 35 40 44 55 38 99 10 65 50
Um invariante mais preciso: (i1)
Suponha que o invariante vale.
No comeco de cada iteracao do laco para das linhas 18, o
a corretude do algoritmo e evidente. Por que?
Entao subvetor A[1 . . . j 1] e uma permutacao
ordenada do subvetor
No nicio da ultima
temos j= n + 1. Assim, do
iteracao original A[1 . . . j 1].
invariante segue que o (sub)vetor A[1 . . . n] esta ordenado!


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
de (i1)
Esboco da demonstracao Invariantes auxiliares

No incio da linha 5 valem os seguintes invariantes:


1 Validade na primeira iteracao: neste caso, temos j = 2 e o
(i2) A[1 . . . i] e A[i + 2 . . . j] contem
os elementos de A[1 . . . j]
invariante simplesmente afirma que A[1 . . . 1] esta
antes de entrar no laco que comeca na linha 5.
ordenado, o que e evidente.
(i3) A[1 . . . i] e A[i + 2 . . . j] sao
crescentes.
2 Validade de uma iteracao para a seguinte: segue da
anterior. O algoritmo empurra os elementos
discussao (i4) A[1 . . . i] A[i + 2 . . . j]
maiores que a chave para seus lugares corretos e ela e (i5) A[i + 2 . . . j] > chave.
colocada no espaco vazio.
Uma demonstracao mais formal deste fato exige
invariantes auxiliares para o laco interno enquanto. Invariantes (i2) a (i5)
+condicao
de parada na linha 5 = invariante (i1)
3 Corretude do algoritmo: na ultima
temos
iteracao,
+atribuicao
da linha 7

j = n + 1 e logo A[1 . . . n] esta ordenado com os elementos
originais do vetor. Portanto, o algoritmo e correto.

Demonstracao? Mesma que antes.


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos

Complexidade do algoritmo Vamos contar ?

O RDENA -P OR -I NSERC A O(A, n) Custo


# execucoes
1 para j 2 ate n faca c1 ?
Vamos tentar determinar o tempo de execucao (ou 2 chave A[j] c2 ?
complexidade de tempo) de O RDENA -P OR -I NSERC AO em 3 Insere A[j] em A[1 . . . j 1] 0 ?
do tamanho de entrada.
funcao 4 i j 1 c4 ?
Para o Problema de Ordenacao definimos como tamanho 5 enquanto i 1 e A[i] > chave faca c5 ?
de entrada a numero
de elementos do vetor. 6 A[i + 1] A[i] c6 ?
A complexidade de tempo de um algoritmo e o numero
de 7 i i 1 c7 ?
basicas
instrucoes elementares ou primitivas)
(operacoes 8 A[i + 1] chave c8 ?
que executa a partir de uma entrada.
da
O valor ck representa o custo (tempo) de cada execucao
Exemplo: comparacao e atribuicao
entre numeros
ou
linha k.

variaveis
numericas, aritmeticas,
operacoes etc.
Denote por tj o numero
de vezes que o teste no laco
enquanto na linha 5 e feito para aquele valor de j.


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Vamos contar ? total
Tempo de execucao

O RDENA -P OR -I NSERC A O(A, n) Custo Vezes


1 para j 2 ate n faca c1 n
T (n) de Ordena-Por-Insercao
Logo, o tempo total de execucao
2 chave A[j] c2 n1
e a soma dos tempos de execucao de cada uma das linhas do
3 Insere A[j] em A[1 . . . j 1] 0 n1
algoritmo, ou seja:
4 i j 1 c4 n1
P n
5 enquanto i 1 e A[i] > chave faca c5 t T (n) = c1 n + c2 (n 1) + c4 (n 1) + c5 nj=2 tj
P
Pn j=2 j Pn Pn
6 A[i + 1] A[i] c6 (t 1) + c6 j=2 (tj 1) + c7 j=2 (tj 1)
Pnj=2 j
7 i i 1 c7 j=2 (tj 1) + c8 (n 1)
8 A[i + 1] chave c8 n1
Como se ve, entradas de tamanho igual (i.e., mesmo valor de
da
O valor ck representa o custo (tempo) de cada execucao
n), podem apresentar tempos de execucao diferentes ja que o
linha k.
valor de T (n) depende dos valores dos tj .
Denote por tj o numero
de vezes que o teste no laco
enquanto na linha 5 e feito para aquele valor de j.


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos

Melhor caso Pior Caso

O melhor caso de Ordena-Por-Insercao ocorre quando o vetor Quando o vetor A esta em ordem decrescente, ocorre o pior
A ja esta ordenado. Para j = 2, . . . , n temos A[i] chave na caso para Ordena-Por-Insercao. Para inserir a chave em
linha 5 quando i = j 1. Assim, tj = 1 para j = 2, . . . , n.
A[1 . . . j 1], temos que compara-la com todos os elementos
Logo, neste subvetor. Assim, tj = j para j = 2, . . . , n.
Lembre-se que:
T (n) = c1 n + c2 (n 1) + c4 (n 1) + c5 (n 1) + c8 (n 1) n
X n(n + 1)
= (c1 + c2 + c4 + c5 + c8 )n (c2 + c4 + c5 + c8 ) j= 1
2
j=2
e da forma an + b para constantes a
Este tempo de execucao e
n
e b que dependem apenas dos ci . X n(n 1)
(j 1) = .
e uma
Portanto, no melhor caso, o tempo de execucao 2
j=2
linear no tamanho da entrada.
funcao


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos

Pior caso continuacao
Complexidade assintotica de algoritmos

que
Temos entao
 
Na maior parte desta disciplina, consideraremos a analise
n(n + 1)
de pior caso e o comportamento assintotico de um
T (n) = c1 n + c2 (n 1) + c4 (n 1) + c5 1
2
algoritmo (instancias de tamanho grande).
   
n(n 1) n(n 1) O algoritmo O RDENA -P OR -I NSERC A O tem como
+ c6 + c7 + c8 (n 1)
2 2 complexidade (de pior caso) uma funcao quadratica

c c6 c7  2  c5 c6 c7 2
an + bn + c, onde a, b, c sao
constantes absolutas que

5
= + + n + c1 + c2 + c4 + + c8 n
2 2 2 2 2 2 dependem apenas dos custos ci .
(c2 + c4 + c5 + c8 )
O estudo assintotico nos permite jogar para debaixo do
tapete os valores destas constantes, i.e., aquilo que
no pior caso e da forma an2 + bn + c
O tempo de execucao independe do tamanho da entrada (neste caso os valores
constantes que dependem apenas dos ci .
onde a, b, c sao de a, b e c).
e uma funcao
Portanto, no pior caso, o tempo de execucao Por que podemos fazer isso ?

quadratica no tamanho da entrada.


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos


Analise
assintotica quadraticas
de funcoes assintotica
Notacao
quadratica
Considere a funcao 3n2 + 10n + 50:

n 3n2 + 10n + 50 3n2 Usando notacao assintotica,


dizemos que o algoritmo
64 12978 12288 tem complexidade de tempo de pior
Ordena-Por-Insercao
128 50482 49152 caso (n2 ).
512 791602 786432 Isto quer dizer duas coisas:
1024 3156018 3145728 a complexidade de tempo e limitada (superiormente)
2048 12603442 12582912
assintoticamente por algum polinomio da forma an2 para
4096 50372658 50331648 alguma constante a,
8192 201408562 201326592 para todo n suficientemente grande, existe alguma
16384 805470258 805306368
instancia de tamanho n que consome tempo pelo menos
32768 3221553202 3221225472 dn2 , para alguma contante positiva d.
Mais adiante no curso discutiremos em detalhes o uso da
assintotica
notacao
em analise de algoritmos.
3n2 e o termo dominante quando n e grande.
Como se ve,
De um modo geral, podemos nos concentrar nos termos
dominantes e esquecer os demais.

Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Tamanho da entrada Modelo Computacional

O tempo gasto por um algoritmo de ordenacao depende ,


Quando analisamos o algoritmo O RDENA - POR -I NSERC AO
da entrada: ordenar 1000 numeros
e mais demorado do
implicitamente fizemos algumas hipoteses sobre o
que ordenar 3 numeros.
funcionamento do algoritmo:
Em geral, o tempo gasto por um algoritmo e maior quanto
leva tempo constante
uma comparacao
entao
maior for o tamanho da entrada. A ideia e
do
medir/estimar o tempo gasto pelo algoritmo em funcao aritmetica
uma operacao leva tempo constante
tamanho da entrada. permite acesso direto a` memoria

A nocao exata de tamanho da entrada depende do controle de fluxo de lacos/teste leva tempo constante
No caso do Problema de
problema em consideracao. Formalmente, o que fizemos foi analisar o comportamento do
Ordenacao e simplemente o numero
de elementos da algoritmo dentro de um modelo computacional.

sequ encia de entrada.


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos

Modelo Computacional
Maquinas RAM


Salvo mencionado o contrario, usaremos o Modelo Abstrato
O modelo computacional estabelece quais os recursos RAM (Random Access Machine):
basicas
disponveis, as instrucoes e quanto elas custam
o modelo RAM simula uma maquina de verdade
(= tempo).
permite acesso direto a` memoria

Dentre desse modelo, tentamos estimar atraves de uma
possui um unico

processador que executa instrucoes

analise
matematica o tempo que um algoritmo gasta em
do tamanho da entrada sequencialmente

funcao

(= analise de complexidade).
tipos basicos numeros
sao inteiros e reais

A analise de complexidade depende sempre do modelo ha um limite no tamanho de cada palavra de memoria:
se
computacional adotado. a entrada tem tamanho n, entao cada inteiro/real e
representado por c log n bits onde c 1 e uma constante


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos

Maquinas RAM Medida de complexidade de algoritmos


A complexidade de tempo (= eficiencia) de um algoritmo e
executa operacoes aritmeticas

(soma, subtracao, o numero
basicas
de instrucoes que ele executa em
divisao,
multiplicacao,
piso, teto), comparacoes, do tamanho da entrada.
funcao
movimentacao de dados de tipo basico
e fluxo de controle Adotamos uma atitude pessimista e em geral fazemos
(teste if/else, chamada e retorno de rotinas) em tempo
uma analise de pior caso.
constante, Determinamos o tempo maximo
necessario para resolver
o tempo de execucao de certas operacoes
caem em uma
uma instancia de um certo tamanho.
zona cinza, por exemplo, exponenciacao, disso, a analise
Alem concentra-se no comportamento do
veja maiores detalhes do modelo RAM no CLRS. algoritmo para entradas de tamanho GRANDE = analise

assintotica.


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos


Medida de eficiencia de algoritmos
Vantagens do metodo
de analise proposto

Um algoritmo e chamado eficiente se a funcao que mede O modelo RAM e robusto e permite prever o
sua complexidade de tempo e limitada por um polinomio
comportamento de um algoritmo para instancias
no tamanho da entrada. GRANDES.
Por exemplo: n, 3n 7, n log n, 4n2 , 143n2 4n + 2, n5 . O modelo permite comparar algoritmos que resolvem um

Mas por que polinomios? mesmo problema.
Resposta padrao:
(polinomios funcoes
sao bem
A analise e mais robustas em relacao
as
` evolucoes

comportadas).
tecnologicas .


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos
Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos

Desvantagens do metodo
de analise proposto

Fornece um limite de complexidade pessimista sempre


considerando o pior caso.
real, nem todas as instancias
Em uma aplicacao ocorrem

com a mesma frequ encia e e possvel que as instancias

ruins ocorram raramente.
fornece nenhuma informacao
Nao sobre o comportamento

do algoritmo no caso medio.

A analise de complexidade de algoritmos no caso medio e
e
bastante difcil, principalmente, porque muitas vezes nao

claro o que e o caso medio.


Cid Carvalho de Souza, Candida Nunes da Silva, Orlando Lee
MC448 Analise de Algoritmos

Vous aimerez peut-être aussi