You are on page 1of 47

ANLISE DE COMPLEXIDADE

UFMG/ICEX/DCC PROJETO E ANLISE DE ALGORITMOS


PS-GRADUAO EM CINCIA DA COMPUTAO
1

SEMESTRE DE 2007
Antonio Alfredo Ferreira Loureiro
loureiro@dcc.ufmg.br
http://www.dcc.ufmg.br/~loureiro
UFMG/ICEx/DCC 1
Algoritmos
Os algoritmos fazem parte do dia-a-dia das pessoas. Exemplos de algorit-
mos:
instrues para o uso de medicamentos;
indicaes de como montar um aparelho;
uma receita de culinria.
Seqncia de aes executveis para a obteno de uma soluo para um
determinado tipo de problema.
Segundo Dijkstra, um algoritmo corresponde a uma descrio de um padro
de comportamento, expresso em termos de um conjunto nito de aes.
Executando a operao a +b percebemos um padro de comportamento,
mesmo que a operao seja realizada para valores diferentes de a e b.
UFMG/ICEx/DCC 2
O papel de algoritmos em computao
Denio: um algoritmo um conjunto nito de instrues precisas para
executar uma computao.
Um algoritmo pode ser visto como uma ferramenta para resolver um pro-
blema computacional bem especicado.
Um algoritmo pode receber como entrada um conjunto de valores e pode
produzir como sada um outro conjunto de valores.
Um algoritmo descreve uma seqncia de passos computacionais que
transforma a entrada numa sada, ou seja, uma relao entrada/sada.
O vocbulo algoritmo origina do nome al-Khowarizmi.
UFMG/ICEx/DCC 3
Origem do vocbulo algoritmo
Abu JaFar Mohammed
Ibn Musa al-Khowarizmi
(780850), astrnomo e
matemtico rabe. Era
membro da Casa da
Sabedoria, uma academia
de cientistas em Bagd.
O nome al-Khowarizmi
signica da cidade de
Khowarizmi, que agora
chamada Khiva e
parte do Uzbequisto.
al-Khowarizmi escreveu
livros de matemtica,
astronomia e geograa. A
lgebra foi introduzida na
Europa ocidental atravs
de seus trabalhos. A
palavra lgebra vem do
rabe al-jabr, parte do ttulo de seu livro Kitab al-jabr wal muquabala. Esse livro foi traduzido
para o latim e foi usado extensivamente. Seu livro sobre o uso dos numerais hindu descreve
procedimentos para operaes aritmticas usando esses numerais. Autores europeus usaram
uma adaptao latina de seu nome, at nalmente chegar na palavra algoritmo para descrever
a rea da aritmtica com numerais hindu.
UFMG/ICEx/DCC 4
Algoritmo e modelo computacional (1)
Modelo:
Esquema que possibilita a representao de uma entidade (Houaiss).
No modelo, s se deve incluir o que for relevante para a modelagem do
objeto em questo.
Computacional:
Relativo ao processamento (Houaiss.)
Denio (nosso contexto):
Esquema que descreve como o modelo abstrato do processamento de
algoritmos.
UFMG/ICEx/DCC 5
Algoritmo e modelo computacional (2)
Importncia:
Um algoritmo no existe, ou seja, no possvel escrev-lo, se antes no
for denido o modelo computacional associado (como ser executado).
Conceito bsico no projeto de qualquer algoritmo.
Questo decorrente:
Dado um problema qualquer, existe sempre um algoritmo que pode ser
projetado para um dado modelo computacional?
No! Em vrios casos possvel mostrar que no existe um algoritmo
para resolver um determinado problema considerando um modelo com-
putacional.
UFMG/ICEx/DCC 6
Algoritmo e modelo computacional (3)
Que modelos existem?
Literalmente dezenas deles.
Se no estiver satisfeito, invente o seu!
O mais popular (usado) de todos:
RAM Random Access Machine.
Modela o computador tradicional e outros elementos computacionais.
UFMG/ICEx/DCC 7
Algoritmo e modelo computacional:
Modelo RAM (4)
Elementos do modelo:
um nico processador;
memria.
Observaes:
Podemos ignorar os dispositivos de entrada e sada (teclado, monitor, etc)
assumindo que a codicao do algoritmo e os dados j esto armazena-
dos na memria.
Em geral, no relevante para a modelagem do problema saber como o
algoritmo e os dados foram armazenados na memria.
UFMG/ICEx/DCC 8
Algoritmo e modelo computacional:
Modelo RAM (5)
Computao nesse modelo:
Processador busca instruo/dado da memria.
Uma nica instruo executada de cada vez.
Cada instruo executada seqencialmente.
Cada operao executada pelo processador, incluindo clculos aritmticos,
lgicos e acesso a memria, implica num custo de tempo:
Funo de complexidade de tempo.
Cada operao e dado armazenado na memria, implica num custo de es-
pao:
Funo de complexidade de espao.
UFMG/ICEx/DCC 9
Complexidade de tempo e espao
A complexidade de tempo no representa tempo diretamente, mas o nmero
de vezes que determinada operao considerada relevante executada.
A complexidade de espao representa a quantidade de memria (numa
unidade qualquer) que necessrio para armazenar as estruturas de dados
associadas ao algoritmo.
Usa-se a notao assinttica para representar essas complexidades:
O (O grande);
(mega grande);
(Teta);
o (o pequeno);
(mega pequeno).
UFMG/ICEx/DCC 10
Modelo computacional para sistemas distribudos
Mundo distribudo:
Normalmente os elementos computacionais seguem o modelo RAM que
so interconectados atravs de algum meio e s comunicam entre si
atravs de troca de mensagens.
No existe compartilhamento de memria.
Elementos desse modelo:
N computacional representado pelo modelo RAM.
Canal normalmente representado pelo modelo FIFO (rst-in, rst-out).
UFMG/ICEx/DCC 11
Problema dos dois exrcitos (1)
Na Grcia antiga, lugares maravilhosos
como este . . .
. . . podiam se transformar em cenrios de
guerra.
Vale perto de Almklia, Grcia
quando algum lsofo prope o Problema dos dois exrcitos.
UFMG/ICEx/DCC 12
Problema dos dois exrcitos (2)
Cenrio inicial
Exrcito Alfa est em maior nmero que o exrcito Gama mas est dividido em duas meta-
des, cada uma numa lateral do vale.
Cada metade do exrcito Alfa est em menor nmero que o exrcito Gama.
Objetivo do exrcito Alfa: coordenar um ataque ao exrcito Gama para ganhar a guerra.
UFMG/ICEx/DCC 13
Problema dos dois exrcitos (3)
O problema da coordenao
1. General do exrcito Alfa, do lado esquerdo do vale, chama o seu melhor soldado para
levar uma mensagem para o general do exrcito Alfa do lado direito:
Vamos atacar conjuntamente o exrcito Gama amanh s 6:00h?
Observaes: A nica possibilidade de comunicao entre os dois generais atravs
de um mensageiro.
Os dois generais tm um relgio perfeitamente sincronizado, ou seja,
eles sabem pela posio do sol quando 6:00h.
UFMG/ICEx/DCC 14
Problema dos dois exrcitos (4)
O problema da coordenao
2. O soldado do exrcito Alfa atravessa as linhas inimigas e leva a mensagem at o general
do outro lado.
UFMG/ICEx/DCC 15
Problema dos dois exrcitos (5)
O problema da coordenao
3. O general do exrcito Alfa do lado direito concorda em atacar o exrcito Gama no dia
seguinte s 6:00h.
UFMG/ICEx/DCC 16
Problema dos dois exrcitos (6)
O problema da coordenao
4. O soldado do exrcito Alfa atravessa novamente as linhas inimigas e conrma com seu
general o ataque para o dia seguinte.
UFMG/ICEx/DCC 17
Problema dos dois exrcitos (7)
O problema da coordenao
Aps esses quatro passos terem sido realizados com sucesso, vai haver ataque amanh s
6:00h?
UFMG/ICEx/DCC 18
O problema dos dois robs (1)
Imagine dois ou mais robs que vo carregar uma mesa de tal forma que um
car de frente para outro.
Problema:
Projete um algoritmo para coordenar a velocidade e direo do movimento
de cada rob para que a mesa no caia.
Os robs s podem comunicar entre si atravs de um canal de comuni-
cao sem o.
Variante do problema anterior!
UFMG/ICEx/DCC 19
O problema dos dois robs (2)
possvel projetar um algoritmo distribudo para esse problema?
NO! No existe um algoritmo distribudo para o problema de coordenao
considerando o modelo computacional proposto!
UFMG/ICEx/DCC 20
Alguns comentrios sobre algoritmos distribudos
So a base do mundo distribudo, ou seja, de sistemas distribudos.
Sistemas distribudos podem ser:
Tempo real ou no;
Reativos ou no.
Sistemas distribudos podem ser especicados tomando-se como base:
tempo;
eventos.
UFMG/ICEx/DCC 21
Modelagem Matemtica
Metodologia: conjunto de conceitos que traz coeso a princpios e tcnicas
mostrando quando, como e porque us-los em situaes diferentes.
A metodologia que usa matemtica na resoluo de problemas conhecida
como modelagem matemtica.
O processo de modelagem:
Modelo
Abstrato
Problema
Soluo para
o problema
Modelo
Transformado
UFMG/ICEx/DCC 22
Exemplo de modelagem:
Malha rodoviria (1)
Suponha a malha rodoviria entre as seis cidades A, B, C, D, E, e F.
Problema: Achar um subconjunto da malha rodoviria representada pela tabela
abaixo que ligue todas as cidades e tenha um comprimento total mnimo.
B C D E F
A 5 10
B 5 10 20
C 20 30
D 20
E 10
UFMG/ICEx/DCC 23
Exemplo de modelagem:
Malha rodoviria (2)
Tabela j um modelo da situao do mundo real.
A tabela pode ser transformada numa representao grca chamada
GRAFO, que ser o modelo matemtico.
5
F
D
A
B
C
E
5
10
10
20
30
10
20
20
Grafo G
Grafo (denio informal): conjunto de pontos chamados de vrtices ou ns,
e um conjunto de linhas (normalmente no-vazio) conectando um vrtice ao
outro.
Neste caso, cidades so representadas por vrtices e estradas por linhas
(arestas).
UFMG/ICEx/DCC 24
Exemplo de modelagem:
Malha rodoviria (3)
Qual o prximo passo?
Achar uma soluo em termos desse modelo.
Nesse caso, achar um grafo G
t
com o mesmo nmero de vrtices e um
conjunto mnimo de arestas que conecte todas as cidades e satisfaa a
condio do problema.
Observao: o modelo matemtico escolhido, em geral, visando a soluo.
A soluo ser apresentada na forma de um algoritmo.
UFMG/ICEx/DCC 25
Exemplo de modelagem:
Malha rodoviria (4)
Algoritmo:
1. Selecione arbitrariamente qualquer vrtice e o coloque no conjunto de vrtices j conecta-
dos.
2. Escolha dentre os vrtices no conectados aquele mais prximo de um vrtice j conec-
tado. Se existir mais de um vrtice com essa caracterstica escolha aleatoriamente qual-
quer um deles.
3. Repita o passo 2 at que todos os vrtices j estejam conectados.
Este um exemplo de um algoritmo guloso (greedy algorithm).
5
F
D
A
B
C
E
5
10
10
20
30
10
20
20
Grafo G
UFMG/ICEx/DCC 26
Exemplo de modelagem:
Malha rodoviria Solues (5)
5
F
D
A
B
C
E
5
10
10
20
30
10
20
20
Grafo G
Solues:
5
B
C
E
5
F
D
A
10
20
10
5
B
C
E
5
F
D
A
10
20
10
5 A
B
C
E
5
F
D
20
10
10
5 A
B
C
E
5
F
D
20
10
10
Grafo G
1
Grafo G
2
Grafo G
3
Grafo G
4
UFMG/ICEx/DCC 27
Exemplo de modelagem:
Malha rodoviria (6)
O que foi feito?
1. Obteno do modelo matemtico para o problema.
2. Formulao de um algoritmo em termos do modelo.
Ou seja, essa a tcnica de resoluo de problemas em Cincia da Com-
putao.
Nem todos os problemas considerados tero como soluo um algoritmo,
mas muitos tero.
UFMG/ICEx/DCC 28
Exemplo de modelagem:
Sudoku e Godoku (1)
Sudoku Godoku
O objetivo do Sudoku
(Godoku) preencher
todos os espaos em
branco do quadrado
maior, que est divi-
dido em nove grids,
com os nmeros de 1
a 9 (letras). Os alga-
rismos no podem se
repetir na mesma co-
luna, linha ou grid.
Sudoku: A palavra
Sudoku signica
nmero sozinho em
japons, o que mostra
exatamente o objetivo
do jogo. O Sudoku existe desde a dcada de 1970, mas comeou a ganhar popularidade no
nal de 2004 quando comeou a ser publicado diariamente na sesso de puzzles do jornal
The Times. Entre abril e maio de 2005 o puzzle comeou a ganhar um espao na publicao
de outros jornais britnicos e, poucos meses depois, ganhou popularidade mundial. Fonte:
wikipedia.org
Godoku: O jogo Godoku similar ao Sudoku mas formado apenas por letras.
UFMG/ICEx/DCC 29
Exemplo de modelagem:
SuperSudoku (2)
O jogo SuperSudoku similar
ao Sudoku e Godoku formado
por nmeros e letras. Cada grid
tem 16 entradas, sendo nove
dos nmeros (0 a 9) e seis le-
tras (A a F).
UFMG/ICEx/DCC 30
Exemplo de modelagem:
Mais informaes sobre o Sudoku e jogos
similares (3)
Para mais detalhes sobre o Sudoku e variantes desse jogo, veja o artigo A cincia do Sudoku
por Jean-Paul Delahaye, na revista Scientic American Brasil, edio n
o
50 de julho de 2006, ou
nas pginas:
http://www2.uol.com.br/sciam/conteudo/materia/materia_99.html
http://www2.uol.com.br/sciam/conteudo/materia/materia_imprimir_99.html
UFMG/ICEx/DCC 31
Exemplo de modelagem:
Kasparov Deep Blue
In the rst ever traditional chess match between a man (world
champion Garry Kasparov) and a computer (IBMs Deep Blue) in
1996, Deep Blue won one game, tied two and lost three. The next
year, Deep Blue defeated Kasparov in a six-game match the rst
time a reigning world champion lost a match to a computer oppo-
nent in tournament play. Deep Blue was a combination of special
purpose hardware and software with an IBM RS/6000 SP2 (seen
here) a system capable of examining 200 million moves per sec-
ond, or 50 billion positions, in the three minutes allocated for a
single move in a chess game.
Referncia: http://www-03.ibm.com/ibm/history/
exhibits/vintage/vintage_4506VV1001.html
UFMG/ICEx/DCC 32
Questes sobre a modelagem (1)
O objetivo projetar um algoritmo para resolver o problema.
Veja que o Sudoku e o Deep Blue tm caractersticas bem diferentes!
Esse projeto envolve dois aspectos:
1. O algoritmo propriamente dito, e
2. A estrutura de dados a ser usada nesse algoritmo.
Em geral, a escolha do algoritmo inuencia a estrutura de dados e vice-
versa.
necessrio considerar diferentes fatores para escolher esse par (algo-
ritmo e estrutura de dados).
Nesta disciplina, estudaremos vrios tpicos relacionados tanto a algoritmos
quanto estruturas de dados.
UFMG/ICEx/DCC 33
Questes sobre a modelagem (2)
O caso do jogo Sudoku
Um possvel algoritmo para resolver o jogo Sudoku o Algoritmo de Fora
Bruta:
Tente todas as possibilidades at encontrar uma soluo!
Nessa estratgia, quantas possibilidades existem para a congurao
abaixo?
Existem 1
1
2
5
3
32
4
13
6
1
=
23875983329839202653175808 23, 8 10
24
possibilidades!
UFMG/ICEx/DCC 34
Estruturas de dados
Estruturas de dados e algoritmos esto intimamente ligados:
No se pode estudar estruturas de dados sem considerar os algoritmos
associados a elas;
Assim como a escolha dos algoritmos em geral depende da representao
e da estrutura dos dados.
Para resolver um problema necessrio escolher uma abstrao da reali-
dade, em geral mediante a denio de um conjunto de dados que representa
a situao real.
A seguir, deve ser escolhida a forma de representar esses dados.
UFMG/ICEx/DCC 35
Escolha da representao dos dados
A escolha da representao dos dados determinada, entre outras, pelas
operaes a serem realizadas sobre os dados.
Considere a operao de adio:
Para pequenos nmeros, uma boa representao por meio de barras
verticais (caso em que a operao de adio bastante simples).
J a representao por dgitos decimais requer regras relativamente com-
plicadas, as quais devem ser memorizadas.
Quando consideramos a adio de grandes nmeros mais fcil a repre-
sentao por dgitos decimais (devido ao princpio baseado no peso relativo
a posio de cada dgito).
UFMG/ICEx/DCC 36
Programas
Programar basicamente estruturar dados e construir algoritmos.
Programas so formulaes concretas de algoritmos abstratos, baseados em
representaes e estruturas especcas de dados.
Programas representam uma classe especial de algoritmos capazes de
serem seguidos por computadores.
Um computador s capaz de seguir programas em linguagem de mquina
(seqncia de instrues obscuras e desconfortveis).
necessrio construir linguagens mais adequadas, que facilitem a tarefa de
programar um computador.
Uma linguagem de programao uma tcnica de notao para programar,
com a inteno de servir de veculo tanto para a expresso do raciocnio
algortmico quanto para a execuo automtica de um algoritmo por um com-
putador.
UFMG/ICEx/DCC 37
Tipos de dados
Caracteriza o conjunto de valores a que uma constante pertence, ou que
podem ser assumidos por uma varivel ou expresso, ou que podem ser ge-
rados por uma funo.
Tipos simples de dados so grupos de valores indivisveis (como os tipos
bsicos integer, boolean, char e real do Pascal).
Exemplo: uma varivel do tipo boolean pode assumir o valor verdadeiro
ou o valor falso, e nenhum outro valor.
Os tipos estruturados em geral denem uma coleo de valores simples, ou
um agregado de valores de tipos diferentes.
UFMG/ICEx/DCC 38
Tipos abstratos de dados (TADs)
Modelo matemtico, acompanhado das operaes denidas sobre o mode-
lo.
Exemplo: o conjunto dos inteiros acompanhado das operaes de adio,
subtrao e multiplicao.
TADs so utilizados extensivamente como base para o projeto de algoritmos.
A implementao do algoritmo em uma linguagem de programao especca
exige a representao do TAD em termos dos tipos de dados e dos operado-
res suportados.
A representao do modelo matemtico por trs do tipo abstrato de dados
realizada mediante uma estrutura de dados.
Podemos considerar TADs como generalizaes de tipos primitivos e proce-
dimentos como generalizaes de operaes primitivas.
O TAD encapsula tipos de dados:
A denio do tipo e todas as operaes cam localizadas numa seo do
programa.
UFMG/ICEx/DCC 39
Implementao de TADs (1)
Considere uma aplicao que utilize uma lista de inteiros. Poderamos denir
o TAD Lista, com as seguintes operaes:
1. Faa a lista vazia;
2. Obtenha o primeiro elemento da lista; se a lista estiver vazia, ento retorne
nulo;
3. Insira um elemento na lista.
H vrias opes de estruturas de dados que permitem uma implementao
eciente para listas (por exemplo, o tipo estruturado arranjo).
UFMG/ICEx/DCC 40
Implementao de TADs (2)
Cada operao do tipo abstrato de dados implementada como um procedi-
mento na linguagem de programao escolhida.
Qualquer alterao na implementao do TAD ca restrita parte encapsu-
lada, sem causar impactos em outras partes do cdigo.
Cada conjunto diferente de operaes dene umTADdiferente, mesmo atuem
sob um mesmo modelo matemtico.
A escolha adequada de uma implementao depende fortemente das oper-
aes a serem realizadas sobre o modelo.
UFMG/ICEx/DCC 41
Medida do tempo de execuo de um programa
O projeto de algoritmos fortemente inuenciado pelo estudo de seus com-
portamentos.
Depois que um problema analisado e decises de projeto so nalizadas,
necessrio estudar as vrias opes de algoritmos a serem utilizados, con-
siderando os aspectos de tempo de execuo e espao ocupado.
Algoritmos so encontrados em todas as reas de Cincia da Computao.
UFMG/ICEx/DCC 42
Tipos de problemas na anlise de algoritmos
Anlise de um algoritmo particular
Qual o custo de usar um dado algoritmo para resolver um problema espec-
co?
Caractersticas que devem ser investigadas:
anlise do nmero de vezes que cada parte do algoritmo deve ser execu-
tada,
estudo da quantidade de memria necessria.
UFMG/ICEx/DCC 43
Tipos de problemas na anlise de algoritmos
Anlise de uma classe de algoritmos
Qual o algoritmo de menor custo possvel para resolver um problema par-
ticular?
Toda uma famlia de algoritmos investigada.
Procura-se identicar um que seja o melhor possvel.
Colocam-se limites para a complexidade computacional dos algoritmos per-
tencentes classe.
UFMG/ICEx/DCC 44
Custo de um algoritmo
Determinando o menor custo possvel para resolver problemas de uma dada
classe, temos a medida da diculdade inerente para resolver o problema.
Quando o custo de um algoritmo igual ao menor custo possvel, o algoritmo
timo para a medida de custo considerada.
Podem existir vrios algoritmos para resolver o mesmo problema.
Se a mesma medida de custo aplicada a diferentes algoritmos, ento
possvel compar-los e escolher o mais adequado.
UFMG/ICEx/DCC 45
Medida do custo pela execuo do programa em
uma plataforma real
Tais medidas so bastante inadequadas e os resultados jamais devem ser
generalizados:
os resultados so dependentes do compilador que pode favorecer algumas
construes em detrimento de outras;
os resultados dependem do hardware;
quando grandes quantidades de memria so utilizadas, as medidas de
tempo podem depender deste aspecto.
Apesar disso, h argumentos a favor de se obterem medidas reais de
tempo.
Por exemplo, quando h vrios algoritmos distintos para resolver um
mesmo tipo de problema, todos com um custo de execuo dentro de uma
mesma ordem de grandeza.
Assim, so considerados tanto os custos reais das operaes como os
custos no aparentes, tais como alocao de memria, indexao, carga,
dentre outros.
UFMG/ICEx/DCC 46
Medida do custo por meio de um modelo
matemtico
Usa um modelo matemtico baseado em um computador idealizado.
Deve ser especicado o conjunto de operaes e seus custos de execues.
mais usual ignorar o custo de algumas das operaes e considerar apenas
as operaes mais signicativas.
Por exemplo, algoritmos de ordenao:
consideramos o nmero de comparaes entre os elementos do conjunto
a ser ordenado e ignoramos as operaes aritmticas, de atribuio e ma-
nipulaes de ndices, caso existam.
UFMG/ICEx/DCC 47
Funo de complexidade
Para medir o custo de execuo de um algoritmo comum denir uma funo
de custo ou funo de complexidade f.
f(n) a medida do tempo necessrio para executar um algoritmo para um
problema de tamanho n.
Funo de complexidade de tempo: f(n) mede o tempo necessrio para
executar um algoritmo para um problema de tamanho n.
Funo de complexidade de espao: f(n) mede a memria necessria
para executar um algoritmo para um problema de tamanho n.
Utilizaremos f para denotar uma funo de complexidade de tempo daqui
para a frente.
Na realidade, a complexidade de tempo no representa tempo diretamente,
mas o nmero de vezes que determinada operao considerada relevante
executada.
UFMG/ICEx/DCC 48
Exemplo: Maior elemento (1)
Considere o algoritmo para encontrar o maior elemento de um vetor de in-
teiros A[1..n], n 1.
function Max (var A: Vetor): integer;
var i, Temp: integer;
begin
Temp := A[1];
for i:=2 to n do if Temp < A[i] then Temp := A[i];
Max := Temp;
end;
Seja f uma funo de complexidade tal que f(n) o nmero de compara-
es entre os elementos de A, se A contiver n elementos.
Logo f(n) = n 1, para n 1.
Vamos provar que o algoritmo apresentado no programa acima timo.
UFMG/ICEx/DCC 49
Exemplo: Maior elemento (2)
Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto
com n elementos, n 1, faz pelo menos n 1 comparaes.
Prova: Cada um dos n 1 elementos tem de ser mostrado, por meio de com-
paraes, que menor do que algum outro elemento.
Logo n 1 comparaes so necessrias. 2
O teorema acima nos diz que, se o nmero de comparaes for utilizado
como medida de custo, ento a funo Max do programa anterior tima.
UFMG/ICEx/DCC 50
Tamanho da entrada de dados
A medida do custo de execuo de um algoritmo depende principalmente do
tamanho da entrada dos dados.
comum considerar o tempo de execuo de um programa como uma funo
do tamanho da entrada.
Para alguns algoritmos, o custo de execuo uma funo da entrada parti-
cular dos dados, no apenas do tamanho da entrada.
No caso da funo Max do programa do exemplo, o custo uniforme sobre
todos os problemas de tamanho n.
J para um algoritmo de ordenao isso no ocorre: se os dados de en-
trada j estiverem quase ordenados, ento o algoritmo pode ter que trabalhar
menos.
UFMG/ICEx/DCC 51
Melhor caso, pior caso e caso mdio (1)
Melhor caso:
Menor tempo de execuo sobre todas as entradas de tamanho n.
Pior caso:
Maior tempo de execuo sobre todas as entradas de tamanho n.
Se f uma funo de complexidade baseada na anlise de pior caso, o
custo de aplicar o algoritmo nunca maior do que f(n).
Caso mdio (ou caso esperado):
Mdia dos tempos de execuo de todas as entradas de tamanho n.
UFMG/ICEx/DCC 52
Melhor caso, pior caso e caso mdio (2)
Na anlise do caso esperado, supe-se uma distribuio de probabilidades
sobre o conjunto de entradas de tamanho n e o custo mdio obtido com
base nessa distribuio.
A anlise do caso mdio geralmente muito mais difcil de obter do que as
anlises do melhor e do pior caso.
comum supor uma distribuio de probabilidades em que todas as entradas
possveis so igualmente provveis.
Na prtica isso nem sempre verdade.
UFMG/ICEx/DCC 53
Exemplo: Registros de um arquivo (1)
Considere o problema de acessar os registros de um arquivo.
Cada registro contm uma chave nica que utilizada para recuperar reg-
istros do arquivo.
O problema: dada uma chave qualquer, localize o registro que contenha esta
chave.
O algoritmo de pesquisa mais simples o que faz a pesquisa seqencial.
Seja f uma funo de complexidade tal que f(n) o nmero de registros
consultados no arquivo (nmero de vezes que a chave de consulta com-
parada com a chave de cada registro).
Melhor caso: f(n) = 1 (registro procurado o primeiro consultado);
Pior caso: f(n) = n (registro procurado o ltimo consultado ou
no est presente no arquivo);
Caso mdio: f(n) =
n+1
2
.
UFMG/ICEx/DCC 54
Exemplo: Registros de um arquivo (2)
No estudo do caso mdio, vamos considerar que toda pesquisa recupera um
registro.
Se p
i
for a probabilidade de que o i-simo registro seja procurado, e con-
siderando que para recuperar o i-simo registro so necessrias i compara-
es, ento
f(n) = 1 p
1
+2 p
2
+3 p
3
+ +n p
n
.
Para calcular f(n) basta conhecer a distribuio de probabilidades p
i
.
Se cada registro tiver a mesma probabilidade de ser acessado que todos os
outros, ento p
i
= 1/n, 1 i n.
Neste caso f(n) =
1
n
(1 +2 +3 + +n) =
1
n
_
n(n+1)
2
_
=
n+1
2

A anlise do caso esperado revela que uma pesquisa com sucesso examina
aproximadamente metade dos registros.
UFMG/ICEx/DCC 55
Exemplo: Maior e menor elementos (Verso 1)
Considere o problema de encontrar o maior e o menor elemento de um vetor
de inteiros A[1..n], n 1.
Um algoritmo simples pode ser derivado do algoritmo apresentado no pro-
grama para achar o maior elemento.
procedure MaxMin1 (var A: Vetor; var Max, Min: integer);
var i: integer;
begin
Max := A[1]; Min := A[1];
for i := 2 to n do
begin
if A[i] > Max then Max := A[i]; {Testa se A[i] contm o maior elemento}
if A[i] < Min then Min := A[i]; {Testa se A[i] contm o menor elemento}
end;
end;
Seja f(n) o nmero de comparaes entre os elementos de A, se A tiver n
elementos.
Logo f(n) = 2(n 1), para n > 0, para o melhor caso, pior caso e caso
mdio.
UFMG/ICEx/DCC 56
Exemplo: Maior e menor elementos (Verso 2)
MaxMin1 pode ser facilmente melhorado:
a comparao A[i] < Min s necessria quando o resultado da compara-
o A[i] > Max for falso.
procedure MaxMin2 (var A: Vetor; var Max, Min: integer);
var i: integer;
begin
Max := A[1]; Min := A[1];
for i := 2 to n do
if A[i] > Max
then Max := A[i]
else if A[i] < Min then Min := A[i];
end;
UFMG/ICEx/DCC 57
Exemplo: Maior e menor elementos (Verso 2)
Para a nova implementao temos:
Melhor caso: f(n) = n 1 (quando os elementos esto em ordem
crescente);
Pior caso: f(n) = 2(n 1) (quando os elementos esto em ordem
decrescente);
Caso mdio: f(n) =
3n
2

3
2
.
Caso mdio:
A[i] maior do que Max a metade das vezes.
Logo, f(n) = n 1 +
n1
2
=
3n
2

3
2
, para n > 0.
UFMG/ICEx/DCC 58
Exemplo: Maior e menor elementos (Verso 3)
Considerando o nmero de comparaes realizadas, existe a possibilidade
de obter um algoritmo mais eciente:
1. Compare os elementos de A aos pares, separando-os em dois subcon-
juntos (maiores em um e menores em outro), a um custo de n/2| com-
paraes.
2. O mximo obtido do subconjunto que contm os maiores elementos, a
um custo de n/2| 1 comparaes.
3. O mnimo obtido do subconjunto que contm os menores elementos, a
um custo de n/2| 1 comparaes.
Contm o mnimo
...
...
Contm o mximo
UFMG/ICEx/DCC 59
Exemplo: Maior e menor elementos (Verso 3)
procedure MaxMin3(var A: Vetor;
var Max, Min: integer);
var i,
FimDoAnel: integer;
begin
{Garante uma qte par de elementos no vetor para evitar caso de exceo}
if (n mod 2) > 0
then begin
A[n+1] := A[n];
FimDoAnel := n;
end
else FimDoAnel := n-1;
{Determina maior e menor elementos iniciais}
if A[1] > A[2]
then begin
Max := A[1]; Min := A[2];
end
else begin
Max := A[2]; Min := A[1];
end;
UFMG/ICEx/DCC 60
Exemplo: Maior e menor elementos (Verso 3)
i:= 3;
while i <= FimDoAnel do
begin
{Compara os elementos aos pares}
if A[i] > A[i+1]
then begin
if A[i] > Max then Max := A[i];
if A[i+1] < Min then Min := A[i+1];
end
else begin
if A[i] < Min then Min := A[i];
if A[i+1] > Max then Max := A[i+1];
end;
i:= i + 2;
end;
end;
UFMG/ICEx/DCC 61
Exemplo: Maior e menor elementos (Verso 3)
Os elementos de A so comparados dois a dois e os elementos maiores so
comparados com Max e os elementos menores so comparados com Min.
Quando n mpar, o elemento que est na posio A[n] duplicado na
posio A[n +1] para evitar um tratamento de exceo.
Para esta implementao, f(n) =
n
2
+
n2
2
+
n2
2
=
3n
2
2, para n > 0,
para o melhor caso, pior caso e caso mdio.
UFMG/ICEx/DCC 62
Comparao entre os algoritmos
MaxMin1, MaxMin2 e MaxMin3
A tabela abaixo apresenta uma comparao entre os algoritmos dos progra-
mas MaxMin1, MaxMin2 e MaxMin3, considerando o nmero de compara-
es como medida de complexidade.
Os algoritmos MaxMin2 e MaxMin3 so superiores ao algoritmo MaxMin1 de
forma geral.
O algoritmo MaxMin3 superior ao algoritmo MaxMin2 com relao ao pior
caso e bastante prximo quanto ao caso mdio.
Os trs f(n)
algoritmos Melhor caso Pior caso Caso mdio
MaxMin1 2(n 1) 2(n 1) 2(n 1)
MaxMin2 n 1 2(n 1) 3n/2 3/2
MaxMin3 3n/2 2 3n/2 2 3n/2 2
UFMG/ICEx/DCC 63
Limite inferior: Uso de um orculo
possvel obter um algoritmo MaxMin mais eciente?
Para responder temos de conhecer o limite inferior para essa classe de al-
goritmos.
Tcnica muito utilizada:
Uso de um orculo.
Dado um modelo computacional que expresse o comportamento do algo-
ritmo, o orculo informa o resultado de cada passo possvel (no caso, o resul-
tado de cada comparao).
Para derivar o limite inferior, o orculo procura sempre fazer com que o algo-
ritmo trabalhe o mximo, escolhendo como resultado da prxima comparao
aquele que cause o maior trabalho possvel necessrio para determinar a res-
posta nal.
UFMG/ICEx/DCC 64
Exemplo de uso de um orculo (1)
Teorema: Qualquer algoritmo para encontrar o maior e o menor elementos de
um conjunto com n elementos no ordenados, n 1, faz pelo menos 3n/2|
2 comparaes.
Prova: A tcnica utilizada dene um orculo que descreve o comportamento
do algoritmo por meio de um conjunto de ntuplas, mais um conjunto de regras
associadas que mostram as tuplas possveis (estados) que um algoritmo pode
assumir a partir de uma dada tupla e uma nica comparao.
Uma 4tupla, representada por (a, b, c, d), onde os elementos de:
a nunca foram comparados;
b foram vencedores e nunca perderam em comparaes realizadas;
c foram perdedores e nunca venceram em comparaes realizadas;
d foram vencedores e perdedores em comparaes realizadas.
UFMG/ICEx/DCC 65
Exemplo de uso de um orculo (2)
O algoritmo inicia no estado (n, 0, 0, 0) e termina com (0, 1, 1, n 2).
( , 0, 0, 0)
.
.
n (0, 1, 1, 2)
n
.
UFMG/ICEx/DCC 66
Exemplo de uso de um orculo (3)
Aps cada comparao a tupla (a, b, c, d) consegue progredir apenas se ela
assume um dentre os seis estados possveis abaixo:
1. (a 2, b +1, c +1, d) se a 2
Dois elementos de a so comparados.
2. (a 1, b +1, c, d) ou
3. (a 1, b, c +1, d) ou
4. (a 1, b, c, d +1) se a 1
Um elemento de a comparado com um de b ou um de c.
5. (a, b 1, c, d +1) se b 2
Dois elementos de b so comparados.
6. (a, b, c 1, d +1) se c 2
Dois elementos de c so comparados.
O primeiro passo requer necessariamente a manipulao do componente a.
UFMG/ICEx/DCC 67
Exemplo de uso de um orculo (4)
O caminho mais rpido para levar a at zero requer n/2| mudanas de es-
tado e termina com a tupla (0, n/2, n/2, 0) (por meio de comparao dos
elementos de a dois a dois).
A seguir, para reduzir o componente b at um so necessrias n/2|1 mu-
danas de estado (mnimo de comparaes necessrias para obter o maior
elemento de b).
Idem para c, com n/2| 1 mudanas de estado.
Logo, para obter o estado (0, 1, 1, n 2) a partir do estado (n, 0, 0, 0) so
necessrias
n/2| +n/2| 1 +n/2| 1 = 3n/2| 2
comparaes. 2
O teorema nos diz que se o nmero de comparaes entre os elementos de
um vetor for utilizado como medida de custo, ento o algoritmo MaxMin3
timo.
UFMG/ICEx/DCC 68
Comportamento assinttico de funes
O parmetro n fornece uma medida da diculdade para se resolver o proble-
ma.
Para valores sucientemente pequenos de n, qualquer algoritmo custa pouco
para ser executado, mesmo os inecientes.
A escolha do algoritmo no um problema crtico para problemas de
tamanho pequeno.
Logo, a anlise de algoritmos realizada para valores grandes de n.
Estuda-se o comportamento assinttico das funes de custo (comporta-
mento de suas funes de custo para valores grandes de n).
O comportamento assinttico de f(n) representa o limite do comportamento
do custo quando n cresce.
UFMG/ICEx/DCC 69
Dominao assinttica
A anlise de um algoritmo geralmente conta com apenas algumas operaes
elementares.
A medida de custo ou medida de complexidade relata o crescimento assin-
ttico da operao considerada.
Denio: Uma funo f(n) domina assintoticamente outra funo g(n)
se existem duas constantes positivas c e n
0
tais que, para n n
0
, temos
[g(n)[ c [f(n)[.
( ) g
cf n ( )
0
n
f , g
n
n
Exemplo:
Sejam g(n) = (n +1)
2
e f(n) = n
2
.
As funes g(n) e f(n) dominam assintoticamente
uma a outra, j que
[(n +1)
2
[ 4[n
2
[
para n 1 e
[n
2
[ [(n +1)
2
[
para n 0.
UFMG/ICEx/DCC 70
Como medir o custo de execuo de um algoritmo?
Funo de Custo ou Funo de Complexidade
f(n) = medida de custo necessrio para executar um algoritmo para um
problema de tamanho n.
Se f(n) uma medida da quantidade de tempo necessrio para executar
um algoritmo para um problema de tamanho n, ento f chamada funo
de complexidade de tempo de algoritmo.
Se f(n) uma medida da quantidade de memria necessria para exe-
cutar um algoritmo para um problema de tamanho n, ento f chamada
funo de complexidade de espao de algoritmo.
Observao: tempo no tempo!
importante ressaltar que a complexidade de tempo na realidade no re-
presenta tempo diretamente, mas o nmero de vezes que determinada op-
erao considerada relevante executada
UFMG/ICEx/DCC 71
Custo assinttico de funes
interessante comparar algoritmos para valores grandes de n.
O custo assinttico de uma funo f(n) representa o limite do comporta-
mento de custo quando n cresce.
Em geral, o custo aumenta com o tamanho n do problema.
Observao:
Para valores pequenos de n, mesmo um algoritmo ineciente no custa
muito para ser executado.
UFMG/ICEx/DCC 72
Notao assinttica de funes
Existem trs notaes principais na anlise assinttica de funes:
Notao
Notao O (O grande)
Notao
UFMG/ICEx/DCC 73
Notao (1)
g
c
0
n
f , g
2
n
n
n
( )
( )
( )
c
n
g
f
1
f(n) = (g(n))
UFMG/ICEx/DCC 74
Notao (2)
A notao limita a funo por fatores constantes.
Escreve-se f(n) = (g(n)), se existirem constantes positivas c
1
, c
2
e n
0
tais que para n n
0
, o valor de f(n) est sempre entre c
1
g(n) e c
2
g(n)
inclusive.
Neste caso, pode-se dizer que g(n) um limite assinttico rme (em ingls,
asymptotically tight bound) para f(n).
f(n) = (g(n)), c
1
> 0, c
2
> 0 e n
0
[
0 c
1
g(n) f(n) c
2
g(n), n n
0
g
c
0
n
f , g
2
n
n
n
( )
( )
( )
c
n
g
f
1
UFMG/ICEx/DCC 75
Notao : Exemplo (3)
Mostre que
1
2
n
2
3n = (n
2
).
Para provar esta armao, devemos achar constantes c
1
> 0, c
2
> 0, n > 0,
tais que:
c
1
n
2

1
2
n
2
3n c
2
n
2
para todo n n
o
.
Se dividirmos a expresso acima por n
2
temos:
c
1

1
2

3
n
c
2
UFMG/ICEx/DCC 76
Notao : Exemplo (4)
A inequao mais a direita ser sempre vlida para qualquer valor de n 1 ao
escolhermos c
2

1
2
.
Da mesma forma, a inequao mais a esquerda ser sempre vlida para qual-
quer valor de n 7 ao escolhermos c
1

1
14
.
Assim, ao escolhermos c
1
= 1/14, c
2
= 1/2 e n
0
= 7, podemos vericar que
1
2
n
2
3n = (n
2
).
Note que existem outras escolhas para as constantes c
1
e c
2
, mas o fato impor-
tante que a escolha existe.
Note tambm que a escolha destas constantes depende da funo
1
2
n
2
3n.
Uma funo diferente pertencente a (n
2
) ir provavelmente requerer outras
constantes.
UFMG/ICEx/DCC 77
Notao : Exemplo (5)
Usando a denio formal de prove que 6n
3
,= (n
2
).
UFMG/ICEx/DCC 78
Notao O (1)
c
n
f , g
n
n
( )
( )
n
f
g
0
f(n) = O(g(n))
UFMG/ICEx/DCC 79
Notao O (2)
A notao O dene um limite superior para a funo, por um fator constante.
Escreve-se f(n) = O(g(n)), se existirem constantes positivas c e n
0
tais
que para n n
0
, o valor de f(n) menor ou igual a cg(n). Neste caso,
pode-se dizer que g(n) um limite assinttico superior (em ingls, asymptot-
ically upper bound) para f(n).
f(n) = O(g(n)), c > 0 e n
0
[ 0 f(n) cg(n), n n
0
Escrevemos f(n) = O(g(n)) para expressar que g(n) domina assintotica-
mente f(n). L-se f(n) da ordem no mximo g(n).
UFMG/ICEx/DCC 80
Notao O: Exemplos (3)
Seja f(n) = (n +1)
2
.
Logo f(n) O(n
2
), quando n
0
= 1 e c = 4, j que
(n +1)
2
4n
2
para n 1.
Seja f(n) = n e g(n) = n
2
. Mostre que g(n) no O(n).
Sabemos que f(n) O(n
2
), pois para n 0, n n
2
.
Suponha que existam constantes c e n
0
tais que para todo n n
0
, n
2

cn. Assim, c n para qualquer n n


0
. No entanto, no existe uma
constante c que possa ser maior ou igual a n para todo n.
UFMG/ICEx/DCC 81
Notao O: Exemplos (4)
Mostre que g(n) = 3n
3
+2n
2
+n O(n
3
).
Basta mostrar que 3n
3
+2n
2
+n 6n
3
, para n 0.
A funo g(n) = 3n
3
+ 2n
2
+ n tambm O(n
4
), entretanto esta ar-
mao mais fraca do que dizer que g(n) O(n
3
).
Mostre que h(n) = log
5
n O(logn).
O log
b
n difere do log
c
n por uma constante que no caso log
b
c.
Como n = c
log
c
n
, tomando o logaritmo base b em ambos os lados da
igualdade, temos que log
b
n = log
b
c
log
c
n
= log
c
n log
b
c.
UFMG/ICEx/DCC 82
Notao O (5)
Quando a notao O usada para expressar o tempo de execuo de um
algoritmo no pior caso, est se denindo tambm o limite (superior) do tempo
de execuo desse algoritmo para todas as entradas.
Por exemplo, o algoritmo de ordenao por insero (a ser estudado neste
curso) O(n
2
) no pior caso.
Este limite se aplica para qualquer entrada.
UFMG/ICEx/DCC 83
Notao O (6)
Tecnicamente um abuso dizer que o tempo de execuo do algoritmo de
ordenao por insero O(n
2
) (i.e., sem especicar se para o pior caso,
melhor caso, ou caso mdio)
O tempo de execuo desse algoritmo depende de como os dados de
entrada esto arranjados.
Se os dados de entrada j estiverem ordenados, este algoritmo tem um
tempo de execuo de O(n), ou seja, o tempo de execuo do algoritmo
de ordenao por insero no melhor caso O(n).
O que se quer dizer quando se fala que o tempo de execuo O(n
2
)
que no pior caso o tempo de execuo O(n
2
).
Ou seja, no importa como os dados de entrada esto arranjados, o tempo
de execuo em qualquer entrada O(n
2
).
UFMG/ICEx/DCC 84
Operaes com a notao O (7)
f(n) = O(f(n))
c O(f(n)) = O(f(n)) c = constante
O(f(n)) +O(f(n)) = O(f(n))
O(O(f(n)) = O(f(n))
O(f(n)) +O(g(n)) = O(max(f(n), g(n)))
O(f(n))O(g(n)) = O(f(n)g(n))
f(n)O(g(n)) = O(f(n)g(n))
UFMG/ICEx/DCC 85
Operaes com a notao O: Exemplos (8)
Regra da soma O(f(n)) +O(g(n)).
Suponha trs trechos cujos tempos de execuo so
O(n), O(n
2
) e O(nlogn).
O tempo de execuo dos dois primeiros trechos O(max(n, n
2
)), que
O(n
2
).
O tempo de execuo de todos os trs trechos ento
O(max(n
2
, nlogn)),
que O(n
2
).
O produto de [logn +k +O(1/n)] por [n +O(

n)]
nlogn +kn +O(

nlogn).
UFMG/ICEx/DCC 86
Notao (1)
c
n
f , g
n
n
( )
( )
n
g
f
0
f(n) = (g(n))
UFMG/ICEx/DCC 87
Notao (2)
A notao dene um limite inferior para a funo, por um fator constante.
Escreve-se f(n) = (g(n)), se existirem constantes positivas c e n
0
tais
que para n n
0
, o valor de f(n) maior ou igual a cg(n).
Pode-se dizer que g(n) um limite assinttico inferior (em ingls, asymp-
totically lower bound) para f(n).
f(n) = (g(n)), c > 0 e n
0
[ 0 cg(n) f(n), n n
0
UFMG/ICEx/DCC 88
Notao (3)
Quando a notao usada para expressar o tempo de execuo de um al-
goritmo no melhor caso, est se denindo tambm o limite (inferior) do tempo
de execuo desse algoritmo para todas as entradas.
Por exemplo, o algoritmo de ordenao por insero (n) no melhor
caso.
O tempo de execuo do algoritmo de ordenao por insero (n).
O que signica dizer que o tempo de execuo (i.e., sem especicar se
para o pior caso, melhor caso, ou caso mdio) (g(n))?
O tempo de execuo desse algoritmo pelo menos uma constante vezes
g(n) para valores sucientemente grandes de n.
UFMG/ICEx/DCC 89
Notao : Exemplos (4)
Para mostrar que f(n) = 3n
3
+ 2n
2
(n
3
) basta fazer c = 1, e ento
3n
3
+2n
2
n
3
para n 0.
Seja f(n) = n para n mpar (n 1) e f(n) = n
2
/10 para n par (n
0).
Neste caso f(n) (n
2
), bastando considerar c = 1/10 e n =
0, 2, 4, 6, . . .
UFMG/ICEx/DCC 90
Limites do algoritmo de ordenao por insero
O tempo de execuo do algoritmo de ordenao por insero est entre
(n) e O(n
2
).
Estes limites so assintoticamente os mais rmes possveis.
Por exemplo, o tempo de execuo deste algoritmo no (n
2
), pois o
algoritmo executa em tempo (n) quando a entrada j est ordenada.
No contraditrio dizer que o tempo de execuo deste algoritmo no pior
caso (n
2
), j que existem entradas para este algoritmo que fazem com
que ele execute em tempo (n
2
).
UFMG/ICEx/DCC 91
Teorema
Para quaisquer funes f(n) e g(n),
f(n) = (g(n))
se e somente se,
f(n) = O(g(n)), e
f(n) = (g(n))
UFMG/ICEx/DCC 92
Mais sobre notao assinttica de funes
Existem duas outras notaes na anlise assinttica de funes:
Notao o (O pequeno)
Notao
Estas duas notaes no so usadas normalmente, mas importante saber
seus conceitos e diferenas em relao s notaes O e , respectivamente.
UFMG/ICEx/DCC 93
Notao o (1)
O limite assinttico superior denido pela notao O pode ser assintotica-
mente rme ou no.
Por exemplo, o limite 2n
2
= O(n
2
) assintoticamente rme, mas o limite
2n = O(n
2
) no .
A notao o usada para denir um limite superior que no assintotica-
mente rme.
Formalmente a notao o denida como:
f(n) = o(g(n)), para qq c > 0 e n
0
[ 0 f(n) < cg(n), n n
0
Exemplo, 2n = o(n
2
) mas 2n
2
,= o(n
2
).
UFMG/ICEx/DCC 94
Notao o (2)
As denies das notaes O (o grande) e o (o pequeno) so similares.
A diferena principal que em f(n) = O(g(n)), a expresso 0 f(n)
cg(n) vlida para todas constantes c > 0.
Intuitivamente, a funo f(n) tem um crescimento muito menor que g(n)
quando n tende para innito. Isto pode ser expresso da seguinte forma:
lim
n
f(n)
g(n)
= 0
Alguns autores usam este limite como a denio de o.
UFMG/ICEx/DCC 95
Notao
Por analogia, a notao est relacionada coma notao da mesma forma
que a notao o est relacionada com a notao O.
Formalmente a notao denida como:
f(n) = (g(n)), para qq c > 0 e n
0
[ 0 cg(n) < f(n), n n
0
Por exemplo,
n
2
2
= (n), mas
n
2
2
,= (n
2
).
A relao f(n) = (g(n)) implica em
lim
n
f(n)
g(n)
= ,
se o limite existir.
UFMG/ICEx/DCC 96
Comparao de programas
Podemos avaliar programas comparando as funes de complexidade, negli-
genciando as constantes de proporcionalidade.
Um programa com tempo de execuo O(n) melhor que outro com tempo
O(n
2
).
Porm, as constantes de proporcionalidade podem alterar esta consider-
ao.
Exemplo: um programa leva 100n unidades de tempo para ser executado e
outro leva 2n
2
. Qual dos dois programas melhor?
Depende do tamanho do problema.
Para n < 50, o programa com tempo 2n
2
melhor do que o que possui
tempo 100n.
Para problemas com entrada de dados pequena prefervel usar o pro-
grama cujo tempo de execuo O(n
2
).
Entretanto, quando n cresce, o programa com tempo de execuo O(n
2
)
leva muito mais tempo que o programa O(n).
UFMG/ICEx/DCC 97
Classes de Comportamento Assinttico
Complexidade Constante
f(n) = O(1)
O uso do algoritmo independe do tamanho de n.
As instrues do algoritmo so executadas um nmero xo de vezes.
O que signica um algoritmo ser O(2) ou O(5)?
UFMG/ICEx/DCC 98
Classes de Comportamento Assinttico
Complexidade Logartmica
f(n) = O(logn)
Ocorre tipicamente em algoritmos que resolvem um problema transfor-
mando-o em problemas menores.
Nestes casos, o tempo de execuo pode ser considerado como sendo
menor do que uma constante grande.
Supondo que a base do logaritmo seja 2:
Para n = 1000, log
2
10.
Para n = 1000000, log
2
20.
Exemplo:
Algoritmo de pesquisa binria.
UFMG/ICEx/DCC 99
Classes de Comportamento Assinttico
Complexidade Linear
f(n) = O(n)
Em geral, um pequeno trabalho realizado sobre cada elemento de en-
trada.
Esta a melhor situao possvel para um algoritmo que tem que proces-
sar/produzir n elementos de entrada/sada.
Cada vez que n dobra de tamanho, o tempo de execuo tambm dobra.
Exemplos:
Algoritmo de pesquisa seqencial.
Algoritmo para teste de planaridade de um grafo.
UFMG/ICEx/DCC 100
Classes de Comportamento Assinttico
Complexidade Linear Logartmica
f(n) = O(nlogn)
Este tempo de execuo ocorre tipicamente em algoritmos que resolvem
um problema quebrando-o em problemas menores, resolvendo cada um
deles independentemente e depois agrupando as solues.
Caso tpico dos algoritmos baseados no paradigma diviso-e-conquista.
Supondo que a base do logaritmo seja 2:
Para n = 1000000, log
2
20000000.
Para n = 2000000, log
2
42000000.
Exemplo:
Algoritmo de ordenao MergeSort.
UFMG/ICEx/DCC 101
Classes de Comportamento Assinttico
Complexidade Quadrtica
f(n) = O(n
2
)
Algoritmos desta ordem de complexidade ocorrem quando os itens de da-
dos so processados aos pares, muitas vezes em um anel dentro do outro
Para n = 1000, o nmero de operaes da ordem de 1000000.
Sempre que n dobra o tempo de execuo multiplicado por 4.
Algoritmos deste tipo so teis para resolver problemas de tamanhos rela-
tivamente pequenos.
Exemplos:
Algoritmos de ordenao simples como seleo e insero.
UFMG/ICEx/DCC 102
Classes de Comportamento Assinttico
Complexidade Cbica
f(n) = O(n
3
)
Algoritmos desta ordem de complexidade geralmente so teis apenas
para resolver problemas relativamente pequenos.
Para n = 100, o nmero de operaes da ordem de 1000000
Sempre que n dobra o tempo de execuo multiplicado por 8.
Algoritmos deste tipo so teis para resolver problemas de tamanhos rela-
tivamente pequenos.
Exemplo:
Algoritmo para multiplicao de matrizes.
UFMG/ICEx/DCC 103
Classes de Comportamento Assinttico
Complexidade Exponencial
f(n) = O(2
n
)
Algoritmos desta ordem de complexidade no so teis sob o ponto de
vista prtico.
Eles ocorrem na soluo de problemas quando se usa a fora bruta para
resolv-los.
Para n = 20, o tempo de execuo cerca de 1000000.
Sempre que n dobra o tempo de execuo ca elevado ao quadrado.
Exemplo:
Algoritmo do Caixeiro Viajante
UFMG/ICEx/DCC 104
Classes de Comportamento Assinttico
Complexidade Exponencial
f(n) = O(n!).
Um algoritmo de complexidade O(n!) dito ter complexidade exponencial,
apesar de O(n!) ter comportamento muito pior do que O(2
n
).
Geralmente ocorrem quando se usa fora bruta na soluo do problema.
Considerando:
n = 20, temos que 20! = 2432902008176640000, um nmero com 19
dgitos.
n = 40 temos um nmero com 48 dgitos.
UFMG/ICEx/DCC 105
Comparao de funes de complexidade
Funo Tamanho n
de custo 10 20 30 40 50 60
n
0,00001 0,00002 0,00003 0,00004 0,00005 0,00006
s s s s s s
n
2 0,0001 0,0004 0,0009 0,0016 0,0.35 0,0036
s s s s s s
n
3 0,001 0,008 0,027 0,64 0,125 0.316
s s s s s s
n
5 0,1 3,2 24,3 1,7 5,2 13
s s s min min min
2
n 0,001 1 17,9 12,7 35,7 366
s s min dias anos sc
3
n 0,059 58 6,5 3855 10
8
10
13
s min anos sc sc sc
Funo de Computador Computador 100 Computador 1000
custo de tempo atual vezes mais rpido vezes mais rpido
n t
1
100 t
1
1000 t
1
n
2
t
2
10 t
2
31, 6 t
2
n
3
t
3
4, 6 t
3
10 t
3
2
n
t
4
t
4
+6, 6 t
4
+10
UFMG/ICEx/DCC 106
Hierarquias de funes (1)
A seguinte hierarquia de funes pode ser denida do ponto de vista assinttico:
1 loglogn logn n

n
c
n
logn
c
n
n
n
c
c
n
onde e c so constantes arbitrrias com 0 < < 1 < c.
UFMG/ICEx/DCC 107
Hierarquias de funes (2)
Usando MatLab, ou um outro pacote matemtico, desenhe os grcos dessas
funes, quando n
UFMG/ICEx/DCC 108
Hierarquias de funes (3)
Onde as seguintes funes se encaixam nessa hierarquia? (Mostre a sua
soluo)
(a) (n) =
n
lnn
. Esta funo dene o nmero de primos menor ou igual a n.
(b) e

logn
.
Dica: e
f(n)
e
g(n)
lim
n
(f(n) g(n)) =
UFMG/ICEx/DCC 109
Hierarquias de Funes (4)
Preliminares
A hierarquia apresentada est relacionada com funes que vo para o innito.
No entanto, podemos ter o recproco dessas funes j que elas nunca so
zero. Isto ,
f(n) g(n)
1
g(n)

1
f(n)
.
Assim, todas as funes (exceto 1) tendem para zero:
1
c
c
n

1
n
n

1
c
n

1
n
logn

1
n
c

1
n


1
logn

1
loglogn
1
UFMG/ICEx/DCC 110
Hierarquias de Funes (5)
Soluo de (a)
(n) =
n
lnn
Temos que (note que a base do logaritmo no altera a hierarquia):
1
n


1
lnn
1
Multiplicando por n, temos:
n
n


n
lnn
n,
ou seja,
n
1
(n) n
Note que o valor 1 ainda menor que 1.
UFMG/ICEx/DCC 111
Hierarquias de Funes (6)
Soluo de (b)
e

logn
Dado a hierarquia:
1 lnlnn

lnn lnn
e elevando a e, temos que:
e
1
e
lnlnn
e

lnn
e
lnn
Simplicando temos:
e lnn e

lnn
n

UFMG/ICEx/DCC 112
Algoritmo exponencial Algoritmo polinomial (1)
Funes de complexidade:
Um algoritmo cuja funo de complexidade O(c
n
), c > 1, chamado de
algoritmo exponencial no tempo de execuo.
Um algoritmo cuja funo de complexidade O(p(n)), onde p(n) um
polinmio de grau n, chamado de algoritmo polinomial no tempo de exe-
cuo.
A distino entre estes dois tipos de algoritmos torna-se signicativa quando
o tamanho do problema a ser resolvido cresce.
Esta a razo porque algoritmos polinomiais so muito mais teis na prtica
do que algoritmos exponenciais.
Geralmente, algoritmos exponenciais so simples variaes de pesquisa
exaustiva.
UFMG/ICEx/DCC 113
Algoritmo exponencial Algoritmo polinomial (2)
Os algoritmos polinomiais so geralmente obtidos atravs de um entendi-
mento mais profundo da estrutura do problema.
Tratabilidade dos problemas:
Um problema considerado intratvel se ele to difcil que no se conhe-
ce um algoritmo polinomial para resolv-lo.
Um problema considerado tratvel (bem resolvido) se existe um algoritmo
polinomial para resolv-lo.
Aspecto importante no projeto de algoritmos.
UFMG/ICEx/DCC 114
Algoritmo exponencial Algoritmo polinomial (3)
A distino entre algoritmos polinomiais ecientes e algoritmos exponenciais
inecientes possui vrias excees.
Exemplo: um algoritmo com funo de complexidade f(n) = 2
n
mais
rpido que um algoritmo g(n) = n
5
para valores de n menores ou iguais a
20.
Tambm existem algoritmos exponenciais que so muito teis na prtica.
Exemplo: o algoritmo Simplex para programao linear possui complexi-
dade de tempo exponencial para o pior caso mas executa muito rpido na
prtica.
Tais exemplos no ocorrem com freqncia na prtica, e muitos algoritmos
exponenciais conhecidos no so muito teis.
UFMG/ICEx/DCC 115
Algoritmo exponencial
O Problema do Caixeiro Viajante
Um caixeiro viajante deseja visitar n cidades de tal forma que sua viagem
inicie e termine em uma mesma cidade, e cada cidade deve ser visitada uma
nica vez.
Supondo que sempre h uma estrada entre duas cidades quaisquer, o prob-
lema encontrar a menor rota para a viagem.
Seja a gura que ilustra o exemplo para quatro cidades c
1
, c
2
, c
3
, c
4
, em que
os nmeros nas arestas indicam a distncia entre duas cidades.
8
5
4
8
3
c
1
c
c
c
2
3
4
9
O percurso c
1
, c
3
, c
4
, c
2
, c
1
) uma soluo
para o problema, cujo percurso total tem distn-
cia 24.
UFMG/ICEx/DCC 116
Exemplo de algoritmo exponencial
Um algoritmo simples seria vericar todas as rotas e escolher a menor delas.
H (n1)! rotas possveis e a distncia total percorrida em cada rota envolve
n adies, logo o nmero total de adies n!.
No exemplo anterior teramos 24 adies.
Suponha agora 50 cidades: o nmero de adies seria 50! 10
64
.
Em um computador que executa 10
9
adies por segundo, o tempo total para
resolver o problema com 50 cidades seria maior do que 10
45
sculos s para
executar as adies.
O problema do caixeiro viajante aparece com freqncia em problemas rela-
cionados com transporte, mas tambm aplicaes importantes relacionadas
com otimizao de caminho percorrido.
UFMG/ICEx/DCC 117
Tcnicas de anlise de algoritmos
Determinar o tempo de execuo de um programa pode ser um problema
matemtico complexo.
Determinar a ordem do tempo de execuo, sem preocupao com o valor da
constante envolvida, pode ser uma tarefa mais simples.
A anlise utiliza tcnicas de matemtica discreta, envolvendo contagem ou
enumerao dos elementos de um conjunto:
manipulao de somas;
produtos;
permutaes;
fatoriais;
coecientes binomiais;
soluo de equaes de recorrncia.
UFMG/ICEx/DCC 118
Anlise do tempo de execuo
Comando de atribuio, de leitura ou de escrita: O(1).
Seqncia de comandos: determinado pelo maior tempo de execuo de
qualquer comando da seqncia.
Comando de deciso: tempo dos comandos dentro do comando condicional,
mais tempo para avaliar a condio, que O(1).
Anel: soma do tempo de execuo do corpo do anel mais o tempo de avaliar
a condio para terminao (geralmente O(1)), multiplicado pelo nmero de
iteraes.
UFMG/ICEx/DCC 119
Anlise do tempo de execuo
Procedimentos no recursivos:
Cada um deve ser computado separadamente um a um, iniciando com os
que no chamam outros procedimentos.
Avalia-se ento os que so chamam os j avaliados (utilizando os tempos
desses).
O processo repetido at chegar no programa principal.
Procedimentos recursivos:
associada uma funo de complexidade f(n) desconhecida, onde n
mede o tamanho dos argumentos.
UFMG/ICEx/DCC 120
Procedimento no recursivo
Algoritmo para ordenar os n elementos de um conjunto A em ordem ascen-
dente.
procedure Ordena (var A: Vetor);
var i, j, min, x: integer;
begin
(1) for i := 1 to n-1 do
begin
{min contm o ndice do
menor elemento de A[i..n]}
(2) min := i;
(3) for j := i+1 to n do
(4) if A[j] < A[min]
(5) then min := j;
{Troca A[min] e A[i]}
(6) x := A[min];
(7) A[min] := A[i];
(8) A[i] := x;
end;
end;
Seleciona o menor elemento do conjunto.
Troca este elemento com A[1].
Repete as duas operaes acima com os n 1
elementos restantes, depois com os n 2, at
que reste apenas um.
UFMG/ICEx/DCC 121
Anlise do procedimento no recursivo
Anel interno
Contm um comando de deciso, com um comando apenas de atribuio.
Ambos levam tempo constante para serem executados.
Quanto ao corpo do comando de deciso, devemos considerar o pior caso,
assumindo que ser sempre executado.
O tempo para incrementar o ndice do anel e avaliar sua condio de termi-
nao O(1).
O tempo combinado para executar uma vez o anel O(max(1, 1, 1)) =
O(1), conforme regra da soma para a notao O.
Como o nmero de iteraes ni, o tempo gasto no anel O((ni)1) =
O(n i), conforme regra do produto para a notao O.
UFMG/ICEx/DCC 122
Anlise do procedimento no recursivo
Anel externo
Contm, alm do anel interno, quatro comandos de atribuio:
O(max(1, (n i), 1, 1, 1)) = O(n i).
A linha (1) executada n1 vezes, e o tempo total para executar o programa
est limitado ao produto de uma constante pelo somatrio de (n i):


n1
1
(n i) =
n(n1)
2
=
n
2
2

n
2
= O(n
2
)
Considerarmos o nmero de comparaes como a medida de custo relevante,
o programa faz (n
2
)/2 n/2 comparaes para ordenar n elementos.
Considerarmos o nmero de trocas, o programa realiza exatamente n 1
trocas.
UFMG/ICEx/DCC 123
Algoritmos recursivos
Umobjeto recursivo quando denido parcialmente emtermos de si mesmo
Exemplo 1: Nmeros naturais
(a) 1 um nmero natural
(b) o sucessor de um nmero natural um nmero natural
Exemplo 2: Funo fatorial
(a) 0! = 1
(b) se n > 0 ento n! = n (n 1)!
UFMG/ICEx/DCC 124
Algoritmos recursivos
Exemplo 3: rvores
(a) A rvore vazia uma rvore
(b) se T
1
e T
2
so rvores ento T
t
um rvore
T
t

T
1

T
2

UFMG/ICEx/DCC 125
Poder da recurso
Denir um conjunto innito de objetos atravs de um comando nito
Um problema recursivo P pode ser expresso como P 1[S
i
, P], onde 1
a composio de comandos S
i
e do prprio P
Importante: constantes e variveis locais a P so duplicadas a cada chamada
recursiva
UFMG/ICEx/DCC 126
Problema de terminao
Denir um condio de terminao
Idia:
Associar um parmetro, por exemplo n, com P e chamar P recursivamente
com n 1 como parmetro
A condio n > 0 garante a terminao
Exemplo:
P(n) if n > 0 then 1[S
i
; P(n 1)]
Importante: na prtica necessrio:
mostrar que o nvel de recurso nito, e
tem que ser mantido pequeno! Por que?
UFMG/ICEx/DCC 127
Razes para limitar a recurso
Memria necessria para acomodar variveis a cada chamada
O estado corrente da computao tem que ser armazenado para permitir a
volta da chamada recursiva.
Exemplo:
function F(i : integer) : integer;
begin
if i > 0
then F := i
*
F(i-1)
else F := 1;
end;
F(4) 1 4F(3)
2 3F(2)
3 2F(1)
4 1F(0)
1
UFMG/ICEx/DCC 128
Quando no usar recursividade
Algoritmos recursivos so apropriados quando o problema denido em ter-
mos recursivos
Entretanto, uma denio recursiva no implica necessariamente que a im-
plementao recursiva a melhor soluo!
Casos onde evitar recursividade:
P if condio then (S
i
; P)
Exemplo: P if i < n then (
..
i := i +1; F := i F; P)
UFMG/ICEx/DCC 129
Eliminando a recursividade de cauda
(Tail recursion)
function Fat : integer;
var F, i : integer;
begin
i := 0; F := 1;
while i < n do
begin
i := i+1;
F := F
*
i;
end;
Fat := F;
end
Logo,
P if B then (S; P)
deve ser transformado em
P (x = x
0
; while B do S)
UFMG/ICEx/DCC 130
Outro exemplo
function Fib(n : integer) : integer;
begin
if n = 0
then Fib := 0
else if n = 1
then Fib := 1
else Fib := Fib(n-1) + Fib(n-2);
end; {Fib}
Observao: para cada chamada a
Fib(n), Fib ativada 2 vezes
5
s
4
s
3
s
2
s
1
s

f
f
f
f
f
ff
0
s

f
f
f
f
f
ff
1
s

t
t
t
t
t
tt
2
s
1
s

f
f
f
f
f
ff
0
s
D
D
D
D
D
D
DDl
l
l
l
l
l
ll
3
s
2
s
1
s

f
f
f
f
f
ff
0
s

f
f
f
f
f
ff
1
s
UFMG/ICEx/DCC 131
Soluo bvia
function Fib : integer;
var i, Temp, F, Fant : integer;
begin
i := 1; F := 1; Fant := 0;
while i < n do
begin
Temp := F;
F := F + Fant;
Fant := Temp;
i := i+1;
end;
Fib := F;
end; {Fib}
Complexidade de tempo: T(n) = n 1
Complexidade de espao: E(n) = O(1)
UFMG/ICEx/DCC 132
Procedimento recursivo
Pesquisa(n);
(1) if n 1
(2) then "inspecione elemento" e termine
else begin
(3) para cada um dos n elementos "inspecione elemento";
(4) Pesquisa(n/3);
end;
Para cada procedimento recursivo associada uma funo de complexidade
f(n) desconhecida, onde n mede o tamanho dos argumentos para o proce-
dimento.
Obtemos uma equao de recorrncia para f(n).
Equao de recorrncia: maneira de denir uma funo por uma expresso
envolvendo a mesma funo.
UFMG/ICEx/DCC 133
Anlise do procedimento recursivo
Seja T(n) uma funo de complexidade que represente o nmero de inspe-
es nos n elementos do conjunto.
O custo de execuo das linhas (1) e (2) O(1) e da linha (3) O(n).
Usa-se uma equao de recorrncia para determinar o n
o
de chamadas
recursivas.
O termo T(n) especicado em funo dos termos anteriores T(1), T(2),
. . ., T(n 1).
T(n) = n +T(n/3), T(1) = 1 (para n = 1 fazemos uma inspeo).
Por exemplo, T(3) = T(3/3) +3 = 4, T(9) = T(9/3) +9 = 13, e assim
por diante.
Para calcular o valor da funo seguindo a denio so necessrios k 1
passos para computar o valor de T(3
k
).
UFMG/ICEx/DCC 134
Ex de resoluo de equao de recorrncia (1)
Substitui-se os termos T(k), k < n, at que todos os termos T(k), k > 1,
tenham sido substitudos por frmulas contendo apenas T(1).
T(n) = n +T(n/3)
T(n/3) = n/3 +T(n/3/3)
T(n/3/3) = n/3/3 +T(n/3/3/3)
.
.
.
T(n/3/3 /3) = n/3/3 /3 +T(n/3 /3)
Adicionando lado a lado, temos
T(n) = n +n (1/3) +n (1/3
2
) +n (1/3
3
) + +(n/3/3 /3)
que representa a soma de uma srie geomtrica de razo 1/3, multiplicada por
n, e adicionada de T(n/3/3 /3), que menor ou igual a 1.
UFMG/ICEx/DCC 135
Ex de resoluo de equao de recorrncia (2)
T(n) = n +n (1/3) +n (1/3
2
) +n (1/3
3
) + + +(n/3/3 /3)
Se desprezarmos o termo T(n/3/3 /3), quando n tende para innito, ento
T(n) = n

i=0
(1/3)
i
= n

1
1
1
3

=
3n
2

Se considerarmos o termo T(n/3/3/3 /3) e denominarmos x o nmero de
subdivises por 3 do tamanho do problema, ento n/3
x
= 1, e n = 3
x
. Logo
x = log
3
n.
UFMG/ICEx/DCC 136
Ex de resoluo de equao de recorrncia (3)
Lembrando que T(1) = 1 temos
T(n) =
x1

i=0
n
3
i
+T(
n
3
x
)
= n
x1

i=0
(1/3)
i
+1
=
n(1 (
1
3
)
x
)
(1
1
3
)
+1
=
3n
2

1
2

Logo, o programa do exemplo O(n).
UFMG/ICEx/DCC 137
Comentrios sobre recursividade
Evitar o uso de recursividade quando existe uma soluo bvia por iterao!
Exemplos:
Fatorial
Srie de Fibonacci
UFMG/ICEx/DCC 138
Anlise de algoritmos recursivos
Comportamento descrito por uma equao de recorrncia
Enfoque possvel:
Usar a prpria recorrncia para substituir para T(m), m < n at que todos
os termos tenham sido substitudos por frmulas envolvendo apenas T(0)
ou o caso base
UFMG/ICEx/DCC 139
Anlise da funo fat
Seja a seguinte funo para calcular o fatorial de n:
function fat(n : integer}) : integer};
begin
if n <= 1
then fat := 1
else fat := n
*
fat(n-1);
end; {fat}
Seja a seguinte equao de recorrncia para esta funo:
T(n) =
_
d n = 1
c +T(n 1) n > 1
Esta equao diz que quando n = 1 o custo para executar fat igual a d.
Para valores de n maiores que 1, o custo para executar fat c mais o custo
para executar T(n 1)
UFMG/ICEx/DCC 140
Resolvendo a equao de recorrncia
Esta equao de recorrncia pode ser
expressa da seguinte forma:
T(n) = c +T(n 1)
= c +(c +T(n 2))
= c +c +(c +T(n 3))
.
.
. =
.
.
.
= c +c + +(c +T(1))
= c +c + +c
. .
n1
+d
Em cada passo, o valor do termo T
substitudo pela sua denio (ou
seja, esta recorrncia est sendo re-
solvida pelo mtodo da expanso). A
ltima equao mostra que depois da
expanso existem n 1 cs, corre-
spondentes aos valores de 2 at n.
Desta forma, a recorrncia pode ser
expressa como:
T(n) = c(n 1) +d = O(n)
UFMG/ICEx/DCC 141
Alguns somatrios teis
n

i=1
i =
n(n +1)
2
k

i=0
2
k
= 2
k+1
1
k

i=0
1
2
i
= 2
1
2
k
k

i=0
a
i
=
a
k+1
1
a 1
(a ,= 1)
n

i=1
i
2
=
n(n +1)(2n +1)
6
UFMG/ICEx/DCC 142
Algumas recorrncias bsicas: Caso 1
T(n) = T(
n
2
) +1 (n 2)
T(1) = 0 (n = 1)
Vamos supor que:
n = 2
k
k = logn
Resolvendo por expanso temos:
T(2
k
) = T(2
k1
) +1
= (T(2
k2
) +1) +1
= (T(2
k3
) +1) +1 +1
.
.
.
.
.
.
= (T(2) +1) +1 + +1
= (T(1) +1) +1 + +1
= 0 +1 + +1
. .
k
= k
T(n) = logn
T(n) = O(logn)
UFMG/ICEx/DCC 143
Algumas recorrncias bsicas: Caso 2
T(n) = 2T(
n
2
) +n (n 2)
T(1) = 0 (n = 1)
Vamos supor que n = 2
k
k = logn. Resolvendo por expanso temos:
T(2
k
) = 2T(2
k1
) +2
k
= 2(2T(2
k2
) +2
k1
) +2
k
= 2(2(2T(2
k3
) +2
k2
) +2
k1
) +2
k
.
.
.
.
.
.
= 2(2( (2(2T(1) +2
2
) +2
3
) + ) +2
k1
) +2
k
= (k 1)2
k
+2
k
= k2
k
T(n) = nlogn
T(n) = O(nlogn)
UFMG/ICEx/DCC 144
Teorema Mestre (1)
Recorrncias da forma
T(n) = aT(n/b) +f(n),
onde a 1 e b > 1 so constantes e f(n) uma funo assintoticamente pos-
itiva podem ser resolvidas usando o Teorema Mestre. Note que neste caso no
estamos achando a forma fechada da recorrncia mas sim seu comportamento
assinttico.
UFMG/ICEx/DCC 145
Teorema Mestre (2)
Sejam as constantes a 1 e b > 1 e f(n) uma funo denida nos inteiros
no-negativos pela recorrncia:
T(n) = aT(n/b) +f(n),
onde a frao n/b pode signicar ]n/b| ou n/b|. A equao de recorrncia
T(n) pode ser limitada assintoticamente da seguinte forma:
1. Se f(n) = O(n
log
b
a
) para alguma constante > 0,
ento T(n) = (n
log
b
a
) .
2. Se f(n) = (n
log
b
a
), ento T(n) = (n
log
b
a
logn) .
3. Se f(n) = (n
log
b
a+
) para alguma constante > 0 e se af(n/b)
cf(n) para alguma constante c < 1 e para n sucientemente grande,
ento T(n) = (f(n)) .
UFMG/ICEx/DCC 146
Comentrios sobre o teorema Mestre (3)
Nos trs casos estamos comparando a funo f(n) com a funo n
log
b
a
.
Intuitivamente, a soluo da recorrncia determinada pela maior das duas
funes.
Por exemplo:
No primeiro caso a funo n
log
b
a
a maior e a soluo para a recorrncia
T(n) = (n
log
b
a
).
No terceiro caso, a funo f(n) a maior e a soluo para a recorrncia
T(n) = (f(n)).
No segundo caso, as duas funes so do mesmo tamanho. Neste caso,
a soluo ca multiplicada por um fator logartmico e ca da forma T(n) =
(n
log
b
a
logn) = (f(n) logn).
UFMG/ICEx/DCC 147
Tecnicalidades sobre o teorema Mestre (4)
No primeiro caso, a funo f(n) deve ser no somente menor que n
log
b
a
mas ser polinomialmente menor. Ou seja, f(n) deve ser assintoticamente
menor que n
log
b
a
por um fator de n

, para alguma constante > 0.


No terceiro caso, a funo f(n) deve ser no somente maior que n
log
b
a
mas ser polinomialmente maior e satisfazer a condio de regularidade que
af(n/b) cf(n). Esta condio satisfeita pela maior parte das funes
polinomiais encontradas neste curso.
UFMG/ICEx/DCC 148
Tecnicalidades sobre o teorema Mestre (5)
Teorema no cobre todas as possibilidades para f(n):
Entre os casos 1 e 3 existem funes f(n) que so menores que n
log
b
a
mas no so polinomialmente menores.
Entre os casos 2 e 3 existem funes f(n) que so maiores que n
log
b
a
mas no so polinomialmente maiores.
Se a funo f(n) cai numa dessas condies ou a condio de regularidade
do caso 3 falsa, ento no se pode aplicar este teorema para resolver a
recorrncia.
UFMG/ICEx/DCC 149
Uso do teorema: Exemplo 1
T(n) = 9T(n/3) +n
Temos que,
a = 9, b = 3, f(n) = n
Desta forma,
n
log
b
a
= n
log
3
9
= (n
2
)
Como f(n) = O(n
log
3
9
), onde = 1, podemos aplicar o caso 1 do teorema
e concluir que a soluo da recorrncia
T(n) = (n
2
)
UFMG/ICEx/DCC 150
Uso do teorema: Exemplo 2
T(n) = T(2n/3) +1
Temos que,
a = 1, b = 3/2, f(n) = 1
Desta forma,
n
log
b
a
= n
log
3/2
1
= n
0
= 1
O caso 2 se aplica j que f(n) = (n
log
b
a
) = (1). Temos, ento, que a
soluo da recorrncia
T(n) = (logn)
UFMG/ICEx/DCC 151
Uso do teorema: Exemplo 3
T(n) = 3T(n/4) +nlogn
Temos que,
a = 3, b = 4, f(n) = nlogn
Desta forma,
n
log
b
a
= n
log
4
3
= O(n
0.793
)
Como f(n) = (n
log
4
3+
), onde 0.2, o caso 3 se aplica se mostrarmos
que a condio de regularidade verdadeira para f(n).
UFMG/ICEx/DCC 152
Uso do teorema: Exemplo 3
Para um valor sucientemente grande de n
af(n/b) = 3(n/4) log(n/4) (3/4)nlogn = cf(n)
para c = 3/4. Conseqentemente, usando o caso 3, a soluo para a recor-
rncia
T(n) = (nlogn)
UFMG/ICEx/DCC 153
Uso do teorema: Exemplo 4
T(n) = 2T(n/2) +nlogn
Temos que,
a = 2, b = 2, f(n) = nlogn
Desta forma,
n
log
b
a
= n
Aparentemente o caso 3 deveria se aplicar j que f(n) = nlogn assintoti-
camente maior que n
log
b
a
= n. Mas no entanto, no polinomialmente maior.
A frao f(n)/n
log
b
a
= (nlogn)/n = logn que assintoticamente menor
que n

para toda constante positiva . Conseqentemente, a recorrncia cai na


situao entre os casos 2 e 3 onde o teorema no pode ser aplicado.
UFMG/ICEx/DCC 154
Uso do teorema: Exerccios
1. T(n) = 4T(n/2) +n
2. T(n) = 4T(n/2) +n
2
3. T(n) = 4T(n/2) +n
3
4. O tempo de execuo de um algoritmo A descrito pela recorrncia
T(n) = 7T(n/2) + n
2
. Um outro algoritmo A
t
tem um tempo de exe-
cuo descrito pela recorrncia T
t
(n) = aT
t
(n/4) + n
2
. Qual o maior
valor inteiro de a tal que A
t
assintoticamente mais rpido que A?
UFMG/ICEx/DCC 155
Notao assinttica em funes (1)
Normalmente, a notao assinttica usada em frmulas matemticas. Por
exemplo, usando a notao O pode-se escrever que n = O(n
2
). Tambm
pode-se escrever que
2n
2
+3n +1 = 2n
2
+(n)
Como se interpreta uma frmula como esta?
UFMG/ICEx/DCC 156
Notao assinttica em funes (2)
Notao assinttica sozinha no lado direito de uma equao, como em n =
O(n
2
)
Sinal de igualdade signica que o lado esquerdo um membro do conjunto
O(n
2
)
n O(n
2
) ou n n
2
Nunca deve-se escrever uma igualdade onde a notao O aparece sozinha
com os lados trocados
Caso contrrio, poderia se deduzir um absurdo como n
2
= n de igual-
dades como em O(n
2
) = n
Quando se trabalha com a notao O e em qualquer outra frmula que en-
volve quantidades no precisas, o sinal de igualdade unidirecional
Da vem o fato que o sinal de igualdade ("=") realmente signica ou ,
usados para incluso de conjuntos
UFMG/ICEx/DCC 157
Notao assinttica em funes (3)
Se uma notao assinttica aparece numa frmula, isso signica que essa no-
tao est substituindo uma funo que no importante denir precisamente
(por algum motivo). Por exemplo, a equao
2n
2
+3n +1 = 2n
2
+(n)
signica que
2n
2
+3n +1 = 2n
2
+f(n)
onde f(n) alguma funo no conjunto (n). Neste caso, f(n) = 3n + 1
que de fato est em (n).
UFMG/ICEx/DCC 158
Notao assinttica em funes (4)
O uso da notao assinttica desta forma ajuda a eliminar detalhes que no
so importantes. Por exemplo, pode-se expressar uma equao de recorrncia
como:
T(n) = 2T(n 1) +(n).
Se se deseja determinar o comportamento assinttico de T(n) ento no
necessrio determinar exatamente os termos de mais baixa ordem. Entende-se
que eles esto includos numa funo f(n) expressa no termo (n).
UFMG/ICEx/DCC 159
Notao assinttica em funes (5)
Em alguns casos, a anotao assinttica aparece do lado esquerdo de uma
equao como em:
2n
2
+(n) = (n
2
).
A interpretao de tais equaes deve ser feita usando a seguinte regra:
possvel escolher uma funo f(n) para o lado esquerdo da igualdade de
tal forma que existe uma funo g(n) para o lado direito que faz com que a
equao seja vlida
O lado direito da igualdade dene um valor no to preciso quanto o lado
esquerdo. Por exemplo,
2n
2
+3n +1 = 2n
2
+(n) (1)
2n
2
+(n) = (n
2
). (2)
UFMG/ICEx/DCC 160
Notao assinttica em funes (6)
As equaes (1) e (2) podem ser interpretadas usando a regra acima:
A equao (1) diz que existe alguma funo f(n) (n) tal que 2n
2
+
3n +1 = 2n
2
+f(n) para todo n.
A equao (2) diz que para qualquer funo g(n) (n), existe uma funo
h(n) (n
2
) tal que
2n
2
+g(n) = h(n)
para todo n. Note que esta interpretao implica que 2n
2
+3n+1 = (n
2
),
que o que estas duas equaes querem dizer.
UFMG/ICEx/DCC 161
Modelagem usando equao de recorrncia (1)
Torre de Hanoi
Inventor:
Em 1883, o matemtico francs Edouard Lucas criou um jogo chamado
Torre de Hanoi
Congurao inicial:
O jogo comea com um conjunto de oito discos empilhados em tamanho
decrescente em uma das trs varetas
UFMG/ICEx/DCC 162
Modelagem usando equao de recorrncia (2)
Torre de Hanoi
Objetivo:
Transferir toda a torre para uma das outras varetas, movendo um disco de
cada vez, mas nunca movendo um disco maior sobre um menor
Solues particulares:
Seja T(n) o nmero mnimo de movimentos para transferir n discos de
uma vareta para outra de acordo com as regras denidas no enunciado do
problema.
No difcil observar que:
T(0) = 0 [nenhum movimento necessrio]
T(1) = 1 [apenas um movimento]
T(2) = 3 [trs movimentos usando as duas varetas]
UFMG/ICEx/DCC 163
Modelagem usando equao de recorrncia (3)
Torre de Hanoi
Generalizao da soluo:
Para trs discos, a soluo correta transferir os dois discos do topo para a
vareta do meio, transferir o terceiro disco para a outra vareta e, nalmente,
mover os outros dois discos sobre o topo do terceiro.
Para n discos:
1. Transfere-se os n 1 discos menores para outra vareta (por exemplo, a
do meio), requerendo T(n 1) movimentos.
2. Transfere-se o disco maior para a outra vareta (1 movimento).
3. Transfere-se os n 1 discos menores para o topo do disco maior,
requerendo-se T(n 1) movimentos novamente.
UFMG/ICEx/DCC 164
Modelagem usando equao de recorrncia (4)
Torre de Hanoi
Equao de recorrncia para este problema pode ser expressa por:
T(0) = 0
T(n) = 2T(n 1) +1, para n > 0
UFMG/ICEx/DCC 165
Modelagem usando equao de recorrncia (5)
Torre de Hanoi
Para pequenos valores de n temos:
n 0 1 2 3 4 5 6
T(n) 0 1 3 7 15 31 63
Esta recorrncia pode ser expressa por
T(n) = 2
n
1
UFMG/ICEx/DCC 166
Modelagem usando equao de recorrncia (6)
Torre de Hanoi
Provando por induo matemtica temos:
Caso base. Para n = 0 temos que T(0) = 2
0
1 = 0, que o valor presente
na equao de recorrncia.
Induo. A induo ser feita em n. Vamos supor que a forma fechada seja
vlida para todos os valores at n 1, ou seja, T(n 1) = 2
n1
1.
Vamos provar que esta forma fechada de fato vlida para T(n).
T(n) = 2T(n 1) +1 = 2(2
n1
1) +1 = 2
n
2 +1 = 2
n
1.
.
.
. A forma fechada proposta tambm vlida para n.
UFMG/ICEx/DCC 167
Modelagem usando equao de recorrncia (7)
Estratgia para resoluo da equao
A recorrncia da Torre de Hanoi aparece em vrias aplicaes de todos os tipos.
Normalmente, existem trs etapas para achar uma forma fechada para o valor
de T(n):
1. Analisar pequenos casos. Com isto podemos ter um entendimento melhor
do problema e, ao mesmo tempo, ajudar nos dois passos seguintes.
2. Achar e provar uma recorrncia para o valor de T(n).
3. Achar e provar uma forma fechada para a recorrncia.
UFMG/ICEx/DCC 168
Modelagem usando equao de recorrncia (8)
Linhas no plano
Problema:
Qual o nmero mximo de regies L
n
determinado por n retas no plano?
Lembre-se que um plano sem nenhuma reta tem uma regio, com uma reta
tem duas regies e com duas retas tm quatro regies.
UFMG/ICEx/DCC 169
Anlise Amortizada: Introduo
Cenrio:
Manter uma estrutura de dados sobre uma seqncia de n operaes.
Custo por operao:
Pode ser alto, por exemplo, (n).
Custo total:
Pode no ser n custo no pior caso de uma operao.
Questo:
Como fazer uma anlise mais precisa num cenrio como esse?
Soluo:
Anlise amortizada.
UFMG/ICEx/DCC 170
Custo amortizado
Denio:
Custo mdio de uma operao sobre uma seqncia de n operaes, max-
imizado sobre todos n e todas seqncias.
Observaes importantes:
O custo amortizado no a mesma coisa que a anlise do caso mdio.
No feita nenhuma suposio sobre a seqncia de entrada.
Amortizao ainda um princpio de pior caso.
UFMG/ICEx/DCC 171
Tcnicas de anlise amortizada
Trs tcnicas que podem ser usadas para analisar tais cenrios so:
Mtodo Agregado (Aggregate Method).
Mtodo Contbil (Accounting Method).
Mtodo Potencial (Potential Method).
Referncia:
Introduction to Algorithms, 2nd edition. Thomas H. Cormen, Charles E. Leis-
erson, Ronald L. Rivest, Clifford Stein. MIT Press, Hardcover, Published July
2001, ISBN 0070131511.
UFMG/ICEx/DCC 172
Exemplo: Incrementar um contador binrio
Exemplo didtico (toy example).
Estrutura de dados:
Arranjo de k bits, usado para armazenar/contar nmeros de 0 a 2
k
1 e
depois novamente a 0.
Operao:
Incrementar.
Custo:
Nmero de bits trocados.
Exemplo: arranjo de 5 bits.
UFMG/ICEx/DCC 173
Exemplo: Incrementar um contador binrio
Bits Custo
00000
00001 1
00010 2
00011 1
00100 3
Custo varia!
Custo mximo: O(logn).
UFMG/ICEx/DCC 174
Contador binrio: Cdigo
Contador binrio de k bits.
Vetor A[0. . . k 1]
Bit menos signicativo na posio A[0].
Bit mais signicativo na posio A[k 1].
Um nmero binrio x dado por

k1
i=0
A[i] 2
i
.
length[A] = k.
Para somar 1 (mdulo 2
k
) ao valor do contador, pode-se usar o procedimento
Increment(A).
UFMG/ICEx/DCC 175
Contador binrio: Cdigo
Increment(A)
i 0
while (i < length[A]) (A[i] = 1) do
begin
A[i] 0
i i + 1
end
if i < length[A]
then A[i] 1
EndIncrement
Essencialmente o mesmo algoritmo implementado pelo contador Ripple-
Carry em hardware.
UFMG/ICEx/DCC 176
Mtodo agregado
Idia:
Conte o custo total para as n operaes.
Tcnica de contagem:
Ad hoc, ou seja, cada caso um caso.
UFMG/ICEx/DCC 177
Contador binrio
Custo por linha varia.
Difcil de somar.
Soluo:
Conte por coluna, ou seja, quantas vezes o i-simo bit trocado.
Some os custos.
Exemplo: arranjo de 5 bits (k = 5).
UFMG/ICEx/DCC 178
Contador binrio
Bits Custo
0 0 0 0 0
0 0 0 0 1 1
0 0 0 1 0 2
0 0 0 1 1 1
0 0 1 0 0 3
.
.
.
1 1 1 1 1 1
0 0 0 0 0 5

2 4 8 16 32
UFMG/ICEx/DCC 179
Contador binrio
Custo:
Para uma seqncia de n incrementos (2
k
), temos:
Bit de ordem
2
4
2
3
2
2
2
1
2
0
2 4 8 16 32
ou seja, o bit de ordem 2
i
trocado 2
ki
vezes. Logo, o custo total de
trocas
k

i=1
2
i
= 2
k+1
2 = 2 2
k
2 = 2n 2 = O(n)
Custo amortizado por troca = O(n)/n = O(1).
UFMG/ICEx/DCC 180
Mtodo contbil
Estrutura de dados vem com uma conta bancria.
cada operao alocado um custo xo (custo amortizado).
Custos devem ser escolhidos cuidadosamente.
Se o custo real menor que o custo alocado, deposite a diferena na conta
bancria.
Se o custo real maior que o custo alocado, retire a diferena da conta
bancria para pagar pela operao.
Prove que o saldo nunca ca negativo.
UFMG/ICEx/DCC 181
Mtodo contbil
Qual o signicado do saldo car negativo?
Para a seqncia de operaes at aquele momento, o custo amortizado
total no representa um limite superior para o custo real total.
Concluso:
Seqncia de n operaes custa no mximo n custo amortizado.
UFMG/ICEx/DCC 182
Contador binrio
Custo amortizado para trocar 0 1 = 2 crditos.
Pague 1 crdito pela operao e deposite 1 crdito na conta.
Custo amortizado para trocar 1 0 = 0 crditos
Retire da conta 1 crdito para pagar pela operao.
Invariante:
Cada bit 1 no contador gerou um crdito.
Logo, sempre existe crdito para pagar pela operao de trocar 1 0.
UFMG/ICEx/DCC 183
Anlise amortizada
Custo para resetar os bits no while pago pelos crditos dos bits que foram
setados.
No mximo um bit setado.
Custo da operao de incremento no mximo 2.
O nmero de bits 1 no contador nunca negativo.
Saldo nunca negativo.
Para n operaes de incremento, o custo amortizado total O(n), que um
limite para o custo real total.
UFMG/ICEx/DCC 184
Mtodo potencial
Associa-se uma energia potencial a cada estrutura de dados.
Energia potencial o potencial para fazer um estrago.
Custo amortizado = Custo atual +
Novo potencial
Potencial anterior
Deve-se pagar para incrementar o potencial da estrutura de dados.
Se a operao tem um custo cumulativo alto mas reduz bastante o potencial,
ento o custo amortizado baixo.
Como encontrar o potencial?
Determine o que torna uma estrutura de dados ruim.
UFMG/ICEx/DCC 185
Regras bsicas para funes potenciais
Devem ser sempre no negativas.
Devem comear de zero.
Implica uma seqncia de n operaes que custam no mximo n custo
amortizado.
UFMG/ICEx/DCC 186
Contador binrio
Estrutura de dados ruim se tem vrios 1s.
Seja (Contador)= # 1s no contador.
Potencial aumenta quando h um incremento:
= #(0 1) #(1 0)
= 1 #(1 0)
Custo amortizado do incremento:
= Custo real (atual) + Aumento do potencial
= (1 + #(1 0)) + (1 #(1 0))
= 2
Custo amortizado 2 e o custo de n incrementos no mximo 2n.
UFMG/ICEx/DCC 187

You might also like