Agenda Análise e Técnicas de Algoritmos •• •• •• Motivação Motivaçãopara paraanálise análise de dealgoritmos algoritmos Análise Análiseassintótica assintótica Alguns Algunsexemplos exemplos simples simples Jorge Figueiredo Análise Análisede deAlgoritmos Algoritmos © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Introdução Introdução •• Dois Dois aspectos aspectosimportantes: importantes: –– Um Um problema problemapode, pode, geralmente, geralmente,ser ser resolvido resolvidopor por diferentes diferentesalgoritmos. algoritmos. –– AA existência existênciade deum umalgoritmo algoritmonão não implica, implica,necessariamente, necessariamente, que queeste esteproblema problemapossa possa ser ser resolvido resolvidona naprática. prática. •• AA análise análisede dealgoritmos algoritmos pode pode ser serdefinida definida como comoooestudo estudoda da estimativa estimativade detempo tempo de deexecução execuçãode dealgoritmos. algoritmos. •• O Otempo tempode deexecução execuçãoéédeterminado determinadopelos pelos seguintes seguintes aspectos: aspectos: –– Tempo Tempo para paraexecutar executar uma uma instrução instruçãoou ou passo. passo. –– AA natureza naturezado doalgoritmo. algoritmo. –– O Otamanho tamanhodo doconjunto conjuntode dedados dados que queconstitui constituiooproblema. problema. © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 •• ÉÉ necessário necessárioter ter uma uma forma formade decriar criarmedidas medidasde decomparação comparação entre entrealgoritmos algoritmosque que resolvem resolvemum um mesmo mesmo problema. problema.Desta Desta forma, forma,éé possível possíveldeterminar: determinar: –– AA viabilidade viabilidadede deum um algoritmo. algoritmo. –– Qual Qual ééoomelhor melhoralgoritmo algoritmopara paraaa solução soluçãode deum um problema. problema. •• O O interessante interessante ééter ter uma umacomparação comparaçãorelativa relativaentre entre algoritmos. algoritmos. –– Assumir Assumirque queaaexecução execuçãode dequalquer qualquerpasso passode deum um algoritmo algoritmoleva levauma umaum umtempo tempofixo fixo eeigual. igual. –– O Otempo tempode deexecução execuçãode deum umcomputador computadorparticular particular não nãoéé interessante. interessante. © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Introdução Eficiência de Algoritmo •• Qual Qual aaquantidade quantidadede de recursos recursosutilizados utilizadospara pararesolver resolver um um problema? problema? –– Tempo Tempo –– Espaço Espaço •• Expressar Expressarcomo comouma uma função funçãodo dotamanho tamanhodo doproblema. problema. –– Como Comoos os requisitos requisitoscrescem crescem com comooaumento aumentodo doproblema? problema? •• Tamanho Tamanhodo doproblema: problema: –– Número Númerode deelementos elementosaaser sertratado tratado –– Tamanho Tamanhodos doselementos elementos Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG •• Considerar Considerar eficiência eficiência de detempo: tempo: –– Número Númerode deoperações operaçõesexpresso expresso em emtermos termosdo dotamanho tamanhoda da entrada. entrada. –– Se dobramos o tamanho da entrada, qual o tempo de Se dobramos o tamanho da entrada, qual o tempo de resposta? resposta? •• Por Porque que eficiência eficiênciaéé importante? importante? –– Velocidade Velocidadede decomputação computação aumentou aumentou(hardware) (hardware) –– Crescimento Crescimentode deaplicações aplicaçõescom comooaumento aumentodo dopoder poder computacional computacional –– Maior Maior demanda demandapor por aumento aumentona navelocidade velocidadede decomputação. computação. Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG 1 Eficiência de Algoritmo Eficiência de Algoritmo •• Quando Quandoaa velocidade velocidadede decomputação computaçãoaumenta, aumenta,podemos podemos tratar tratar mais maisdados? dados? •• Suponha Suponhaque: que: 2 –– Um Um algoritmo algoritmotoma tomann2 comparações comparaçõespara paraordenar ordenarnn números. números. –– Necessitamos Necessitamosde de11segundo segundopara paraordenar ordenar55números números (25 (25 comparações) comparações) –– Velocidade Velocidadede decomputação computaçãoaumenta aumentade de um umfator fator de de100 100 –– Usando Usando11 segundo, segundo,podemos podemosexecutar executar100x25 100x25 comparações, comparações,i.e., i.e.,ordenar ordenar50 50números números N T(n) = n T(n) = nlgn T(n) = n2 T(n) = n3 Tn = 2n 5 0.005 µs 0.01 µs 0.03 µs 0.13 µs 0.03 µs 10 0.01 µs 0.03 µs 0.1 µs 1 µs 1 µs 20 0.02 µs 0.09 µs 0.4 µs 8 µs 1 ms 50 0.05 µs 0.28 µs 2.5 µs 125 µs 13 dias 100 0.1 µs 0.66 µs 10 µs 1 ms 4 x 1013 anos Com Com 100 100vezes vezesde deganho ganhoem emvelocidade, velocidade,ordenamos ordenamosapenas apenas10 10 vezes vezesmais maisnúmeros! números! © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Como Medir Eficiência de Algoritmo? •• Medindo Medindoeficiência: eficiência: –– Estudo Estudo experimental experimental e/ou e/ouBenchmarking. Benchmarking. –– Análise Análiseassintótica. assintótica. © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Abordagem Experimental •Abordagem •Abordagemexperimental: experimental: –Escrever –Escrever um umprograma programa que que implementa implementa oo algoritmo algoritmo –Executar –Executar ooprograma programa com comdiferentes diferentescenários cenários –Usar –Usar um ummétodo método como como System.currentTimeMillis() System.currentTimeMillis()para para obter obter medidas medidas acuradas acuradasdo dotempo tempode deexecução execução real. real. t (ms) 60 50 40 30 20 10 0 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Abordagem Experimental 100 n © Jorge Figueiredo, DSC/UFCG Análise Assintótica •• Limitações Limitações dos dos estudos estudos experimentais: experimentais: –– Necessidade Necessidade de dese seimplementar implementareetestar testar ooalgoritmo. algoritmo. –– Experimentos Experimentospodem podem ser serfeitos feitosapenas apenas em emum umnúmero número limitado limitadode decenários. cenários.Pode, Pode, portanto, portanto,não nãoindicar indicar tempo tempode de execução em cenários que não foram considerados execução em cenários que não foram consideradosno no experimento. experimento. –– Para Paracomparar comparardois dois algoritmos: algoritmos:garantir garantir os osmesmos mesmos hardware hardwareeeambiente ambientede desoftware. software. Análise e Técnicas de Algoritmos – 2007.2 50 Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG •• Metodologia Metodologia para para analisar analisar tempo tempo de de execução execução de de algoritmos. algoritmos. •• Ao Ao contrário contrário da da abordagem abordagem experimental: experimental: –– Usa Usa uma umadescrição descriçãode dealto altonível níveldos dosalgoritmos algoritmosem emvez vezde de testar testaruma umade de suas suasimplementações. implementações. –– Leva Levaem emconsideração consideração todas todasas aspossíveis possíveis entradas. entradas. –– Permite Permiteaaavaliação avaliação de deeficiência eficiênciade dealgoritmos algoritmosde deuma uma forma forma que que éé independente independentedo dohardware hardware eeambiente ambientede de software softwareutilizado. utilizado. Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG 2 Notação Assintótica Big-Oh •Objetivo: •Objetivo: simplificar simplificar aaanálise análise descartando descartando informações informações desnecessárias: desnecessárias: –“arredondamento” –“arredondamento”1,000,001≈1,000,000 1,000,001≈1,000,000 2 2 –Dizer –Dizer que que3n 3n2≈≈nn2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 •• Sejam Sejamduas duasfunções funções f(n) f(n)eeg(n). g(n). –– f(n) f(n)éé O(g(n)) O(g(n)) se seexistem existemconstantes constantespositivas positivas cceenn00tais taisque que f(n) f(n) ≤≤ cg(n) cg(n) para parann≥≥nn00 •• Exemplo: Exemplo:2n 2n++10 10ééO(n) O(n) –– 2n 2n++10 10≤≤ cn cn –– (c (c−−2) 2)nn≥≥10 10 –– nn≥≥10/(c 10/(c−−2) 2) –– Escolher Escolher cc==33eenn00==10 10 Big-Oh Big-Oh 2 •Exemplo: •Exemplo:nn2não nãoééO(n) O(n) 2 –n cn –n2≤≤cn –n ≤ c –n ≤ c ––AAdesigualdade desigualdadenão nãopode podeser ser satisfeita satisfeitapois poisccdeve deveser seruma uma constante. constante. 10.000 3n 2n+10 1.000 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 n 100 1.000.000 n^2 100n 100.000 10n n 10.000 1.000 100 10 10 1 1 10 n 100 1.000 1 1 10 100 1.000 n © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Big-Omega Big-Theta •• Sejam Sejamduas duasfunções funções f(n) f(n)eeg(n). g(n). –– f(n) f(n)ééΩ Ω(g(n)) (g(n)) se seg(n) g(n) ééO(f(n)) O(f(n)) –– Existe ≥1 tal tal que quef(n) f(n)≥≥ ccg(n) g(n) Existe uma uma constante constantereal real cc>0 >0eenn00≥1 para parann≥≥nn00 •• Sejam Sejam duas duas funções funções f(n) f(n) ee g(n) g(n) Θ (g(n)) se f(n) –– f(n) é O(g(n)) ee f(n) f(n) éé ΩΩ(g(n)) (g(n)) f(n) é Θ(g(n)) se f(n) éé O(g(n)) –– existem constantes reais a>0 e existem constantes reais a>0 e b>0, b>0, ee uma uma constante ≥1 tal tal que que aa g(n) g(n) ≥≥ f(n) f(n) ≥≥ bb g(n) g(n) constante inteira inteira nn00≥1 para para nn ≥≥ nn00 Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG 3 Taxas de Crescimento Mais Comum 1 log n constante logarítmica 2n n n2 n3 ... nk ... 2n polinomial exponencial Análise Assintótica •• AA análise análiseassintótica assintótica éébaseada baseadanessas nessas definições definiçõesee estabelece estabeleceuma umaordem ordem relativa relativaentre entrefunções. funções. •• AA notação notaçãoBig-Oh Big-Ohéé usada usadapara paraexpressar expressar oonúmero númerode de operações operaçõesprimitivas primitivas executadas executadascomo comofunção funçãodo dotamanho tamanho da da entrada. entrada. –– um umalgoritmo algoritmoque queexecuta executaem emtempo tempoO(n) O(n)éémelhor melhordo doque queum umque que 2 executa executaem emtempo tempoO(n O(n2)) –– de deforma formasemelhante, semelhante,O(log O(logn) n)éémelhor melhordo doque queO(n) O(n) n2 •• Cuidado! Cuidado! Preste Presteatenção atençãoaa constantes constantesmuito muitoaltas. altas. Um Um algoritmo algoritmoque queexecuta executaem emtempo tempo 1,000,000.n 1,000,000.nééO(n), O(n), mas mas 2 menos menoseficiente eficientedo doque queum umque queexecuta executa em emtempo tempo2n 2n2,,que queéé 2 O(n O(n2).). n log n c n © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Complexidade de Tempo Complexidade de Tempo •• Para Paradeterminar determinarootempo tempode deexecução execuçãode deum umdeterminado determinado algoritmo algoritmo –– descobrir descobrir aaforma formageral geral da da curva curvaque quecaracteriza caracteriza seu seutempo tempo de deexecução execuçãoem emfunção funçãodo dotamanho tamanhodo do problema. problema. •• Para Parasimplificarmos simplificarmos aaanálise análisede decomplexidade complexidadede detempo: tempo: –– adotamos adotamosaanão nãoexistência existênciade deunidades unidades de detempo tempo particulares. particulares. –– não nãoconsideramos consideramostambém tambémos ostermos termosde deordem ordeminferior, inferior, isto istoé, é,usamos usamos Big-Oh. Big-Oh. •• AA complexidade complexidadede detempo tempopara paradiferentes diferentesalgoritmos algoritmospode pode indicar indicar diferentes diferentes classes classesde de complexidade. complexidade.Cada Cadaclasse classeéé caracterizada caracterizadapor poruma uma família famíliadiferente diferente de de curva. curva. •• Informalmente, Informalmente,para para se se determinar determinaraaordem ordemde decomplexidade complexidade de deuma umadeterminada determinada função funçãof(n): f(n): 1. 1. Separar Separarf(n) f(n)em emduas duaspartes: partes:termo termodominante dominanteeetermos termos de deordem ordeminferior. inferior. 2. 2. ignorar ignoraros ostermos termosde de ordem ordem inferior. inferior. 3. 3. ignorar ignoraras asconstantes constantesde deproporcionalidade. proporcionalidade. Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Análise de Algoritmos Simples Análise de Algoritmos Simples •• Em Em nosso nosso modelo modelode deanálise, análise,consideramos consideramosque que as as instruções instruçõessão sãoexecutadas executadas sequencialmente sequencialmenteeeque queooconjunto conjunto de de instruções instruções simples simples (adição, (adição,comparação, comparação,atribuição, atribuição,etc) etc) tomam tomamexatamente exatamenteuma umaunidade unidadede detempo tempopara paraserem serem executadas. executadas. •• Tipos Tiposde deanálise: análise: Pior Piorcaso: caso: indica indica oomaior maiortempo tempoobtido, obtido, levando levandoem em consideração consideraçãotodas todasas asentradas entradaspossíveis. possíveis. Melhor Melhor caso: caso: indica indica oomenor menortempo tempoobtido, obtido, levando levandoem em consideração consideraçãotodas todasas asentradas entradaspossíveis. possíveis. Média: Média: indica indicaootempo tempo médio médioobtido, obtido,considerando considerandotodas todas as as entradas entradaspossíveis. possíveis. Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG © Jorge Figueiredo, DSC/UFCG •• Como Comoooobjetivo objetivoéédeterminar determinaraaforma formada dacurva curvaque quecaracteriza caracterizaoo algoritmo, algoritmo,vamos vamosdefinir definiralgumas algumasregras regrasque quepodem podemser serutilizadas: utilizadas: Laços: O tempo de execução de um laço é no máximo Laços: O tempo de execução de um laço é no máximoootempo tempode de execução das instruções dentro do laço (incluindo os execução das instruções dentro do laço (incluindo ostestes) testes)vezes vezesoo número númerode deiterações. iterações. Aninhamento Aninhamentode deLaços: Laços:Analisar Analisaros osmais maisinternos. internos.OOtempo tempototal totalde de execução execuçãode deuma umainstrução instruçãodentro dentrode deum umgrupo grupode delaços laçosaninhados aninhadoséé ootempo tempode deexecução execuçãoda dainstrução instruçãomultiplicado multiplicadopelo peloproduto produtodos dos tamanhos tamanhosde detodos todosos oslaços. laços. Instruções InstruçõesConsecutivas: Consecutivas:Apenas Apenasefetuar efetuaraasoma. soma. If/Else: If/Else:ootempo tempode deexecução execuçãode deuma umainstrução instruçãoif/else if/elsenunca nuncaéémaior maiordo do que o tempo de execução do teste mais o maior que o tempo de execução do teste mais o maiordos dostempos temposde de execução de S1 e S2. S1 e S2 representam as instruções do then execução de S1 e S2. S1 e S2 representam as instruções do thenee else, else,respectivamente. respectivamente. Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG 4 Análise de Algoritmos Simples Algumas Dicas Chamada Chamadade de Funções: Funções:AAanálise análiseééfeita feitacomo comono no caso casode de laços laçosaninhados. aninhados.Para Para calcular calcularaa complexidade complexidadede deum um programa programa com com várias váriasfunções, funções,determina-se determina-seprimeiro primeiro aa complexidade complexidade de decada cadauma umadas dasfunções. funções.Desta Destaforma, forma,na na análise, análise, cada cadauma umadas dasfunções funçõeséévista vistacomo comouma uma instrução instruçãocom comaacomplexidade complexidadeque quefoi foicalculada. calculada. Recursão: Recursão: ÉÉaaparte parte mais maisdifícil difícil da daanálise análise de de complexidade. complexidade. Em Em muitos muitoscasos, casos,pode-se pode-sefazer fazeraa linearização linearizaçãoatravés atravésda da substituição substituiçãoda dachamada chamadarecursiva recursivapor poralguns algunslaços laços aninhados, por exemplo. Entretanto, existem algoritmos aninhados, por exemplo. Entretanto, existem algoritmos que que não não possibilitam possibilitam aa linearização. linearização. Nestes Nestes caso, caso,éé necessário necessáriousar usar uma uma relação relaçãode de recorrência recorrênciaque quetem temque que ser ser resolvida. resolvida. © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 •• •• •• •• •• Identificar Identificaraaoperação operaçãofundamental fundamentalusada usadano noalgoritmo. algoritmo.AAanálise análisedessa dessa operação operaçãofundamental fundamentalidentifica identificaootempo tempode deexecução. execução.Isso Issopode podeevitar evitaraa análise linha-por-linha do algoritmo. análise linha-por-linha do algoritmo. Quando Quandoum umalgoritmo, algoritmo,em emuma umapassada passadade deuma umaiteração, iteração,divide divideoo conjunto conjuntode dedados dadosde deentrada entradaem emuma umaou oumais maispartes, partes,tomado tomadocada cadauma uma dessas dessaspartes parteseeprocessando processandoseparada separadaeerecursivamente, recursivamente,eedepois depois juntando juntandoos osresultados, resultados,este estealgoritmo algoritmoéépossivelmente possivelmenteO(n.log O(n.logn) n) Um Umalgoritmo algoritmoééO(log O(logn) n)se seele eleleva levatempo tempoconstante constantepara parareduzir reduziroo tamanho tamanhodo doproblema, problema,geralmente geralmentepela pelametade. metade.Por Porexemplo, exemplo,aapesquisa pesquisa binária. binária. Se o algoritmo leva tempo constante para reduzir o tamanho do problema Se o algoritmo leva tempo constante para reduzir o tamanho do problema em emum umtamanho tamanhoconstante, constante,ele eleserá seráO(n). O(n). Algoritmos Algoritmoscombinatoriais combinatoriaissão sãoexponenciais. exponenciais.Por Porexemplo, exemplo,ooproblema problemado do caixeiro caixeiroviajante. viajante. © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Exercício Qual Qual aacomplexidade complexidadedo doalgoritmo algoritmoabaixo? abaixo? Análise e Técnicas de Algoritmos Potencia(x, n) p←1 i←0 while i < n do p ← p.x i←i+1 return p Jorge Figueiredo Análise Análisede deAlgoritmos Algoritmos Recursivos Recursivos © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Agenda Introdução •• Relação Relaçãode de Recorrência Recorrência –– Derivando Derivando recorrência recorrência –– Resolvendo Resolvendorecorrência recorrência •• Análise Análisede dealgoritmos algoritmos recursivos recursivos Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 •• AA análise análisede deum um algoritmo algoritmorecursivo recursivo requer requer aaresolução resoluçãode de uma uma recorrência. recorrência. •• Uma Uma recorrência recorrência ééum um algoritmo algoritmo recursivo recursivo que que calcula calculaoovalor valor de deuma umafunção funçãoem emum um ponto pontodado. dado. •• Uma Uma recorrência recorrênciadefine defineT(n) T(n)em emtermos termosde deT(n-1), T(n-1),T(n-2), T(n-2), etc. etc. •• Exemplo: Exemplo: –– T(1) T(1)==11 –– T(n) T(n)==T(n T(n––1) 1)++3n 3n ++22,,para paran≥2 n≥2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG 5 Introdução Introdução •• Exemplo Exemplo2: 2:Quantos Quantos pedaços pedaçoscom comnncortes? cortes? •• Exemplo Exemplo2: 2:Quantos Quantos pedaços pedaçoscom comnncortes? cortes? Cortes: 1 Pedaços: 2 Cortes: 1 Pedaços: 2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Introdução •• Exemplo Exemplo2: 2:Quantos Quantos pedaços pedaçoscom comnncortes? cortes? Análise e Técnicas de Algoritmos – 2007.2 Cortes: 2 Pedaços: 4 Cortes: 3 Pedaços: 7 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Introdução Cortes: 1 Pedaços: 2 Cortes: 2 Pedaços: 4 •• ÉÉ possível possívelobservar observar que que oo n-ésimo n-ésimo corte corte cria cria nn novos novos pedaços. pedaços. •• Logo, Logo,oonúmero númerototal total de de pedaços pedaços obtido obtido com com nn cortes, cortes, denotado denotado por porP(n), P(n),éé dado dado pela pela seguinte seguinte relação relaçãode de recorrência: recorrência: –– P(1) P(1) ==22 –– P(n) P(n) ==P(n P(n––1) 1) ++n, n, para paran≥2 n≥2 Cortes: 4 Pedaços: 11 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Derivando Relações de Recorrências Derivando Relações de Recorrências Como Comoproceder procederpara para derivar derivaruma uma relação relaçãode derecorrência recorrênciapara paraaa análise análisedo dotempo tempode de execução execuçãode deum umalgoritmo: algoritmo: •• Determinar Determinarqual qualootamanho tamanhonndo doproblema. problema. •• Verificar Verificarque que valor valorde dennééusado usadocomo comobase baseda darecursão. recursão.Em Em geral geralééum umvalor valorúnico único (n=1, (n=1,por porexemplo), exemplo), mas maspode podeser ser valores valoresmúltiplos. múltiplos.Vamos Vamosconsiderar consideraresse esse valor valor como comonn00.. •• Determinar Determinar T(n T(n00).).Pode-se Pode-seusar usar uma uma constante constante c, c, mas, mas,em em muitos, muitos, casos casos um umnúmero númeroespecífico específicoéénecessário. necessário. •• T(n) T(n)éédefinido definido como como uma uma soma somade de várias várias ocorrências ocorrênciasde deT(m) T(m) (chamadas (chamadasrecursivas), recursivas),mais maisaa soma somade deoutras outrasinstruções instruções efetuadas. efetuadas.Em Emgeral, geral,as as chamadas chamadas recursivas recursivasestão estão relacionadas relacionadascom comaa subproblemas subproblemasdo domesmo mesmotamanho tamanhof(n), f(n), definindo definindo um umtermo termo a.T(f(n)) a.T(f(n)) na na relação relação de de recorrência. recorrência. •• AA relação relação de de recorrência recorrência éédefinida definida por: por: –– T(n) T(n)==c, c,se senn==nn00 –– T(n) T(n)==a.T(f(n)) a.T(f(n))++g(n), g(n), caso casocontrário contrário Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG 6 Derivando Relações de Recorrências •• Exemplo: Exemplo:Torre Torrede deHanoi Hanoi –– Objetivo: Objetivo:transferir transferiros osnn discos discosde deAApara para CC –– Regras: Regras: •• Mover Moverum umdisco discopor por vez. vez. •• Nunca Nuncacolocar colocarum umdisco disco maior maiorem em cima cima de deum um menor. menor. –– Solução SoluçãoRecursiva: Recursiva: •• Transferir Transferir n-1 n-1discos discos de deAApara paraBB •• Mover Moveroo maior maior disco disco de deAApara paraCC •• Transferir Transferir n-1 n-1discos discos de deBBpara paraCC Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Derivando Relações de Recorrências MergeSort(A, n) if n ≤ 1 return A return merge(MergeSort(A1, n/2), MergeSort(A2, n/2)) Relação de Recorrência T(1) = c T(n) = 2.T(n/2) + d.n Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Método do Chute e Prova por Indução •• Seja Sejaaaseguinte seguinterelação relaçãode derecorrência: recorrência: –– T(1) T(1)==11 –– T(n) T(n)==T(n T(n––1) 1)++3n 3n++22,,para paran≥2 n≥2 •• AArelação relaçãode derecorrência recorrênciaééresolvida resolvidaem emduas duaspartes: partes: 2 1. /2++7n/2 7n/2––44 1. Chute: Chute:T(n) T(n)==3n 3n2/2 2. 2. Prova: Prova: 1. 1. Caso Casobase baseéépara paran=1 n=1 2. 2. H.I.: H.I.:assumir assumirque queééválido válidopara paran-1 n-1 3. Provar T(n) 3. Provar T(n) 2 Se Seaaprova provafor forconfirmada, confirmada,T(n) T(n)ééO(n O(n2)) Análise e Técnicas de Algoritmos – 2007.2 Derivando Relações de Recorrências Hanoi(A, C, B, n) if n > 1 Hanoi(A, B, C, n-1) Move(A, C) if n > 1 Hanoi(B, C, A, n-1) Relação de Recorrência T(1) = 1 T(n) = 2.T(n-1) + 1 Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Resolvendo Relações de Recorrência •• Resolver Resolveruma umarelação relaçãode derecorrência recorrêncianem nem sempre sempreééfácil. fácil. •• Resolvendo Resolvendouma uma relação relaçãode derecorrência, recorrência,determina-se determina-seoo tempo tempode deexecução execução do doalgoritmo algoritmo recursivo recursivo correspondente. correspondente. •• Relação Relaçãode de recorrência: recorrência:T(n) T(n)==T(n T(n11)) ++T(n T(n22))+...+ +...+T(n T(naa)) ++f(n) f(n) •• ÉÉ mais maisfácil fácil quando quando temos temosaasubproblemas subproblemasde demesmo mesmo tamanho tamanhoque queééuma uma fração fraçãode denn(por (porexemplo, exemplo,n/b): n/b): –– T(n) T(n)==a.T(n/b) a.T(n/b)++f(n) f(n) •• Como Como resolver: resolver: –– Método Métododo do chute chute –– Método Métododa da árvore árvorede de recursão recursão –– Método Métododo do desdobramento desdobramento –– Método Métodomaster master Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Método do Chute e Prova por Indução •• Seja Sejaaaseguinte seguinterelação relaçãode derecorrência: recorrência: –– T(1) T(1)==11 –– T(n) T(n)==2.T(n/2) 2.T(n/2)++nn,,para paran≥2 n≥2 •• AArelação relaçãode derecorrência recorrênciaééresolvida resolvidaem emduas duaspartes: partes: 1. 1. Chute: Chute:T(n) T(n)==nn++n.logn n.logn 2. 2. Prova: Prova: 1. 1. Caso Casobase: base:11++1.log 1.log11==11 2. 2. H.I.: H.I.:assumir assumirque queééválido válidopara paravalores valoresaté atén-1 n-1 3. 3. Provar ProvarT(n): T(n): •• =2.(n/2 =2.(n/2++n/2.log n/2.logn/2) n/2)++nn •• =n =n++n.(logn n.(logn-1) -1)++nn •• =n =n++n.logn n.logn Logo, Logo,T(n) T(n)ééO(n.logn) O(n.logn) © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG 7 Método da Árvore de Recursão Método da Árvore de Recursão •• Talvez Talvezoométodo método mais mais intuitivo. intuitivo. •• Consiste Consisteem em desenhar desenharuma umaárvore árvorecujos cujosnós nósrepresentam representam os os tamanhos tamanhosdos doscorrespondentes correspondentesproblemas. problemas. •• Cada Cadanível nível iicontém contém todos todosos os subproblemas subproblemasde de profundidade profundidade i.i. •• Dois Dois aspectos aspectosimportantes: importantes: –– AA altura alturada daárvore. árvore. –– O Onúmero númerode depassos passosexecutados executadosde decada cadanível. nível. •• AA solução soluçãoda darecorrência recorrência(tempo (tempode deexecução execuçãodo doalgoritmo) algoritmo) éé aa soma somade detodos todosos os passos passosde detodos todosos osníveis. níveis. © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 •• Resolver ResolverT(n) T(n)== 2.T(n/2) 2.T(n/2)++nn T(n) © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Método da Árvore de Recursão Método da Árvore de Recursão n T(n/2) n T(n/2) n/2 T(n/4) © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 n/2 T(n/4) T(n/4) © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Método da Árvore de Recursão Método da Árvore de Recursão n n n/2 n/4 n/2 n/4 n/4 n/2 h = log n n/4 T(1) Análise e Técnicas de Algoritmos – 2007.2 T(n/4) n/4 n/2 n/4 n/4 n/4 1 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG 8 Método da Árvore de Recursão n n n/2 h = log n n/4 Método da Árvore de Recursão n/2 n/4 n/4 n/2 h = log n n/4 1 n/4 © Jorge Figueiredo, DSC/UFCG n/4 n/4 n/4 Método da Árvore de Recursão n/4 n/4 4.n/4= n 1 n/2 h = log n n/4 1 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 n/4 2.n/2= n n/2 n/4 n/4 n folhas n/4 n/4 n/4 n/4 n folhas 4.n/4= n n.1= n © Jorge Figueiredo, DSC/UFCG Método do Desdobramento n n/2 2.n/2= n n/2 Análise e Técnicas de Algoritmos – 2007.2 Método da Árvore de Recursão n n n 2.n/2= n n/2 n/4 © Jorge Figueiredo, DSC/UFCG n n n/2 1 n/4 Análise e Técnicas de Algoritmos – 2007.2 Método da Árvore de Recursão h = log n 2.n/2= n n/2 1 Análise e Técnicas de Algoritmos – 2007.2 h = log n n n 4.n/4= n n.1= n •• Esse Essemétodo métodoééooda da árvore árvorede derecursão, recursão, representado representadode de forma formaalgébrica. algébrica. •• Consiste Consisteem: em: –– Usar Usar (algumas (algumaspoucas) poucas) substituições substituiçõesrepetidamente repetidamenteaté até encontrar encontrar um umpadrão. padrão. –– Escrever Escrever uma umafórmula fórmula em emtermos termosde de nn eeoonúmero númerode de substituições substituições i.i. –– Escolher Escolher ii de detal talforma forma que quetodas todasas as referências referênciasaa T() T() sejam sejam referências referênciasao aocaso caso base. base. –– Resolver Resolveraafórmula. fórmula. (log n).n Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG 9 Método do Desdobramento – Exemplo 1 •• Solução Soluçãopara paraooproblema problemada dapizza: pizza: –– T(1) T(1)==22 –– T(n) T(n)==T(n T(n––1) 1)++nn,,para paran≥2 n≥2 •• Desdobrando Desdobrandoaarelação relaçãode derecorrência: recorrência: T(n) T(n)==T(n-1) T(n-1)++nn T(n) T(n)==T(n-2) T(n-2)++(n-1) (n-1)++nn T(n) T(n)==T(n-3) T(n-3)++(n-2) (n-2)++(n-1) (n-1)++nn ... ... T(n) T(n)==T(n-i) T(n-i)++(n-i+1) (n-i+1)++... ...++(n-1) (n-1)++nn •• Caso Casobase basealcançado alcançadoquando quandoi=n-1 i=n-1 •• T(n) T(n)==22++22++33++... ...++(n (n––1) 1)++nn •• T(n) T(n)==11++n.(n-1)/2 n.(n-1)/2 2 •• Logo, Logo,T(n) T(n)==O(n O(n2)) •• Solução Soluçãopara paraooproblema problemada daTorre Torrede deHanoi: Hanoi: –– T(1) T(1)==11 –– T(n) T(n)==2.T(n 2.T(n––1) 1)++11,,para paran≥2 n≥2 •• Desdobrando Desdobrandoaarelação relaçãode derecorrência: recorrência: T(n) T(n)==2.T(n 2.T(n––1) 1)++11 T(n) T(n)==2.(2.T(n-2) 2.(2.T(n-2)++1) 1)++11==4.T(n-2) 4.T(n-2)++22++11 T(n) T(n)==4.(2.T(n-3) 4.(2.T(n-3)++1) 1)++22++11==8.T(n-3) 8.T(n-3)++44++22++11 ... ... ii i-1 i-2 1 T(n) .T(n-i)++22i-1++22i-2... ...++221++11 T(n)==22.T(n-i) •• Caso Casobase basealcançado alcançadoquando quandoi=n-1 i=n-1 n-1 n-2 n-3 1 •• T(n) ...++221++11 T(n)==22n-1++22n-2++22n-3++... •• Isso Issoééuma umasoma somageométrica geométrica n n •• Logo, O(2n)) Logo,T(n) T(n)==22n––11==O(2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 Método do Desdobramento – Exemplo 2 Método Master Método Master – Exemplo 1 •• Teorema Teoremaque que resolve resolvequase quasetodas todasas asrecorrências. recorrências. •• T(n) T(n)da daforma forma a.T(n/b) a.T(n/b)++f(n), f(n),a,b a,b>>11 •• Casos: Casos: logaab- ε 1. paraalgum algumεε >>0, 0,temos temosque: que: 1. Se Sef(n) f(n)∈∈O(n O(nlog b- ε),), para logaab •• T(n) T(n)∈∈ Θ(n Θ(nlog b).). logaab 2. 2. Se Sef(n) f(n)∈∈ Θ(n Θ(nlog b),), temos temosque: que: logaab •• T(n) T(n)∈∈ Θ(n Θ(nlog b.log .logn). n). a log ab + ε 3. 3. Se Sef(n) f(n)∈∈Ω(n Ω(nlog b + ε),), para paraalgum algumεε>>00ee se se a.f(n/b)≤c.f(n) a.f(n/b)≤c.f(n) para paraalgum algumcc>>00eenn suficientemente suficientementegrande, grande,temos temosque: que: •• T(n) T(n)∈∈ Θ(f(n)). Θ(f(n)). © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Análise e Técnicas de Algoritmos – 2007.2 •• MergeSort: MergeSort: –– T(n) T(n)==2.T(n/2) 2.T(n/2)++nn –– aa ==bb==22 –– f(n) f(n) ==nn a •• log logabb == 1. 1. Cai Cai no no caso caso2. 2. •• Logo, Logo,T(n) T(n)== Θ(n.log Θ(n.log n) n) Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG Método Master – Exemplo 2 •• T(n) T(n)==9.T(n/3) 9.T(n/3)++nn –– aa ==9, 9, bb==33 –– f(n) f(n) ==nn a •• log 2.Se Seεε==1, 1,Cai Cai no nocaso caso1. 1. logabb == 2. 2 •• Logo, Logo,T(n) T(n)== Θ(n Θ(n2)) Análise e Técnicas de Algoritmos – 2007.2 © Jorge Figueiredo, DSC/UFCG 10