Análise de Algoritmos - UTEC PDF
Análise de Algoritmos - UTEC PDF
Análise de Algoritmos - UTEC PDF
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
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
AALG - 2013
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
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
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
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,
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.
!"#"$%&'()' )$!*"("!
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
busca de chave em uma nmero de itens da lista, i. e. lista de n itens n Multiplicao de duas matrizes
comparao de chave
diviso
AALG - 2013
! 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
AALG - 2013
AALG - 2013
;6/<!'<$!=!153:>45!?6/@5A!3012!!B0/0122!
Nota: No importa analisar o comportamento das funes para pequenos valores de n.
AALG - 2013
AALG - 2013
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
AALG - 2013
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
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
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)
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
Rpido
1 log n n n log n n2 n3 2n
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