Você está na página 1de 34

Introduo

Anlise de complexidade
Prof. Andr Lins
alla@ic.ufal.br

Instituto de Computao
Universidade Federal de Alagoas

Algoritmos
Os algoritmos fazem parte do dia-a-dia das pessoas.
Exemplos de algoritmos:
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 finito 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.
PAA - Adaptado de Prof. Loureiro dcc/ufmg

O papel de algoritmos em
computao
Definio: um algoritmo um conjunto finito de
instrues precisas para executar uma computao.
Um algoritmo pode ser visto como uma ferramenta para
resolver um problema computacional bem especificado.

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.


PAA - Adaptado de Prof. Loureiro dcc/ufmg

Origem do vocbulo algoritmo


Abu JaFar Mohammed Ibn Musa alKhowarizmi (780850),
astrnomo e matemtico rabe.
Era membro da Casa da
Sabedoria, uma academia de
cientistas em Bagd. O nome alKhowarizmi significa da cidade
de Khowarizmi, que agora
chamada Khiva e parte do
Uzbequisto. Al-Khowarizmi
escreveu livros de matemtica,
astronomia e geografia. 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 finalmente chegar na palavra
algoritmo para descrever a rea da aritmtica com numerais hindu.
PAA - Adaptado de Prof. Loureiro dcc/ufmg

Algoritmo: Etimologia
Do antropnimo (nome prprio de pessoa ou
de ser personificado) rabe al-Khuwarizmi
(matemtico rabe do sculo IX) formou-se o
rabe al-Khuwarizmi numerao decimal em
arbicos que passou ao latim medieval
algorismus com influncia do grego arithms
nmero; forma histrica 1871 algorithmo.
Referncia: Dicionrio Houaiss da Lngua Portuguesa, 2001, 1a edio.
PAA - Adaptado de Prof. Loureiro dcc/ufmg

Algoritmos: Definies
Dicionrio Houaiss da Lngua Portuguesa,
2001, 1a edio:
Conjunto das regras e procedimentos lgicos
perfeitamente definidos que levam soluo de
um problema em um nmero de etapas.

Dicionrio Webster da Lngua Inglesa:


An Algorithm is a procedure for solving a
mathematical problem in a finite number of steps
that frequently involves a repetition of an
operation
PAA - Adaptado de Prof. Loureiro dcc/ufmg

Algoritmos: Definies
Introduction to Algorithms, ClRS, 2001, 2nd
edition:
Informally, an algorithm is any well-defined
computational procedure that takes some value, or set
of values, as input and produces some value, or set of
values, as output. An algorithm is thus a sequence of
computational steps that transform the input onto the
output.

Algorithms in C, Sedgewick, 1998, 3rd edition:


The term algorithm is used in computer science to
describe a problem solving method suitable for
implementation as a computer program.
PAA - Adaptado de Prof. Loureiro dcc/ufmg

Observaes sobre as definies


Regras so precisas
Conjunto de regras finito
Tempo finito de execuo
Regras so executadas por um computador
PAA - Adaptado de Prof. Loureiro dcc/ufmg

Consequncias
Deve-se definir um repertrio finito de regras
Linguagem de programao

A maior parte dos algoritmos utiliza mtodos de


organizao de dados envolvidos na computao
Estruturas de dados

Tempo finito no uma eternidade


A maior parte das pessoas no est interessada em
algoritmos que levam anos, dcadas, sculos, milnios
para executarem

Existem diferentes tipos de computadores


Existem diferentes modelos computacionais
PAA - Adaptado de Prof. Loureiro dcc/ufmg

Algoritmos: aspectos
Esttico
Texto contendo instrues que devem ser executadas
em uma ordem definida, independente do aspecto
temporal

Dinmico
Execuo de instrues a partir de um conjunto de
valores iniciais, que evolui no tempo

Dificuldade
Relacionamento entre o aspecto esttico e dinmico
PAA - Adaptado de Prof. Loureiro dcc/ufmg

10

Short questions!
1. Um programa pode ser visto como um algoritmo
codificado em uma linguagem de programao
que pode ser executado por um computador.
Qualquer computador pode executar qualquer
programa?
2. Todos os problemas ligados s cincias exatas
possuem algoritmos?
3. Todos os problemas computacionais tm a
mesma dificuldade de resoluo?
4. Como algoritmos diferentes para um mesmo
problema podem ser comparados/avaliados?
PAA - Adaptado de Prof. Loureiro dcc/ufmg

11

Medida de tempo de execuo de um


programa
O projeto de algoritmos fortemente
influenciado pelo estudo de seus
comportamentos.
Depois que um problema analisado e decises
de projeto so finalizadas, necessrio estudar
as vrias opes de algoritmos a serem utilizados,
considerando os aspectos de tempo de execuo
e espao ocupado.
Algoritmos so encontrados em todas as reas de
Cincia da Computao.
PAA - Adaptado de Prof. Loureiro dcc/ufmg

12

Tipos de problemas na anlise de algoritmos.


Anlise de um algoritmo particular
Qual o custo de usar um dado algoritmo
para resolver um problema especfico?

Caractersticas que devem ser investigadas:


anlise do nmero de vezes que cada parte do
algoritmo deve ser executada,
estudo da quantidade de memria necessria.

PAA - Adaptado de Prof. Loureiro dcc/ufmg

13

Tipos de problemas na anlise de algoritmos.


Anlise de um algoritmo particular
Qual o algoritmo de menor custo possvel
para resolver um problema particular?
Toda uma famlia de algoritmos investigada.
Procura-se identificar um que seja o melhor
possvel.
Colocam-se limites para a complexidade
computacional dos algoritmos pertencentes
classe.
PAA - Adaptado de Prof. Loureiro dcc/ufmg

14

Custo de um algoritmo
Determinando o menor custo possvel para resolver
problemas de uma dada classe, temos a medida da
dificuldade 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.
PAA - Adaptado de Prof. Loureiro dcc/ufmg

15

Medidas de 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.

PAA - Adaptado de Prof. Loureiro dcc/ufmg

16

Medidas de custo por meio de um


modelo matemtico
Usa um modelo matemtico baseado em um
computador idealizado.
Deve ser especificado o conjunto de operaes e seus
custos de execues.
mais usual ignorar o custo de algumas das operaes
e considerar apenas as operaes mais significativas.
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 manipulaes de
ndices, caso existam.
PAA - Adaptado de Prof. Loureiro dcc/ufmg

17

Funo de complexidade
Para medir o custo de execuo de um algoritmo comum definir
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.

PAA - Adaptado de Prof. Loureiro dcc/ufmg

18

Exemplo: Maior elemento


Considere o algoritmo para encontrar o maior elemento de
um vetor de inteiros A[1..n], n 1.

Seja f uma funo de complexidade tal que f(n) o nmero de


comparaes 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.
PAA - Adaptado de Prof. Loureiro dcc/ufmg
19

Exemplo: Maior elemento


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 comparaes, que
menor do que algum outro elemento.
Logo n - 1 comparaes so necessrias.
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
PAA - Adaptado de Prof. Loureiro dcc/ufmg

20

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 particular 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 entrada j estiverem quase ordenados, ento o
algoritmo pode ter que trabalhar menos.

PAA - Adaptado de Prof. Loureiro dcc/ufmg

21

Melhor caso, pior caso e caso mdio


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.
PAA - Adaptado de Prof. Loureiro dcc/ufmg

22

Melhor caso, pior caso e caso mdio


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.
PAA - Adaptado de Prof. Loureiro dcc/ufmg

23

Exemplo: Registro de um arquivo


Considere o problema de acessar os registros de
um arquivo. Cada registro contm uma chave
nica que utilizada para recuperar registros 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 comparada com a
chave de cada registro).
PAA - Adaptado de Prof. Loureiro dcc/ufmg

24

Exemplo: Registro de um arquivo


Pesquisa sequencial
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

PAA - Adaptado de Prof. Loureiro dcc/ufmg

25

Exemplo: Registro de um arquivo


No estudo do caso mdio, vamos considerar que toda pesquisa
recupera um registro.
Se pi for a probabilidade de que o i-simo registro seja procurado,
e considerando que para recuperar o i-simo registro so
necessrias i comparaes, ento
f(n) = 1p1 + 2p2 + 3p3 + ... + npn
Para calcular f(n) basta conhecer a distribuio de probabilidades pi
Se cada registro tiver a mesma probabilidade de ser acessado que
todos os outros, ento
pi = 1/n, 1 i n.
Neste caso,
f(n) = 1/n(1 + 2 + 3 + ... + n) = 1/n( n/2(n + 1) ) = (n+1)/2.
A anlise do caso esperado revela que uma pesquisa com sucesso
examina aproximadamente metade dos registros.
PAA - Adaptado de Prof. Loureiro dcc/ufmg

26

Exemplo: Maior e menor elemento(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 programa
para achar o maior elemento.

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.

PAA - Adaptado de Prof. Loureiro dcc/ufmg

27

Exemplo: Maior e menor elemento(2)


MaxMin1 pode ser facilmente melhorado:
A comparao A[i] < Min s necessria quando
o resultado da comparao A[i] > Max for falso.

PAA - Adaptado de Prof. Loureiro dcc/ufmg

28

Exemplo: Maior e menor elemento(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 + (n - 1)/2 = 3n/2 - 3/2, para n > 0.
PAA - Adaptado de Prof. Loureiro dcc/ufmg

29

Exemplo: Maior e menor elemento(3)


Considerando o nmero de comparaes realizadas, existe a possibilidade
de obter um algoritmo mais eficiente:
1.

2.
3.

Compare os elementos de A aos pares, separando-os em dois subconjuntos


(maiores em um e menores em outro), a um custo de teto de n/2
comparaes.
O mximo obtido do subconjunto que contm os maiores elementos, a
um custo de teto de n/2 - 1 comparaes.
O mnimo obtido do subconjunto que contm os menores elementos, a
um custo de teto de n/2 - 1 comparaes.

PAA - Adaptado de Prof. Loureiro dcc/ufmg

30

Exemplo: Maior e menor elemento(3)

PAA - Adaptado de Prof. Loureiro dcc/ufmg

31

Exemplo: Maior e menor elemento(3)

PAA - Adaptado de Prof. Loureiro dcc/ufmg

32

Exemplo: Maior e menor elemento(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 + (n-2)/2 + (n-2)/2 = 3n/2-2,
para n > 0, para o melhor caso, pior caso e caso
mdio.
PAA - Adaptado de Prof. Loureiro dcc/ufmg

33

Comparao entre os algoritmos


MaxMin1, MaxMin2 e MaxMin3
A tabela abaixo apresenta uma comparao entre os algoritmos dos
programas MaxMin1, MaxMin2 e MaxMin3, considerando o
nmero de comparaes 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.

PAA - Adaptado de Prof. Loureiro dcc/ufmg

34

Você também pode gostar