Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG
Anlise e Tcnicas de Algoritmos Jorge Figueiredo Anlise de Algoritmos Anlise de Algoritmos Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Agenda Motivao para anlise de algoritmos Anlise assinttica Alguns exemplos simples Motivao para anlise de algoritmos Anlise assinttica Alguns exemplos simples Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Introduo Dois aspectos importantes: Um problema pode, geralmente, ser resolvido por diferentes algoritmos. A existncia de um algoritmo no implica, necessariamente, que este problema possa ser resolvido na prtica. A anlise de algoritmos pode ser definida como o estudo da estimativa de tempo de execuo de algoritmos. O tempo de execuo determinado pelos seguintes aspectos: Tempo para executar uma instruo ou passo. A natureza do algoritmo. O tamanho do conjunto de dados que constitui o problema. Dois aspectos importantes: Um problema pode, geralmente, ser resolvido por diferentes algoritmos. A existncia de um algoritmo no implica, necessariamente, que este problema possa ser resolvido na prtica. A anlise de algoritmos pode ser definida como o estudo da estimativa de tempo de execuo de algoritmos. O tempo de execuo determinado pelos seguintes aspectos: Tempo para executar uma instruo ou passo. A natureza do algoritmo. O tamanho do conjunto de dados que constitui o problema. Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Introduo necessrio ter uma forma de criar medidas de comparao entre algoritmos que resolvem um mesmo problema. Desta forma, possvel determinar: A viabilidade de um algoritmo. Qual o melhor algoritmo para a soluo de um problema. O interessante ter uma comparao relativa entre algoritmos. Assumir que a execuo de qualquer passo de um algoritmo leva uma um tempo fixo e igual. O tempo de execuo de um computador particular no interessante. necessrio ter uma forma de criar medidas de comparao entre algoritmos que resolvem um mesmo problema. Desta forma, possvel determinar: A viabilidade de um algoritmo. Qual o melhor algoritmo para a soluo de um problema. O interessante ter uma comparao relativa entre algoritmos. Assumir que a execuo de qualquer passo de um algoritmo leva uma um tempo fixo e igual. O tempo de execuo de um computador particular no interessante. Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Introduo Qual a quantidade de recursos utilizados para resolver um problema? Tempo Espao Expressar como uma funo do tamanho do problema. Como os requisitos crescem com o aumento do problema? Tamanho do problema: Nmero de elementos a ser tratado Tamanho dos elementos Qual a quantidade de recursos utilizados para resolver um problema? Tempo Espao Expressar como uma funo do tamanho do problema. Como os requisitos crescem com o aumento do problema? Tamanho do problema: Nmero de elementos a ser tratado Tamanho dos elementos Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Eficincia de Algoritmo Considerar eficincia de tempo: Nmero de operaes expresso em termos do tamanho da entrada. Se dobramos o tamanho da entrada, qual o tempo de resposta? Por que eficincia importante? Velocidade de computao aumentou (hardware) Crescimento de aplicaes com o aumento do poder computacional Maior demanda por aumento na velocidade de computao. Considerar eficincia de tempo: Nmero de operaes expresso em termos do tamanho da entrada. Se dobramos o tamanho da entrada, qual o tempo de resposta? Por que eficincia importante? Velocidade de computao aumentou (hardware) Crescimento de aplicaes com o aumento do poder computacional Maior demanda por aumento na velocidade de computao. 2 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Eficincia de Algoritmo Quando a velocidade de computao aumenta, podemos tratar mais dados? Suponha que: Um algoritmo toma n 2 comparaes para ordenar n nmeros. Necessitamos de 1 segundo para ordenar 5 nmeros (25 comparaes) Velocidade de computao aumenta de um fator de 100 Usando 1 segundo, podemos executar 100x25 comparaes, i.e., ordenar 50 nmeros Com 100 vezes de ganho em velocidade, ordenamos apenas 10 vezes mais nmeros! Quando a velocidade de computao aumenta, podemos tratar mais dados? Suponha que: Um algoritmo toma n 2 comparaes para ordenar n nmeros. Necessitamos de 1 segundo para ordenar 5 nmeros (25 comparaes) Velocidade de computao aumenta de um fator de 100 Usando 1 segundo, podemos executar 100x25 comparaes, i.e., ordenar 50 nmeros Com 100 vezes de ganho em velocidade, ordenamos apenas 10 vezes mais nmeros! Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Eficincia de Algoritmo 4 x 10 13 anos 1 ms 10 s 0.66 s 0.1 s 100 13 dias 125 s 2.5 s 0.28 s 0.05 s 50 1 ms 8 s 0.4 s 0.09 s 0.02 s 20 1 s 1 s 0.1 s 0.03 s 0.01 s 10 0.03 s 0.13 s 0.03 s 0.01 s 0.005 s 5 Tn = 2 n T(n) = n 3 T(n) = n 2 T(n) = nlgn T(n) = n N Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Como Medir Eficincia de Algoritmo? Medindo eficincia: Estudo experimental e/ou Benchmarking. Anlise assinttica. Medindo eficincia: Estudo experimental e/ou Benchmarking. Anlise assinttica. Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Abordagem Experimental Abordagem experimental: Escrever um programa que implementa o algoritmo Executar o programa com diferentes cenrios Usar um mtodo como System.currentTimeMillis() para obter medidas acuradas do tempo de execuo real. Abordagem experimental: Escrever um programa que implementa o algoritmo Executar o programa com diferentes cenrios Usar um mtodo como System.currentTimeMillis() para obter medidas acuradas do tempo de execuo real. 50 100 0 t (ms) n 10 20 30 40 50 60 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Abordagem Experimental Limitaes dos estudos experimentais: Necessidade de se implementar e testar o algoritmo. Experimentos podem ser feitos apenas em um nmero limitado de cenrios. Pode, portanto, no indicar tempo de execuo em cenrios que no foram considerados no experimento. Para comparar dois algoritmos: garantir os mesmos hardware e ambiente de software. Limitaes dos estudos experimentais: Necessidade de se implementar e testar o algoritmo. Experimentos podem ser feitos apenas em um nmero limitado de cenrios. Pode, portanto, no indicar tempo de execuo em cenrios que no foram considerados no experimento. Para comparar dois algoritmos: garantir os mesmos hardware e ambiente de software. Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Anlise Assinttica Metodologia para analisar tempo de execuo de algoritmos. Ao contrrio da abordagem experimental: Usa uma descrio de alto nvel dos algoritmos em vez de testar uma de suas implementaes. Leva em considerao todas as possveis entradas. Permite a avaliao de eficincia de algoritmos de uma forma que independente do hardware e ambiente de software utilizado. Metodologia para analisar tempo de execuo de algoritmos. Ao contrrio da abordagem experimental: Usa uma descrio de alto nvel dos algoritmos em vez de testar uma de suas implementaes. Leva em considerao todas as possveis entradas. Permite a avaliao de eficincia de algoritmos de uma forma que independente do hardware e ambiente de software utilizado. 3 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Notao Assinttica Objetivo: simplificar a anlise descartando informaes desnecessrias: arredondamento 1,000,0011,000,000 Dizer que 3n 2 n 2 Objetivo: simplificar a anlise descartando informaes desnecessrias: arredondamento 1,000,0011,000,000 Dizer que 3n 2 n 2 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Big-Oh Sejam duas funes f(n) e g(n). f(n) O(g(n)) se existem constantes positivas c e n 0 tais que f(n) cg(n) para n n 0 Exemplo: 2n + 10 O(n) 2n + 10 cn (c 2) n 10 n 10/(c 2) Escolher c = 3 e n 0 = 10 Sejam duas funes f(n) e g(n). f(n) O(g(n)) se existem constantes positivas c e n 0 tais que f(n) cg(n) para n n 0 Exemplo: 2n + 10 O(n) 2n + 10 cn (c 2) n 10 n 10/(c 2) Escolher c = 3 e n 0 = 10 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Big-Oh 1 10 100 1.000 10.000 1 10 100 1.000 n 3n 2n+10 n Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Big-Oh Exemplo: n 2 no O(n) n 2 cn n c A desigualdade no pode ser satisfeita pois c deve ser uma constante. Exemplo: n 2 no O(n) n 2 cn n c A desigualdade no pode ser satisfeita pois c deve ser uma constante. 1 10 100 1.000 10.000 100.000 1.000.000 1 10 100 1.000 n n^2 100n 10n n Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Big-Omega Sejam duas funes f(n) e g(n). f(n) (g(n)) se g(n) O(f(n)) Existe uma constante real c >0 e n 0 1 tal que f(n) c g(n) para n n 0 Sejam duas funes f(n) e g(n). f(n) (g(n)) se g(n) O(f(n)) Existe uma constante real c >0 e n 0 1 tal que f(n) c g(n) para n n 0 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Big-Theta Sejam duas funes f(n) e g(n) f(n) (g(n)) se f(n) O(g(n)) e f(n) (g(n)) existem constantes reais a>0 e b>0, e uma constante inteira n 0 1 tal que a g(n) f(n) b g(n) para n n 0 Sejam duas funes f(n) e g(n) f(n) (g(n)) se f(n) O(g(n)) e f(n) (g(n)) existem constantes reais a>0 e b>0, e uma constante inteira n 0 1 tal que a g(n) f(n) b g(n) para n n 0 4 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Taxas de Crescimento Mais Comum n 2 n 2 n n log n c 1 log n n n 2 n 3 ... n k ... 2 n constante logartmica polinomial exponencial Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Anlise Assinttica A anlise assinttica baseada nessas definies e estabelece uma ordem relativa entre funes. A notao Big-Oh usada para expressar o nmero de operaes primitivas executadas como funo do tamanho da entrada. um algoritmo que executa em tempo O(n) melhor do que um que executa em tempo O(n 2 ) de forma semelhante, O(log n) melhor do que O(n) Cuidado! Preste ateno a constantes muito altas. Um algoritmo que executa em tempo 1,000,000.n O(n), mas menos eficiente do que um que executa em tempo 2n 2 , que O(n 2 ). A anlise assinttica baseada nessas definies e estabelece uma ordem relativa entre funes. A notao Big-Oh usada para expressar o nmero de operaes primitivas executadas como funo do tamanho da entrada. um algoritmo que executa em tempo O(n) melhor do que um que executa em tempo O(n 2 ) de forma semelhante, O(log n) melhor do que O(n) Cuidado! Preste ateno a constantes muito altas. Um algoritmo que executa em tempo 1,000,000.n O(n), mas menos eficiente do que um que executa em tempo 2n 2 , que O(n 2 ). Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Complexidade de Tempo Para determinar o tempo de execuo de um determinado algoritmo descobrir a forma geral da curva que caracteriza seu tempo de execuo em funo do tamanho do problema. Para simplificarmos a anlise de complexidade de tempo: adotamos a no existncia de unidades de tempo particulares. no consideramos tambm os termos de ordem inferior, isto , usamos Big-Oh. A complexidade de tempo para diferentes algoritmos pode indicar diferentes classes de complexidade. Cada classe caracterizada por uma famlia diferente de curva. Para determinar o tempo de execuo de um determinado algoritmo descobrir a forma geral da curva que caracteriza seu tempo de execuo em funo do tamanho do problema. Para simplificarmos a anlise de complexidade de tempo: adotamos a no existncia de unidades de tempo particulares. no consideramos tambm os termos de ordem inferior, isto , usamos Big-Oh. A complexidade de tempo para diferentes algoritmos pode indicar diferentes classes de complexidade. Cada classe caracterizada por uma famlia diferente de curva. Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Complexidade de Tempo Informalmente, para se determinar a ordem de complexidade de uma determinada funo f(n): 1. Separar f(n) em duas partes: termo dominante e termos de ordem inferior. 2. ignorar os termos de ordem inferior. 3. ignorar as constantes de proporcionalidade. Informalmente, para se determinar a ordem de complexidade de uma determinada funo f(n): 1. Separar f(n) em duas partes: termo dominante e termos de ordem inferior. 2. ignorar os termos de ordem inferior. 3. ignorar as constantes de proporcionalidade. Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Anlise de Algoritmos Simples Em nosso modelo de anlise, consideramos que as instrues so executadas sequencialmente e que o conjunto de instrues simples (adio, comparao, atribuio, etc) tomam exatamente uma unidade de tempo para serem executadas. Tipos de anlise: Pior caso: indica o maior tempo obtido, levando em considerao todas as entradas possveis. Melhor caso: indica o menor tempo obtido, levando em considerao todas as entradas possveis. Mdia: indica o tempo mdio obtido, considerando todas as entradas possveis. Em nosso modelo de anlise, consideramos que as instrues so executadas sequencialmente e que o conjunto de instrues simples (adio, comparao, atribuio, etc) tomam exatamente uma unidade de tempo para serem executadas. Tipos de anlise: Pior caso: indica o maior tempo obtido, levando em considerao todas as entradas possveis. Melhor caso: indica o menor tempo obtido, levando em considerao todas as entradas possveis. Mdia: indica o tempo mdio obtido, considerando todas as entradas possveis. Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Anlise de Algoritmos Simples Como o objetivo determinar a forma da curva que caracteriza o algoritmo, vamos definir algumas regras que podem ser utilizadas: Laos: O tempo de execuo de um lao no mximo o tempo de execuo das instrues dentro do lao (incluindo os testes) vezes o nmero de iteraes. Aninhamento de Laos: Analisar os mais internos. O tempo total de execuo de uma instruo dentro de um grupo de laos aninhados o tempo de execuo da instruo multiplicado pelo produto dos tamanhos de todos os laos. Instrues Consecutivas: Apenas efetuar a soma. If/Else: o tempo de execuo de uma instruo if/else nunca maior do que o tempo de execuo do teste mais o maior dos tempos de execuo de S1 e S2. S1 e S2 representam as instrues do then e else, respectivamente. Como o objetivo determinar a forma da curva que caracteriza o algoritmo, vamos definir algumas regras que podem ser utilizadas: Laos: O tempo de execuo de um lao no mximo o tempo de execuo das instrues dentro do lao (incluindo os testes) vezes o nmero de iteraes. Aninhamento de Laos: Analisar os mais internos. O tempo total de execuo de uma instruo dentro de um grupo de laos aninhados o tempo de execuo da instruo multiplicado pelo produto dos tamanhos de todos os laos. Instrues Consecutivas: Apenas efetuar a soma. If/Else: o tempo de execuo de uma instruo if/else nunca maior do que o tempo de execuo do teste mais o maior dos tempos de execuo de S1 e S2. S1 e S2 representam as instrues do then e else, respectivamente. 5 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Anlise de Algoritmos Simples Chamada de Funes: A anlise feita como no caso de laos aninhados. Para calcular a complexidade de um programa com vrias funes, determina-se primeiro a complexidade de cada uma das funes. Desta forma, na anlise, cada uma das funes vista como uma instruo com a complexidade que foi calculada. Recurso: a parte mais difcil da anlise de complexidade. Em muitos casos, pode-se fazer a linearizao atravs da substituio da chamada recursiva por alguns laos aninhados, por exemplo. Entretanto, existem algoritmos que no possibilitam a linearizao. Nestes caso, necessrio usar uma relao de recorrncia que tem que ser resolvida. Chamada de Funes: A anlise feita como no caso de laos aninhados. Para calcular a complexidade de um programa com vrias funes, determina-se primeiro a complexidade de cada uma das funes. Desta forma, na anlise, cada uma das funes vista como uma instruo com a complexidade que foi calculada. Recurso: a parte mais difcil da anlise de complexidade. Em muitos casos, pode-se fazer a linearizao atravs da substituio da chamada recursiva por alguns laos aninhados, por exemplo. Entretanto, existem algoritmos que no possibilitam a linearizao. Nestes caso, necessrio usar uma relao de recorrncia que tem que ser resolvida. Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Algumas Dicas Identificar a operao fundamental usada no algoritmo. A anlise dessa operao fundamental identifica o tempo de execuo. Isso pode evitar a anlise linha-por-linha do algoritmo. Quando um algoritmo, em uma passada de uma iterao, divide o conjunto de dados de entrada em uma ou mais partes, tomado cada uma dessas partes e processando separada e recursivamente, e depois juntando os resultados, este algoritmo possivelmente O(n.log n) Um algoritmo O(log n) se ele leva tempo constante para reduzir o tamanho do problema, geralmente pela metade. Por exemplo, a pesquisa binria. Se o algoritmo leva tempo constante para reduzir o tamanho do problema em um tamanho constante, ele ser O(n). Algoritmos combinatoriais so exponenciais. Por exemplo, o problema do caixeiro viajante. Identificar a operao fundamental usada no algoritmo. A anlise dessa operao fundamental identifica o tempo de execuo. Isso pode evitar a anlise linha-por-linha do algoritmo. Quando um algoritmo, em uma passada de uma iterao, divide o conjunto de dados de entrada em uma ou mais partes, tomado cada uma dessas partes e processando separada e recursivamente, e depois juntando os resultados, este algoritmo possivelmente O(n.log n) Um algoritmo O(log n) se ele leva tempo constante para reduzir o tamanho do problema, geralmente pela metade. Por exemplo, a pesquisa binria. Se o algoritmo leva tempo constante para reduzir o tamanho do problema em um tamanho constante, ele ser O(n). Algoritmos combinatoriais so exponenciais. Por exemplo, o problema do caixeiro viajante. Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Exerccio Potencia(x, n) p 1 i 0 while i <n do p p.x i i +1 returnp Qual a complexidade do algoritmo abaixo? Qual a complexidade do algoritmo abaixo? Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Anlise e Tcnicas de Algoritmos Jorge Figueiredo Anlise de Algoritmos Recursivos Anlise de Algoritmos Recursivos Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Agenda Relao de Recorrncia Derivando recorrncia Resolvendo recorrncia Anlise de algoritmos recursivos Relao de Recorrncia Derivando recorrncia Resolvendo recorrncia Anlise de algoritmos recursivos Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Introduo A anlise de um algoritmo recursivo requer a resoluo de uma recorrncia. Uma recorrncia um algoritmo recursivo que calcula o valor de uma funo em um ponto dado. Uma recorrncia define T(n) em termos de T(n-1), T(n-2), etc. Exemplo: T(1) = 1 T(n) = T(n 1) + 3n + 2 , para n2 A anlise de um algoritmo recursivo requer a resoluo de uma recorrncia. Uma recorrncia um algoritmo recursivo que calcula o valor de uma funo em um ponto dado. Uma recorrncia define T(n) em termos de T(n-1), T(n-2), etc. Exemplo: T(1) = 1 T(n) = T(n 1) + 3n + 2 , para n2 6 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Introduo Exemplo 2: Quantos pedaos com n cortes? Exemplo 2: Quantos pedaos com n cortes? Cortes: 1 Pedaos: 2 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Introduo Exemplo 2: Quantos pedaos com n cortes? Exemplo 2: Quantos pedaos com n cortes? Cortes: 1 Pedaos: 2 Cortes: 2 Pedaos: 4 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Introduo Exemplo 2: Quantos pedaos com n cortes? Exemplo 2: Quantos pedaos com n cortes? Cortes: 1 Pedaos: 2 Cortes: 2 Pedaos: 4 Cortes: 3 Pedaos: 7 Cortes: 4 Pedaos: 11 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Introduo possvel observar que o n-simo corte cria n novos pedaos. Logo, o nmero total de pedaos obtido com n cortes, denotado por P(n), dado pela seguinte relao de recorrncia: P(1) = 2 P(n) = P(n 1) + n, para n2 possvel observar que o n-simo corte cria n novos pedaos. Logo, o nmero total de pedaos obtido com n cortes, denotado por P(n), dado pela seguinte relao de recorrncia: P(1) = 2 P(n) = P(n 1) + n, para n2 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Deri vando Relaes de Recorrncias Como proceder para derivar uma relao de recorrncia para a anlise do tempo de execuo de um algoritmo: Determinar qual o tamanho n do problema. Verificar que valor de n usado como base da recurso. Em geral um valor nico (n=1, por exemplo), mas pode ser valores mltiplos. Vamos considerar esse valor como n 0 . Determinar T(n 0 ). Pode-se usar uma constante c, mas, em muitos, casos um nmero especfico necessrio. Como proceder para derivar uma relao de recorrncia para a anlise do tempo de execuo de um algoritmo: Determinar qual o tamanho n do problema. Verificar que valor de n usado como base da recurso. Em geral um valor nico (n=1, por exemplo), mas pode ser valores mltiplos. Vamos considerar esse valor como n 0 . Determinar T(n 0 ). Pode-se usar uma constante c, mas, em muitos, casos um nmero especfico necessrio. Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Deri vando Relaes de Recorrncias T(n) definido como uma soma de vrias ocorrncias de T(m) (chamadas recursivas), mais a soma de outras instrues efetuadas. Em geral, as chamadas recursivas esto relacionadas com a subproblemas do mesmo tamanho f(n), definindo um termo a.T(f(n)) na relao de recorrncia. A relao de recorrncia definida por: T(n) = c, se n = n 0 T(n) = a.T(f(n)) + g(n), caso contrrio T(n) definido como uma soma de vrias ocorrncias de T(m) (chamadas recursivas), mais a soma de outras instrues efetuadas. Em geral, as chamadas recursivas esto relacionadas com a subproblemas do mesmo tamanho f(n), definindo um termo a.T(f(n)) na relao de recorrncia. A relao de recorrncia definida por: T(n) = c, se n = n 0 T(n) = a.T(f(n)) + g(n), caso contrrio 7 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Deri vando Relaes de Recorrncias Exemplo: Torre de Hanoi Objetivo: transferir os n discos de A para C Regras: Mover um disco por vez. Nunca colocar um disco maior em cima de um menor. Soluo Recursiva: Transferir n-1 discos de A para B Mover o maior disco de A para C Transferir n-1 discos de B para C Exemplo: Torre de Hanoi Objetivo: transferir os n discos de A para C Regras: Mover um disco por vez. Nunca colocar um disco maior em cima de um menor. Soluo Recursiva: Transferir n-1 discos de A para B Mover o maior disco de A para C Transferir n-1 discos de B para C Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Deri vando Relaes de Recorrncias Hanoi(A, C, B, n) ifn >1 Hanoi(A, B, C, n-1) Move(A, C) ifn >1 Hanoi(B, C, A, n-1) Relao de Recorrncia T(1) =1 T(n) =2.T(n-1) +1 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Deri vando Relaes de Recorrncias MergeSort(A, n) ifn 1 returnA returnmerge(MergeSort(A1, n/2), MergeSort(A2, n/2)) Relao de Recorrncia T(1) =c T(n) =2.T(n/2) +d.n Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Resol vendo Relaes de Recorrncia Resolver uma relao de recorrncia nem sempre fcil. Resolvendo uma relao de recorrncia, determina-se o tempo de execuo do algoritmo recursivo correspondente. Relao de recorrncia: T(n) = T(n 1 ) + T(n 2 ) +...+ T(n a ) + f(n) mais fcil quando temos a subproblemas de mesmo tamanho que uma frao de n (por exemplo, n/b): T(n) = a.T(n/b) + f(n) Como resolver: Mtodo do chute Mtodo da rvore de recurso Mtodo do desdobramento Mtodo master Resolver uma relao de recorrncia nem sempre fcil. Resolvendo uma relao de recorrncia, determina-se o tempo de execuo do algoritmo recursivo correspondente. Relao de recorrncia: T(n) = T(n 1 ) + T(n 2 ) +...+ T(n a ) + f(n) mais fcil quando temos a subproblemas de mesmo tamanho que uma frao de n (por exemplo, n/b): T(n) = a.T(n/b) + f(n) Como resolver: Mtodo do chute Mtodo da rvore de recurso Mtodo do desdobramento Mtodo master Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo do Chute e Prova por Induo Seja a seguinte relao de recorrncia: T(1) = 1 T(n) = T(n 1) + 3n + 2 , para n2 A relao de recorrncia resolvida em duas partes: 1. Chute: T(n) = 3n 2 /2 + 7n/2 4 2. Prova: 1. Caso base para n=1 2. H.I.: assumir que vlido para n-1 3. Provar T(n) Se a prova for confirmada, T(n) O(n 2 ) Seja a seguinte relao de recorrncia: T(1) = 1 T(n) = T(n 1) + 3n + 2 , para n2 A relao de recorrncia resolvida em duas partes: 1. Chute: T(n) = 3n 2 /2 + 7n/2 4 2. Prova: 1. Caso base para n=1 2. H.I.: assumir que vlido para n-1 3. Provar T(n) Se a prova for confirmada, T(n) O(n 2 ) Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo do Chute e Prova por Induo Seja a seguinte relao de recorrncia: T(1) = 1 T(n) = 2.T(n/2) + n , para n2 A relao de recorrncia resolvida em duas partes: 1. Chute: T(n) = n + n.logn 2. Prova: 1. Caso base: 1 + 1.log 1 = 1 2. H.I.: assumir que vlido para valores at n-1 3. Provar T(n): =2.(n/2 + n/2.log n/2) + n =n + n.(logn -1) + n =n + n.logn Logo, T(n) O(n.logn) Seja a seguinte relao de recorrncia: T(1) = 1 T(n) = 2.T(n/2) + n , para n2 A relao de recorrncia resolvida em duas partes: 1. Chute: T(n) = n + n.logn 2. Prova: 1. Caso base: 1 + 1.log 1 = 1 2. H.I.: assumir que vlido para valores at n-1 3. Provar T(n): =2.(n/2 + n/2.log n/2) + n =n + n.(logn -1) + n =n + n.logn Logo, T(n) O(n.logn) 8 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo da rvore de Recurso Talvez o mtodo mais intuitivo. Consiste em desenhar uma rvore cujos ns representam os tamanhos dos correspondentes problemas. Cada nvel i contm todos os subproblemas de profundidade i. Dois aspectos importantes: A altura da rvore. O nmero de passos executados de cada nvel. A soluo da recorrncia (tempo de execuo do algoritmo) a soma de todos os passos de todos os nveis. Talvez o mtodo mais intuitivo. Consiste em desenhar uma rvore cujos ns representam os tamanhos dos correspondentes problemas. Cada nvel i contm todos os subproblemas de profundidade i. Dois aspectos importantes: A altura da rvore. O nmero de passos executados de cada nvel. A soluo da recorrncia (tempo de execuo do algoritmo) a soma de todos os passos de todos os nveis. Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo da rvore de Recurso Resolver T(n) = 2.T(n/2) + n Resolver T(n) = 2.T(n/2) + n T(n) Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo da rvore de Recurso n T(n/2) T(n/2) Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo da rvore de Recurso n n/2 n/2 T(n/4) T(n/4) T(n/4) T(n/4) Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo da rvore de Recurso n n/2 n/2 n/4 n/4 n/4 n/4 T(1) Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo da rvore de Recurso n n/2 n/2 n/4 n/4 n/4 n/4 1 h = log n 9 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo da rvore de Recurso n n/2 n/2 n/4 n/4 n/4 n/4 1 h = log n n Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo da rvore de Recurso n n/2 n/2 n/4 n/4 n/4 n/4 1 h = log n n 2.n/2= n Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo da rvore de Recurso n n/2 n/2 n/4 n/4 n/4 n/4 1 h = log n n 2.n/2= n 4.n/4= n Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo da rvore de Recurso n n/2 n/2 n/4 n/4 n/4 n/4 1 h = log n n 2.n/2= n 4.n/4= n n folhas n.1= n Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo da rvore de Recurso n n/2 n/2 n/4 n/4 n/4 n/4 1 h = log n n 2.n/2= n 4.n/4= n n folhas n.1= n (log n).n Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo do Desdobramento Esse mtodo o da rvore de recurso, representado de forma algbrica. Consiste em: Usar (algumas poucas) substituies repetidamente at encontrar um padro. Escrever uma frmula em termos de n e o nmero de substituies i. Escolher i de tal forma que todas as referncias a T() sejam referncias ao caso base. Resolver a frmula. Esse mtodo o da rvore de recurso, representado de forma algbrica. Consiste em: Usar (algumas poucas) substituies repetidamente at encontrar um padro. Escrever uma frmula em termos de n e o nmero de substituies i. Escolher i de tal forma que todas as referncias a T() sejam referncias ao caso base. Resolver a frmula. 10 Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo do Desdobramento Exemplo 1 Soluo para o problema da pizza: T(1) = 2 T(n) = T(n 1) + n , para n2 Desdobrando a relao de recorrncia: T(n) = T(n-1) + n T(n) = T(n-2) + (n-1) + n T(n) = T(n-3) + (n-2) + (n-1) + n ... T(n) = T(n-i) + (n-i+1) + ... + (n-1) + n Caso base alcanado quando i=n-1 T(n) = 2 + 2 + 3 + ... + (n 1) + n T(n) = 1 + n.(n-1)/2 Logo, T(n) = O(n 2 ) Soluo para o problema da pizza: T(1) = 2 T(n) = T(n 1) + n , para n2 Desdobrando a relao de recorrncia: T(n) = T(n-1) + n T(n) = T(n-2) + (n-1) + n T(n) = T(n-3) + (n-2) + (n-1) + n ... T(n) = T(n-i) + (n-i+1) + ... + (n-1) + n Caso base alcanado quando i=n-1 T(n) = 2 + 2 + 3 + ... + (n 1) + n T(n) = 1 + n.(n-1)/2 Logo, T(n) = O(n 2 ) Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo do Desdobramento Exemplo 2 Soluo para o problema da Torre de Hanoi: T(1) = 1 T(n) = 2.T(n 1) + 1 , para n2 Desdobrando a relao de recorrncia: T(n) = 2.T(n 1) + 1 T(n) = 2.(2.T(n-2) + 1) + 1 = 4.T(n-2) + 2 + 1 T(n) = 4.(2.T(n-3) + 1) + 2 + 1 = 8.T(n-3) + 4 + 2 + 1 ... T(n) = 2 i .T(n-i) + 2 i-1 + 2 i-2 ... + 2 1 + 1 Caso base alcanado quando i=n-1 T(n) = 2 n-1 + 2 n-2 + 2 n-3 + ... + 2 1 + 1 Isso uma soma geomtrica Logo, T(n) = 2 n 1 = O(2 n ) Soluo para o problema da Torre de Hanoi: T(1) = 1 T(n) = 2.T(n 1) + 1 , para n2 Desdobrando a relao de recorrncia: T(n) = 2.T(n 1) + 1 T(n) = 2.(2.T(n-2) + 1) + 1 = 4.T(n-2) + 2 + 1 T(n) = 4.(2.T(n-3) + 1) + 2 + 1 = 8.T(n-3) + 4 + 2 + 1 ... T(n) = 2 i .T(n-i) + 2 i-1 + 2 i-2 ... + 2 1 + 1 Caso base alcanado quando i=n-1 T(n) = 2 n-1 + 2 n-2 + 2 n-3 + ... + 2 1 + 1 Isso uma soma geomtrica Logo, T(n) = 2 n 1 = O(2 n ) Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo Master Teorema que resolve quase todas as recorrncias. T(n) da forma a.T(n/b) + f(n), a,b > 1 Casos: 1. Se f(n) O(n log a b- ), para algum > 0, temos que: T(n) (n log a b ). 2. Se f(n) (n log a b ), temos que: T(n) (n log a b .log n). 3. Se f(n) (n log a b + ), para algum > 0 e se a.f(n/b)c.f(n) para algum c > 0 e n suficientemente grande, temos que: T(n) (f(n)). Teorema que resolve quase todas as recorrncias. T(n) da forma a.T(n/b) + f(n), a,b > 1 Casos: 1. Se f(n) O(n log a b- ), para algum > 0, temos que: T(n) (n log a b ). 2. Se f(n) (n log a b ), temos que: T(n) (n log a b .log n). 3. Se f(n) (n log a b + ), para algum > 0 e se a.f(n/b)c.f(n) para algum c > 0 e n suficientemente grande, temos que: T(n) (f(n)). Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo Master Exemplo 1 MergeSort: T(n) = 2.T(n/2) + n a = b = 2 f(n) = n log a b = 1. Cai no caso 2. Logo, T(n) = (n.log n) MergeSort: T(n) = 2.T(n/2) + n a = b = 2 f(n) = n log a b = 1. Cai no caso 2. Logo, T(n) = (n.log n) Anlise e Tcnicas de Algoritmos 2007.2 Jorge Figueiredo, DSC/UFCG Mtodo Master Exemplo 2 T(n) = 9.T(n/3) + n a = 9, b = 3 f(n) = n log a b = 2. Se = 1, Cai no caso 1. Logo, T(n) = (n 2 ) T(n) = 9.T(n/3) + n a = 9, b = 3 f(n) = n log a b = 2. Se = 1, Cai no caso 1. Logo, T(n) = (n 2 )