Você está na página 1de 41

Anlise de Algoritmos

Licenciatura em Eng. Informtica


2 Ano - II Semestre 2013
Prof. Lufialuiso Sampaio Velho

Objectivos
! Abordar sobre os fundamentos da resoluo de problemas usando algoritmos ! Analisar o crescimento de funes e a eficincia dos algoritmos ! Abordar sobre as diferentes tcnicas de resoluo de problemas existentes.

AALG - 2013

Metodologia e Avaliao
As aulas tero uma componente terico prtica com um leque de exerccios a serem entregues aps uma semana. Avaliaes contnuas (30%) ! Prova parcelar ! Exerccios feitos em sala de aula ou em casa Exame - (70%) Aulas de Apoio: Tera e Quinta - Feira

AALG - 2013

contactos
Email da disciplina: aalgisptecl@gmail.com Utilizar moderadamente para: ! Dvidas ! Sugestes Email do Docente: lufialuiso.velho@isptec.co.ao! Obteno de Material didctico Acetatos entregues via ! Partilha de ficheiros no Google Drive ! Pendrive na sala de Aula

AALG - 2013

Programa da disciplina
!! Introduo aos Algoritmos
! Definio, porqu estud-los? ! Fundamentos sobre a resoluo de problemas utilizando algoritmos ! Tipos de problemas importantes: Ordenao, busca, grafos

!! Fundamentos da Anlise da Eficincia do Algoritmo


! Estrutura da Anlise de Algoritmos ! Notao assinttica e crescimento de funes ! Anlise de Algoritmos no recursivos ! Anlise de Algoritmos recursivos e recorrncias

AALG - 2013

Programa da disciplina
!! Tcnicas de Projecto de Algoritmo
! Fora Bruta ! Dividir e conquistar ! Decrementar e conquistar ! Transformar e conquistar ! Estratgia Gulosa

AALG - 2013

Bibliografia
Levitin, Anany Introduction to The Design and Analysis of Algorithms 3rd Edition ZIVIANI, Nivio. Projecto de Algoritmos com implementao em Pascal e C / ou implementao com Java e C++. H. Cormen,THOMAS; E. Leiserson, Charles; . ALGORITMOS Traduo da 2 Edio Americana Teoria e Prtica Editora Elsevier Toscani, Laira Vieira - COMPLEXIDADE DE ALGORITMOS - VOL.13 - 3 Edio Editora Bookman

AALG - 2013

AULA I Introduo aos Algoritmos


Licenciatura em Eng. Informtica

Introduo aos Algoritmos!


"!O que um algoritmo "!Fundamentos sobre a resoluo de problemas usando algoritmos "!Tipos de problemas importantes

AALG - 2013

Porqu o estudo de Algoritmos?!


Para a soluo de qualquer problema associado ao nosso dia dia em diferentes reas, fazemos o uso dos algoritmos. Do ponto de vista prtico, o profissional da rea de computao precisa: #! conhecer os algoritmos de diferentes reas (cincias) #! aprender a escrever excelentes algoritmos e analisar a sua eficincia tanto do ponto de vista de tempo e espao #! usar os algoritmos para desenvolver a sua habilidade analtica Em suma este conhecimento muito mais do que escrever um bom programa para computadores, pois serve como ferramenta para a compreenso de temticas associadas a qumica, msica, fsica, aeronutica, etc.

AALG - 2013

O que um Algoritmo?!
Um algoritmo, define uma sequncia no ambgua de instrues que visam solucionar um determinado problema; isto , obtendo o resultado requerido a partir de um conjunto de dados de entrada em tempo finito[1].

So considerados como algoritmos: uma receita, processo, tcnica, procedimento de rotina, com os seguintes requisitos: finitude, definitude, entrada, sada, e eficcia.

AALG - 2013

Exemplo do problema computacional : Ordenao


Imagine que pretende ordenar uma sequencia no ordenada de inteiros. Declarao do problema: ! Entrada: Uma sequencia de n nmeros <a1, a2, , an> ! Sada: Uma sequencia de entrada reordenada <a1 , a2 , , an > tal que ai ! aj onde i < j Exemplo: A sequncia <5, 3, 2, 8, 3> Algoritimos: ! Selection sort (seleco) ! Insertion sort (insero) ! Merge sort (intercalao ) ! Buble sort (bolha) ! (muito outros)

AALG - 2013

Algoritmo Euclidiano
Problema: Encontra o MDC(m,n), o mximo divisor comum de dois inteiros no negativo, no ambos zero m e n Exemplos: mdc(60,24) = 12, mdc(60,0) = 60, mdc(0,0) = ? Algoritmo de Euclides baseado na aplicao repetida de igualdade mdc(m,n) = mdc(n, m mod n) at que o segundo nmero seja zero (0), o que torna o problema trivial. Exemplo: mdc(60,24) = mdc(24,12) = mdc(12,0) = 12

AALG - 2013

Descrio do algoritmo
Passo 1: Se n = 0, retorna m e pra; Seno v para o passo 2 Passo 2: Divide m por n e atribui o valor do resto para r Passo 3: Atribui o valor de n para m e o valor de r para n. volta para o Passo1. Em pseudocdigo enquanto n " 0 faa r m mod n m n nr retorna m

AALG - 2013

Algoritmo Euclidiano
Caso prtico Qual o mximo divisor comum entre 3885 e 1736? MDC(3885, 1736)= mdc(1736,413) = mdc(413,84) = mdc(84,77) = mdc(77,7) = mdc(7,0) =7

AALG - 2013

Outro mtodo
Passo 1: Atribuir o valor de min {m, n} para t Passo 2: Divide m por t. Se o resto for 0, v para a Etapa 3; caso contrrio, v para a Etapa 4 Passo 3: Divide n por t. Se o resto for 0, retorna t e pra; caso contrrio, v para a Etapa 4 Passo 4: Reduz t por 1 e v para a Etapa 2 Nota: Isto no funciona quando um dos nmeros de entrada (m ou n) zero.

AALG - 2013

Fundamentos para a soluo de problemas Algortmicos


Para a soluo de um problema precisamos de: #! Entender o problema #! Determinar a capacidade do computador #! Escolher a forma de resoluo de problema (exacto ou aproximado) #! Determinar a tcnica de desenho do algoritmo #! Escolher a estrutura de Dados #! Mtodo de especificao do algoritmo #! Provar a exactido do Algoritmo #! Analisar o algoritmo #! Codificar o algoritmo

AALG - 2013

Anlise de Algoritmos
A anlise de um algoritmo implica prever a quantidade de recursos que o mesmo necessitar (memria, largura de banda). Frequentemente o foco tem estado relacionado a medida do tempo que um determinado algoritmo necessita para ser executado. Vimos no exemplo anterior que para um determinado problema, vrios algoritmos concorrem para a soluo do mesmo, permitindo assim a escolha do algoritmo mais eficiente, descartando assim os de qualidade inferior. Para analisar-mos o tempo de execuo dos algoritmos utilizaremos o modelo RAM (Random Access Machine). Este modelo permite que as instrues sejam executadas sequencialmente uma aps outra, no permitindo instrues concorrentes (simultneas) isto implica que este modelo permite somente executar apenas algoritmos sequenciais, e determinar o seu tempo de execuo.

AALG - 2013

Questes a considerar
#! Podem existir inmeros algoritmos para solucionar o mesmo problema, mas com ideias diferentes e podem ser executados em velocidades diferentes. #! Um algoritmo pode ser representado de diversas formas: pseudocdigo, fluxograma, narrativa, etc. #! A construo eficiente dos algoritmos constitui uma base que distingue os programadores qualificados dos iniciantes.

AALG - 2013

Fundamentos da Anlise da Eficincia do Algoritmo Licenciatura em Eng. Informtica

AULA 2

Anlise de Algoritmos
Dado um algoritmo, podemos questionar-nos: ! ! ! ! Ele resolve o problema proposto? Quo eficiente este algoritmo? a nica forma de resolver o problema? Como posso avaliar este ou aquele algoritmo?

Existem vrios critrios pelos quais podermos avaliar os algoritmos. Estes critrios so: Correco (exactido), Eficincia temporal, Eficincia Espacial, e a Optimizao. Cada um dos critrios acima podem ser aplicados sobre as abordagens: Experimental (emprica) e Terica (analtica).

AALG - 2013

Abordagens de anlise
Abordagem experimental
Implementa o algoritmo e executa o programa para um conjunto de dados de teste. Isto significa que sob esta abordagem, os resultados sero grandiosamente influenciados pelo nvel da mquina em que foi implementado (Hardware), podendo assim variar a sua eficincia mediante a capacidade do processador ou outro recurso. Porm, ! ! No podemos testar todas as possveis entradas Podem ocorrer situaes no previstas durante a criao do algoritmo,

podendo resultar em falha ou ento uma boa ou m implementao.

Abordagem Analtica
V o algoritmo de uma forma generalizada, e tenta prever o seu comportamento, procurando saber se ele resolve o problema, e o nvel de eficincia que o mesmo possui (custo de tempo e memria).

AALG - 2013

Estrutura da Anlise
De que modo analisado a eficincia de um Algoritmo?
Existem basicamente dois tipos de eficincia de algoritmos, nomeadamente: ! ! Eficincia Temporal: refere-se ao quo rpido um algoritmo executado. Eficincia espacial: refere-se ao espao extra que o algoritmo necessita.

Para o contexto desta disciplina, aprenderemos apenas a analisar o factor tempo dos algoritmos, visto que o espao no uma varivel bastante influenciadora em comparao com o tempo. Sendo assim para a eficincia temporal, necessrio considerar: Tamanho de Entrada: a execuo de qualquer algoritmo influenciada fortemente pelo sobre entradas maiores. Isto significa que analisada a eficincia temporal do algoritmo em funo do parmetro n (tamanho de entrada).

AALG - 2013

Tempo de execuo
Para medir o tempo de execuo, baseamo-nos nas seguintes alternativas: ! ! Contar o nmero de vezes que cada operao do algoritmo realizada Identificar a operao mais importante do algoritmo (operao bsica). Esta

operao contribui bastante no tempo de execuo total do algoritmo. Isto implica que a eficincia do tempo analisada pela determinao do nmero de repeties da operao bsica do algoritmo em funo do tamanho da entrada.

!"#"$%&'()' )$!*"("!

!)#+&'()'),)-./0&! $1'()'2)3)4'5.)'"'&+)*"/0&' 6748-"'9'),)-.!"("' AALG - 2013

Eficincia Temporal
! Entrada: ! Dados fornecidos ! Tamanho de entrada ! pode ser dado como nmero de valores num vector, o nmero de registos num ficheiro, enfim, um certo nmero de elementos que constituem a entrada de dados para o algoritmo; de modo que o tempo de execuo de um algoritmo pode ser dado como uma funo T(n) do tamanho n da sua entrada.

AALG - 2013

Exemplos de tamanho da entrada e operao bsica


Problema medida de tamanho da entrada Operao Bsica

busca de chave em uma nmero de itens da lista, i. e. lista de n itens n Multiplicao de duas matrizes

comparao de chave

A dimenso da matriz ou o n Multiplicao de total dos elementos dois nmeros

verificao de primalidade de um dado nmero inteiro n

Tamanho n = nmero de digitos (em representao binria)

diviso

problema de grafo tpico

N de vrtice e/ou arcos

Visita a vrtice ou travessia nos arcos.

AALG - 2013

Eficincia Temporal: Melhor-caso, Caso


mdio e pior-caso
! ! ! ! Para alguns algoritmos, a eficincia depende de dados fornecidos: Pior caso: Cpior(n) mximo sobre as entradas de tamanho n Melhor caso: Cmelhor(n) mnimo sobre as entradas de tamanho n Caso mdio: Cmedio(n) "Mdia" com entradas de tamanho n O caso mdio no corresponde a:

! A mdia de pior e melhor casos. Mas sim ao nmero de vezes que a operao bsica ser executada na entrada tpica, ou ainda o nmero esperado de operaes bsicas consideradas como uma varivel aleatria sob alguma suposio sobre a distribuio de probabilidade de todas as entradas possveis

AALG - 2013

Crescimento de Funes
Vimos anteriormente que o custo (complexidade) de um algoritmo depende maioritariamente do tamanho de entrada do problema. Sendo assim no aconselhvel a escolha do melhor algoritmo num conjunto que solucionam o mesmo problema, analisando-o sobre entradas menores. Mas sim o custo de dois (2) ou mais algoritmos sobre grandes valores de n (entrada). Suponha dois (2) algoritmos que resolvam o mesmo problema: Alg1 necessita de T(n)=n para solucionar o problema Alg2 necessita de T(n)=n2 para solucionar o mesmo problema. Para valores pequenos de n, no teremos grande diferena. Mas para grandes valores, notaremos que o algoritmo com custo n2 cresce mais rapidamente. Lembre sempre que para entradas grandes, os factores de menor influncia sobre o crescimento da funo podem ser ignorados.

AALG - 2013

Crescimento de Funes
Valores de algumas funes importantes quando n #

!! "#"! "#$! "#%! "#&! "#'! "#(!

"#$%&!! "#"! (#(! $%! $"! $,! '%!

!! $%$! $%'! $%"! $%)! $%+! $%(!

!&"#$%&!! "#"&$%$! (#(&$%'! $#%&$%"! $#"&$%)! $#,&$%+! '#%&$%(!

!%! $%'! $%)! $%(! $%-! $%$%! $%$'!

!'! $%"! $%(! $%*! $%$'! $%$+! $%$-!

%!! $%"!

!(! "#(&$%(!

$#"&$%"%! *#"&$%$+,!

AALG - 2013

Taxa de crescimento Assinttico / Notao Assinttica


Uma maneira de comparar as funes que ignora factores constantes e pequenos tamanhos de entrada !O(g(n)): classe de funes f (n), que no crescem mais rpido que g (n) !(g(n)): classe de funes f (n), que crescem a mesma ordem que g (n) ! ! (g(n)): classe de funes f (n), que crescem, pelo menos, to rpido quanto g (n) Notao O (Big-O) Definio: f (n)! O(g (n)), se existem duas constantes positivas c e n0 tal que f (n) ! cg (n) para todo n $ n0. Isto significa que a ordem de crescimento de f(n) menor ou igual a ordem de crescimento de g(n). Exemplos: 1 Exemplo: 10n ! O(n2) 2 Exemplo: 5n+20 ! O(n)

AALG - 2013

Taxa de crescimento Assinttico / Notao Assinttica


Exemplos: Em que situaes podemos considerar que 10n ! O(n2) ou 10n = O(n2) Soluo Aplique primeiramente a frmula: f(n) ! c. g(n), considerando f(n)=10n e g (n) como n2. Para pequenos valores positivos como para n0 =n<10 e c=1, podemos verificar que a f(n) cresce mais rapidamente que g(n). E para n=10, os dois funcionam de modo ptimo, ou seja atingem o mesmo ponto. Mas para valores de n>10, f(n) comporta-se como Big-O de g(n). Isto g(n) cresce mais rapidamente. Podemos analisar igualmente para uma constante C=10, para todo n>=1, a afirmao que 10n = O(n2) verdadeira.

AALG - 2013

Representao grfica - Big - O


./012! 3012!
145! 678593:!

;6/<!'<$!=!153:>45!?6/@5A!3012!!B0/0122!
Nota: No importa analisar o comportamento das funes para pequenos valores de n.

AALG - 2013

Taxa de crescimento Assinttico / Notao Assinttica


Notao ! (Big-Omega) Definio: f (n)! !(g (n)), se existem duas constantes positivas c e n0 tal que f (n) $ cg (n) para todo n $ n0. Isto significa que a ordem de crescimento de f(n) maior ou igual a ordem de crescimento de g(n). Ex: n2 ! !(n) ou n2 = !(n) Para o exemplo acima, possvel notar que o crescimento da funo f(n) superior em relao a (c.g(n)) considerando c=1 para todo n $ 1.

AALG - 2013

Representao grfica - Big - Omega


3012!

145! 678593:!

./012!

;6/<!'<'=!153:>45!?6/@57C/:!3012!!"0/0122!
Nota: No importa analisar o comportamento das funes para pequenos valores de n.

AALG - 2013

Taxa de crescimento Assinttico / Notao Assinttica


Notao (Big-Theta) Definio: f(n)! (g (n)), se existem duas constantes positivas c e n0 tais que 0 ! c1.g(n) ! f (n) ! c2.g(n) para todo n $ n0. Isto significa que a ordem de crescimento de f(n) = ordem de crescimento de g(n). Ex: n2/3-2n ! (n2) ou n2/3-2n = (n2) Para o exemplo acima, primeiramente, devemos provar em que situao verificada que c1.g(n) ! f (n), isto a notao !." Considere f(n)= n2/3 -2n, g(n)=n2, c=1/12 para todo n>=8. Em segundo lugar devemos provar em que situao verificada f(n) ! c2.g(n)), isto a notao O. Considere f(n)= n2/3 -2n, g(n)=n2, c=1/3 para n=8. Resumimos que para provar que f(n) (g(n)) necessrio que f(n) seja O(g(n)) e f(n) seja !(g(n)).

AALG - 2013

Representao grfica - Big - Theta


.'/012! 3012!

145! 678593:!

.$/012!

;6/<!'<"!=!153:>45!?6/@3AC3:!3012!!#0/0122!
Nota: No importa analisar o comportamento das funes para pequenos valores de n.

AALG - 2013

Taxa de crescimento Assinttico / Notao Assinttica


Notao o (pequeno-O) Definio: f (n)! o(g (n)), se existem duas constantes positivas c e n0 tal que f (n) < cg (n) para todo n $ n0. Isto significa que a ordem de crescimento de f(n) menor que a ordem de g(n). Notao (pequeno-Omega) Definio: f (n)!(g (n)), se existem duas constantes positivas c e n0 tal que f (n) > cg (n) para todo n $ n0. Isto significa que a ordem de crescimento de f(n) maior do que a ordem de crescimento de g(n).

Nota: No se deve confundir a definio da notao (O e o) assim como a (! e ), visto que apesar de serem semelhantes, so aplicadas em casos diferentes.

AALG - 2013

Estabelecendo ordem de crescimento usando limites


0 ordem de crescimento de T(n) < ordem de crescimento de g(n)

lim t(n)/g(n) =

c > 0 ordem de crescimento T(n) = ordem de crescimento de g(n) # ordem de crescimento de T(n) > ordem de crescimento de g(n)

Exemplos: ! 10n vs. n2 ! n(n+1)/2 vs. n2

AALG - 2013

Propriedades da Notao O
1.! Se f(n) O(g(n)) e g(n) O(h(n)) ento f(n) O(h(n)). Ex: n=O(n2) e n2 =O(n3) ento n= O(n3) 2. Se f(n) O(h(n)) e g(n) O(h(n)) ento f(n) + g(n) O(h(n)) 3. Se f(n) O(h(n)) e g(n) O(k(n)) ento f(n) + g(n) O(max(h(n), k(n)) Ex: n2 + 100n + logn= O(max(n2, 100n, logn))=O(n2) 4. ank O(nk)

AALG - 2013

Classes de eficincia assinttica bsicas

Rpido

1 log n n n log n n2 n3 2n

constante logartmica linear n-log-n Quadrtica Cbica exponencial factorial

Alta Eficincia

Lento

n!

Baixa Eficincia

AALG - 2013

Exerccios
Dada as seguintes funes: F1=n1/logn F8=n2 Mostre que cada par de funes Fi e Fi+1 para 1! i ! 8 se so O, ! ou. F2=loglogn F3=logn2 F4=n F5=2logn F6=nlogn F7=n!

AALG - 2013