Análise e Técnicas de Algoritmos divisão. divisão. combina. combina. Análise e Técnicas de Algoritmos

Tamanho: px
Começar a partir da página:

Download "Análise e Técnicas de Algoritmos divisão. divisão. combina. combina. Análise e Técnicas de Algoritmos"

Transcrição

1 genda nálise e Técnicas de lgoritmos Conceitos ásicos Template Genérico Exemplos Jorge Figueiredo Divisão e Conquista Motivação Pegar um problema de de entrada grande. Quebrar a entrada em pedaços menores (DIVISÃO). Resolver cada pedaço separadamente. (CONQUIST) Como resolver os ospedaços? Combinar os osresultados. divisão divisão combina combina MergeSort Técnica técnica de de divisão e conquista consistem de de passos básicos:.. Divisão: Dividir o problema original, em subproblemas menores... Conquista: Resolver cada subproblema recursivamente... Combinação: Combinar as as soluções encontradas, compondo uma solução para o problema original. Técnica lgoritmos baseados em divisão e conquista são, em geral, recursivos. maioria dos algoritmos de de divisão e conquista divide o problema em a subproblemas da da mesma natureza, de de tamanho n/b. T(n) = a. a. T(n/b) + g(n) Teorema Master para fazer análise. Vantagens: Requer um número menor de de acessos à memória. São altamente paralelizáveis. Se Se existem vários processadores disponíveis, a estratégia propicia eficiência.

2 Quando Utilizar DeC? Existem três condições que indicam que a estratégia de de divisão e conquista pode ser utilizada com sucesso:.. Deve ser possível decompor uma instância em subinstâncias... combinação dos resultados deve ser eficiente... s s sub-instâncias devem ser mais ou ou menos do do mesmo tamanho. Quando Utilizar DeC? É possível identificar pelo menos duas situações genéricas em que a abordagem por divisão e conquista é adequada:.. Problemas onde um grupo de de operações são correlacionadas ou ou repetidas. multiplicação de de matrizes, que veremos a seguir, é um exemplo clássico... Problemas em que uma decisão deve ser tomada e, e, uma vez tomada, quebra o problema em peças disjuntas. Em especial, a abordagem por divisão-e-conquiasta é interessante quando algumas peças passam a ser irrelevantes. lgoritmo Genérico DivisãoeConquista(x) if x é pequeno ou simples do return resolver(x) else decompor x em conjuntos menores x, x, x n for i to n do y i DivisãoeConquista(x i ) i i + combinar y i s return y Exemplo O problema consiste em em encontrar o maior elemento de de um um array [..n] Solução Ingênua Maxim([..n]) max [] for i to n do if [j] > max then max [i] return max Exemplo Exemplo O problema consiste em em encontrar o maior elemento de de um um array [..n] O problema consiste em em computa a n n,, em em que que n N. N. Solução Ingênua Maxim([..n]) maior [] for i to n do if [j] > maior then maior [i] return maior Solução DeC Maxim([x..y]) if x y then return max([x], [y]) else m x+y/ v Maxim([x..m]) v Maxim([m+..y]) return max(v, v) Solução Ingênua Pow(a, n) p a for i to n do p p a return p Solução DeC Pow(a, n) if n= then return if n é par then return Pow(a, n/) Pow(a, n/) else return Pow(a,n-/) Pow(a, n-/) a

3 Multiplicação de Inteiros Grandes Multiplicação de Inteiros Grandes O problema consiste em multiplicar dois números inteiros grandes. multiplicação clássica (a (a que aprendemos fazer na na escola) requer tempo Θ(n ). ). Isso porque fazemos multiplicação dígito a dígito. Solução lternativa por Divisão e Conquista Para evitar maiores complicações, vamos assumir que o número de de dígitos em cada número é potência de de.. multiplicação de de um número por um número pode ser efetuada dividindo-se o número original em dois super-dígitos e procedendo a multiplicação.. wy : w x : y wz xy z xz wy wz + xy xz n n/ n/ Multiplicação de Inteiros Grandes Mult(,) = Mult(w,y). m m + (Mult(w,z)+Mult(x,y)). m + Mult(x,z) multiplicação por m pode ser vista como o deslocamento de de m posições para a direita. s s adições envolvidas tomam tempo Θ(n) cada. multiplicação de de dois inteiros longos é o resultado de de produtos de de inteiros de de tamanho metade do do valor original, e um constante número de de adições e deslocamentos, com tempo Θ(n). Multiplicação de Inteiros Grandes Uma solução por divisão e conquista:.. Divisão: Dividir cada número em dois números com metade da da quantidade de de dígitos... Conquista: Proceder a multiplicação das quatro partes... Combinação: Combinar os os resultados com deslocamento e adições. análise do do algoritmo que utiliza divisão e conquista requer a solução da da seguinte relação de de recorrência: T(n) =.T(n/) + Θ(n) Θ(n )) Multiplicação de Inteiros Grandes Uma Solução por Divisão e Conquista Mais Eficiente Por que não temos a eficiência desejada? Ora, temos multiplicaçõs de de números de de tamanho n/. solução seria reduzir o número de de multiplicações? Isso é verdade pois sabemos que a adição e deslocamentos contribui com Θ(n). Se Se observarmos mais detalhadamente, podemos reduzir para três o número de de multiplicações: C= wy wy D= xz xz E= (wz + xy) Multiplicação de Inteiros Grandes C= Mult(w,y) D= Mult(x,z) E= Mult((w+x, y+z)) C D = (wy+wz+xy+xz)-wy-xz=(wz + xy) Logo, Mult(,) = C. m m + E. m + D No total, fazemos multiplicações, adições e subtrações de de números com n/ dígitos. É necessário ainda fazer deslocamentos mas, tudo isso representa Θ(n). T(n) =.T(n/) + Θ(n) T(n) é Θ(n ))

4 Multiplicação de Matrizes Objetivo é multiplicar duas matrizes n n. Por exemplo, no no caso de de n=, é necessário efetuar 8 multiplicações. ( ( x x,, em que x = log 8 8 )) lgoritmo de Strassen Strassen mostrou que um multiplicação de de matrizes x pode ser feita com 7 multiplicações e 8 8 operações de de adição e subtração.( log log 7 = = )) Redução feita usando divisão e conquista. C = a b + a b = R C = a b + a b C = a b + a b = C = a b + a b lgoritmo de Strassen lgoritmo de Strassen P = ( + )( + ) P = ( + ) * P = * ( - ) P = * ( - ) P 5 = ( + ) * P 6 = ( - ) * ( + ) P 7 = ( - ) * ( + ) C = P + P -P 5 + P 7 C = P + P 5 C = P + P C = P + P -P + P 6 C = P + P -P 5 + P 7 = ( + )( + ) + * ( - ) - ( + ) * + ( - ) * ( + ) = = + Menor Distância Entre Pontos Menor Distância Entre Pontos Distância Euclideana y ( x ), y y ( ) x, y Closest Pair Entrada: Um conjunto de pontos np = <p, p,..., pn, em duas dimensões. Saída: O par de pontos p e p que apresenta a menor distância euclideana. x x ( x, y ) ( x y ) = ( x x ) + ( y y ),

5 Menor Distância Entre Pontos Menor Distância Entre Pontos d Menor Distância Entre Pontos Solução Força ruta é O(n ). ). Vamos assumir: Não existem pontos com a mesma coordenada x. x. Não existem pontos com a mesma coordenada y. y. Como resolver este problema considerando D? É possível aplicar Divisão e Conquista? Menor Distância Entre Pontos D Como dividir em sub-problemas? Ordenar de de acordo com a coordenada x e dividir em duas partes: esquerda e direita. Menor Distância Entre Pontos D Menor Distância Entre Pontos D Resolver recursivamente cada sub-problema, obtendo d l e l d r. r. O que podemos observar? Já Játemos a menor distância em cada uma das partes. Fazer d= d= min{d l, l, d r }. r }. Falta analisar distância entre pontos de de sub-problemas distintos. Devemos analisar todos os os casos? Somente pontos que se se encontram em uma faixa de de tamanho d d em torno da da linha divisória. 5

6 Menor Distância Entre Pontos D Qual a quantidade de de pontos que se se encontram dentro da da faixa de de tamanho d? Se Se considerarmos um p P l, l, todos os os pontos de de P rr que devem ser considerados devem estar em um retângulo R de de dimensões d d. Menor Distância Entre Pontos D Como determinar os os seis pontos? Projeção de de pontos nos eixos x e y. y. Pode-se fazer isso para todo p P ll e P r r,, em O(n) (pontos ordenados). Relação de de recorrência é T(n)=.T(n/) + O(n) Sabemos que isso é O(n.log n) n) d d R d R d d d ClosestPair(P) Pré-processamento Construir P x e P y como listas ordenadas pelas coordenadas x e y Divisão Quebrar P em P l e P r Conquista d l = ClosestPair(P l ) d r = ClossetPair(P r ) Combinação d= min{d l, d r } Determinar faixa divisória e pontos Verificar se tem algum par com distância < d 6

7 genda nálise e Técnicas de lgoritmos Jorge Figueiredo Problemas de de otimização Conceitos ásicos O Problema da da Mochila Fracionária Template Genérico Exemplos: Código de de Huffman lgoritmos Gulosos (Greedy) Problemas de Otimização Muitos problemas consideram o conceito de de maximizar ou ou minimizar um determinado valor: Como uma empresa de de mudança deve alocar os osmóveis em um caminhão baú? Como uma companhia telefônica deve rotear chamadas de de modo a fazer um melhor uso de de suas linhas e conexões? Como alocar as as disciplinas para melhor utilizar as as salas do do REENGE? Características: Problemas que podem apresentar diversas soluções. Solução formada por uma seqüência de de decisões. Um valor ou oucusto é associado a cada solução. cha solução com custo ótimo. Exemplo : Cálculo do Trôco Descrição: Seja E= {e {e,, e,,...,..., e n }},, e > e >...> e n,, um conjunto de de n denominações de de moedas (ou cédula), e M um valor positivo que representa o trôco. Problema: Fornecer o montante M com o menor número de de moedas. Seqüência de de decisões: Escolher rr,, depois rr,,... Exemplo : Problema da Mochila Descrição: Temos n objetos com pesos p,, p,,...,..., p n e lucros l l,, l l,,...,..., l n l.. Temos ainda uma mochila de de capacidade M. M. Se uma fração x i i ( ( x i i ) ) do do objeto iifor for colocada na na mochila, resulta em um lucro x i i l i l. i. Problema: Maximizar o lucro que pode ser levado na na mochila. Seqüência de de decisões: Escolher primeiro objeto, escolher segundo objeto, Exemplo : Escalonamento de Tarefas Descrição: Seja E um conjunto de de n tarefas. ssociamos a cada tarefa um tempo de de execução. Fazer o escalonamento das tarefas. Problema: Minimizar o tempo médio de de finalização das tarefas. Seqüência de de decisões: Escolher primeira tarefa, escolher segunda tarefa,......

8 Exemplo : Caixeiro Viajante Descrição: Seja G=(V, E) E) um grafo dirigido ponderado. Seja n o número de de vértices e v o vértice de de origem. Problema: char uma turnê de de custo mínimo, começando em v.. Seqüência de de decisões: partir de de v qual é o primeiro vértice do do ciclo, o segundo vértice, Método Guloso Decisões tomadas de de forma isolada em cada passo. Estratégia de de pegar o melhor no no momento: Solução ótima local. Quando o algoritmo termina, espera-se que a solução ótima tenha sido encontrada: lguns problemas são resolvidos de de forma ótima. Outros apresentam soluções bem pobres. Exemplo : Cálculo do Trôco Exemplo : locação de tarefas Descrição: Seja E= {, 5,, 5, 5, } },, e M um valor positivo que representa o trôco. Estratégia Greedy: No passo i, i, escolher rr i i = j, j, tal tal que e j j M e e j- j- > M e subtrair e j j de de M para o próximo passo. É possível provar que a estratégia gulosa funciona neste caso. mesma estratégia funciona para E= {, 5,, } }? Descrição: Seja T= T= {(T, 5), (T, 8), 8), (T, ), ), (T, )}.. Considerar um único processador e alocação não preemptiva. Qual a melhor forma de de alocar essas tarefas para minimizar o tempo médio de de execução. Estratégia Greedy : : ordem de de chegada. Estratégia Greedy : : ordem crescente do do tempo de de execução. É possível provar que a estratégia sempre apresenta a solução ótima? Exemplo : Seleção de atividades O problema consiste em escolher entre atividades que competem por uso exclusivo de de um recurso em comum. Por exemplo, o uso de de uma sala de de aula. Conjunto de de atividades S={a,,.,, a n }. }. a iinecessita do do recurso durante o período [[ s i i,, ff i i )),em, que s i i = tempo inicial e ff i i = tempo final. Objetivo: selecionar o maior número possível de de atividades compatíveis (sem overlap de de períodos). Exemplo : Seleção de atividades ssumir que estão ordenadas de de forma crescente do do tempo final. () () C () E () D (5) F (6) G (7) H (8) Tempo

9 Exemplo : Seleção de atividades Exemplo : Seleção de atividades () Seleçãotividades(s, f) n length(s) {} j for i to n do if s i f j then {i} j i return C () () E () D (5) F (6) G (7) H (8) Tempo Exemplo : Seleção de atividades Exemplo : Seleção de atividades () () C () C () () () E () E () D (5) D (5) F (6) F (6) G (7) H (8) Tempo G (7) H (8) Tempo () Exemplo : Seleção de atividades Exemplo : Seleção de atividades () C () () E () D (5) F (6) () C () () E () D (5) F (6) G (7) H (8) Tempo G (7) H (8) Tempo C () ()

10 Exemplo : Seleção de atividades Exemplo : Seleção de atividades () () C () C () () () E () E () D (5) D (5) F (6) F (6) G (7) H (8) Tempo G (7) H (8) Tempo E () E Exemplo : Seleção de atividades Exemplo : Seleção de atividades () () C () C () () () E () E () D (5) D (5) F (6) F (6) G (7) H (8) Tempo G (7) H (8) Tempo D (5) E F (6) E Exemplo : Seleção de atividades Exemplo : Seleção de atividades () () C () C () () () E () E () D (5) D (5) F (6) F (6) G (7) H (8) Tempo G (7) H (8) Tempo G (7) E H (8) E

11 Exemplo : Seleção de atividades Exemplo : Seleção de atividades () C () () E () D (5) F (6) G (7) H (8) Tempo Como provar que a solução sempre produz uma solução ótima? Provar que existe uma solução ótima que começa com a atividade.. Mostrar que se se existir uma solução ótima que não utiliza a nossa estratégia gulosa, a nossa solução é tão boa quanto.. E H Elementos da Estratégia Gulosa Existem dois elementos que indicam que a estratégia gulosa pode ser utilizada com sucesso:.. Propriedade de de Escolha Gulosa: Uma solução ótima global pode ser obtida a partir de de escolhas locais ótimas... Sub-estrutura ótima: se se uma solução ótima contém dentro dela soluções ótimas para os os sub-problemas. O Problema da Mochila Fracionária S = {(item,, 8, 5), (item,, 5, ), (item,,, 5)} e W= R$5 R$ R$5 W = Kg 8 Kg 5 Kg Kg item item item Mochila O Problema da Mochila Fracionária Greedy : : maximizar o lucro a cada passo Greedy : (, /5, ) :: Lucro de R$ 8, O Problema da Mochila Fracionária Greedy : : conservar a capacidade Greedy : (, /, ) :: Lucro de R$ R$5 R$ R$5 W = Kg R$, R$5 R$ R$5 W = Kg R$6 R$5 R$5 8 Kg 5 Kg Kg 8 Kg 5 Kg Kg item item item Mochila item item item Mochila 5

12 O Problema da Mochila Fracionária lgoritmo Guloso para Mochila Fracionária Greedy : : maximiza lucro por unidade de de peso R$5 8 Kg R$ 5 Kg R$5 Kg W = Kg Greedy : (,, /) :: Lucro de R$,5 R$7,5 R$ MochilaFracionaria(L, P, W) objetos em ordem decrescente de l/p cap W i while p i cap do x i cap cap - p i i i + x i cap/p i for j i + to n do x j item item item Mochila Prova do Greedy Revendo a Estratégia Gulosa solução gulosa tem a seguinte cara: <,,,,,, c, c,,,,,, > > em que a seqüência de de s tem tamanho k-, e c <.. Observando dois itens consecutivos, se se x i i < x i + i + =.. idéia da daprova é partir de de uma solução ótima e transformála na nanossa solução gulosa: Seja <y <y,, y,,, y n > uma solução ótima. Se essa não é a solução gulosa, existe um iiem que y i i la < e y i+ i+ >.. Encontrar <y,, y y,,, y y n > mais parecido com x. x. Repetir o processo até alcançar a solução gulosa. Os algoritmos que utilizam a estratégia gulosa são simples e de de fácil implementação. bordagem top-down. spectos importantes: Custo de de uma solução. Objetivo do do problema. Escolha gulosa. lgoritmo Guloso Cálculo do Trôco lgoritmo Guloso Cálculo do Trôco CalculaTroco(M) C {, 5,, 5, } S soma while soma M do X maior valor de C soma + X M if item não existe then return sem solução S S {uma moeda de valor X} soma soma + X return S Lista de Candidatos CalculaTroco(M) C {, 5,, 5, } S soma while soma M do X maior valor de C soma + X M if item não existe then return sem solução S S {uma moeda de valor X} soma soma + X return S 6

13 lgoritmo Guloso Cálculo do Trôco lgoritmo Guloso Cálculo do Trôco Lista de elementos escolhidos CalculaTroco(M) C {, 5,, 5, } S soma while soma M do X maior valor de C soma + X M if item não existe then return sem solução S S {uma moeda de valor X} soma soma + X return S Função VIILIDDE CalculaTroco(M) C {, 5,, 5, } S soma while soma M do X maior valor de C soma + X M if item não existe then return sem solução S S {uma moeda de valor X} soma soma + X return S lgoritmo Guloso Cálculo do Trôco lgoritmo Guloso Cálculo do Trôco Função SOLUÇÃO CalculaTroco(M) C {, 5,, 5, } S soma while soma M do X maior valor de C soma + X M if item não existe then return sem solução S S {uma moeda de valor X} soma soma + X return S lgoritmoguloso(c) C conjunto de candidatos S while C e!solução(s) do X SELEÇÃO(C) C C\{X} if VIILIDDE(S {X}) then S S {X} if SOLUÇÃO(S) then return S else return não tem solução Código de Huffman O lgoritmo de Huffman Exemplo: rquivo de de. caracteres (a, (a, 5), (e, (e, 5), (i, (i, ), (s, (s, 7),(t, 5), 5), (b, (b, ), (n, (n, ) ) Usando SCII extendido (8 (8 bits): 8. bits Usando código fixo de de bits:. bits Usar código de de tamanho variável? Uma possível solução para o problema de de Compressão de de rquivos. Idéia é usar código de de tamanho variável. Uso de de código prefixo. Uso de de árvore binária Vamos assumir que o número de de caracteres é C. C. Manter uma floresta de de árvores. O peso de de uma árvore é a soma das freqüências de de suas folhas. C vezes, selecionar as as duas árvores de de menor peso e formar uma nova árvore. No início do do algoritmo, existem C árvores de de apenas um nó. No final temos apenas uma única árvore. árvore com o código de de Huffman. 7

14 a = e = i i = s s = t t = Exercício Problema dos Postos de de gasolina: Input: D = [d [d,d,d,...,d n ]]:: distâncias entre postos de de gasolina k :: autonomia (em km) do do tanque de de gasolina do do carro Output: Postos selecionados para abastecer o carro (o (o número de de paradas seja o menor possível) ssumir: i i n d i i k d i i é a distância entre postos i- i- e ii Inicia com o tanque cheio EncontraPostos(P) S Ø last for i = to n do if (d i + last > k) S S {p i- } last d i last last + d i return S Escolha da Propriedade Gulosa Subestrutura Ótima Seja S = {s {s,, s,,... s k } k } uma uma solução ótima. Suponha que que g seja seja a primeira parada determinada pelo pelo nosso algoritmo. Temos que que mostrar que que existe uma uma solução ótima com com a primeira parada sendo g. g. Se Se s = g, g, então S é essa solução. Se Se s g, g, como o nosso algoritmo escolha o posto mais distante possível, s está estáantes de de g. g. Podemos dizer que que S S = {{ g, g, s,,..., s k } k } é uma uma solução ótima: Observe que que S S = S. S. S S é válido (i.e. (i.e. não não vamos ficar ficar sem sem gasolina). Por Por definição da da escolha gulosa, podemos alcançar g. g. Como a distância entre g e s não não é maior do do que que a distância entre s e s,, temos combustível suficiente para para sair sair de de g para para s.. O resto de de S S é igual a S. S. Logo é uma uma resposta válida. Seja P o problema original com uma solução ótima S. S. pós parar no no posto g, g, a uma distância d i, i, o subproblema P P que resta de de d i+ i+ para d n é o mesmo problema, com a diferença da da cidade de de origem. Seja S S uma solução ótima para P. É fácil perceber que Custo(S) = Custo(S ) +.. Logo, uma solução ótima para P inclui uma solução ótima para P. 8

15 Motivação nálise e Técnicas de lgoritmos Jorge Figueiredo Números de Fibonacci Entrada: Um número inteiro n. Saída: O número de Fibonacci Fn, definido da seguinte forma: F =, F =, Fn = Fn- + Fn- para n. Solução clássica utiliza recursão Programação Dinâmica Fib(n) if n then return n return Fib(n ) + Fib(n - ) Sobre a Solução presentada Sobre a Solução presentada Sabemos provar a corretude do do algoritmo. nálise através da daresolução de de uma relação de de recorrência: T(n) = T(n ) ) + T(n ) ) + c O( n )) Solução ineficiente. Qual o motivo da daineficiência? F F5 F F F F F F F F F F F F F Sobre a Solução presentada Cálculo repetido, desnecessário!!! F5 inda Sobre Fibonacci Solução alternativa: Utilizar um array f[,...,..., n] n] para guardar os osvalores calculados. Inicialmente, ffcontém apenas símbolos especiais.. F F F F F F Fib(n) if f[n] then return f[n] if n then return f[n] n return f[n] Fib(n ) + Fib(n - ) F F F F F F F F

16 inda Sobre Fibonacci inda Sobre Fibonacci F5 F5 F F F F F F inda Sobre Fibonacci inda Sobre Fibonacci F5 F5 F F F F F F F F F F F F F F inda Sobre Fibonacci inda Sobre Fibonacci F5 F5 F F F F F F F F F F F F F F F F

17 inda Sobre Fibonacci inda Sobre Fibonacci F5 F5 F F F F F F F F F F F F F F F F inda Sobre Fibonacci inda Sobre Fibonacci F5 F5 F F F F F F F F F F F F F F F F inda Sobre Fibonacci inda Sobre Fibonacci F5 F5 F F F F F F F F F F F F F F F F 5

18 inda Sobre Fibonacci inda Sobre Fibonacci F F5 F Uma outra solução alternativa: Eliminar as as chamadas recursivas. Utilizar o array para armazenar dados calculados. Estratégia bottom-up. F F F F F F 5 Fib(n) f[] f[] for i to n do f[i] f[i ] + f[i - ] return f[n] nálise das Soluções lternativas É fácil identificar que Fib é O(n). Fib étambémo(n). é Tratar pilha de de recursão. bordagem utilizada: Encontrar função recursiva apropriada. dicionar memorização para armazenar resultados de de subproblemas. Determinar uma versão bottom-up, iterativa. Programação Dinâmica plicado quando recursão produz repetição dos mesmos subproblemas. Proposta: reusar computação. PD = DC + tabela. Versão bottom-up é mais compacta e fácil de de efetuar análise. Estratégia utilizada em problemas de de otimização. Fib é PROGRMÇÃO DINÂMIC!!!!! Exemplo: Número de Combinações Número de Combinações Entrada: Dois números inteiros n e r, em que n indica o número de elementos dos quais tenho que escolher r. Saída: O número possível de combinações de r itens. lgoritmo aseado em Divisão e Conquista Para escolher rritens de de n, n, podemos proceder de de duas formas: Escolher o primeiro item. Depois escolher r- r-itens dos n- n-itens restantes. Não escolher o primeiro item. Escolher, então, rritens dos n- n- itens restantes. Escolha(r, n) if r = ou n = r then return else return Escolha(r-, n-) + Escolha(r, n-)

19 nálise do lgoritmo DeC lgoritmo Utilizando Programação Dinâmica análise do do algoritmo requer a resolução da da seguinte relação de de recorrência: T(n) =.T(n-) + c. c. T(n) = O( n ). ). Da mesma forma que no no exemplo de de Fibonacci, essa solução faz cálculos repetidos. Solução: Programação Dinâmica. Escolha(r, n) for i to n-r do T[i, ] for i to r do T[i, i] for j to r do for i j+ to n-r+j do T[i, j] T[i-, j-] + T[i-, j] return T[n, r] Considerações sobre o lgoritmo PD Tabela pós o Preenchimento Inicial O(n.r) Duas partes: Primeira parte relacionada com o caso base: inicialização da da tabela. Segunda parte define como o restante da da tabela deve ser preenchida. Tabela: T[n, r]. r]. O valor armazenado na na célula T[i, j] j] indica o número possível de de combinações de de escolher jjitens dentre iiitens. n-r r n resultado Caminhamento e Padrão de Preenchimento Caracterização de PD n-r r i- j- j i + Quando a estratégia de de DeC gera um número grande de de problemas idênticos, recursão se se torna muito caro. Melhor armazenar as as soluções parciais em uma tabela. Como transformar DeC em PD: parte do do algoritmo que corresponde a conquista (recursão) deve ser substituída por olhada na na tabela. Em vez de de retornar um valor, armazená-lo na na tabela. Caso base para iniciar a tabela. Determinar padrão de de preenchimento do do restante da da tabela. n resultado 5

20 Quando plicar Programação Dinâmica plicar em problemas que, em princípio, parece requerer muito tempo para ser resolvido (em geral é de de ordem exponencial). Principais características: Princípio da daotimalidade (subproblemas ótimos): o valor ótimo global pode ser definido em termos dos valores ótimos dos subproblemas. Overlap de de Subproblemas: os ossubproblemas não são independentes. Existe um overlap entre eles (logo, devem ser construídos bottom-up). Exemplo: Mochila inária Considere n itens de de tamanhos s,, s,,...,..., s n.. Existe um subconjunto destes itens cuja soma total é exatamente S? s s s s s5 s6 s7 S Exemplo: Mochila inária Considere n itens de de tamanhos s,, s,,...,..., s n.. Existe um subconjunto destes itens cuja soma total é exatamente S? s s s s s5 s6 s7 S Exemplo: Mochila inária Podemos generalizar para situações em que temos iiitens e o tamanho da da mochila é j. j. Para saber se se retornamos verdadeiro, temos que investigar duas possibilidades: O O i-ésimo item é usado para completar o tamanho j. j. O O i-ésimo item não é utilizado para completar o tamanho j. j. jj é alcançado com i- i- itens. Solução: Utilizar uma tabela T[n, S] S] para armazenar TRUE se se é possível completar exatamente S com n primeiros elementos. T[i, j] j] = T[i, j j s i ] i ] ou ou T[i-, j] j] lgoritmo DeC: Mochila inária lgoritmo PD: Mochila inária Mochila(i, j) if i = then return (j=) else if Mochila(i-, j) then return true else if s i j then return Mochila(i-, j s i ) Mochila(n, S) T[, ] = true for j to S do T[, j] false for i to n do for j to S do T[i, j] T[i-, j] if j s i then T[i, j] T[i, j] v T[i-, j s i ] return T[n, S] 6

21 Programação Dinâmica Maior Subseqüência Comum (LCS) Mais eficiente do do que o método da daforça bruta, quando existe overlap de de subproblemas. Divisão-e-Conquista + memória. Características: Subestrutura ótima. Tabela. ottom-up. Maior Subseqüência Comum X= { C D }, Y= { D C } Maior Subseqüência comum é: X = C D Y = D C Solução para LCS solução usando PD Solução força bruta: comparar cada subseqüência de de X com os ossímbolos de de Y. Y. Se X X = m, m, Y Y = n: n: m subseqüências de de X Solução força bruta é O(n m )) LCS exibe subestrutura ótima: soluções de de subproblemas fazem parte da dasolução final. Existe melhor idéia? char LCS para prefixos de de X e Y Sejam X i, i, Y j j prefixos de de X e Y de de tamanhos iie jj respectivamente c[i,j] éo tamanhodalcs de de X i i e Y j j Logo, LCS de de X e Y vai ser guardado em c[m,n] Como definir uma solução recursiva para c[i,j]? Solução Recursiva Solução Recursiva c[ i, j ] + c[ i, j] = max( c[ i, j ], c[ i, j]) if x[ i] = y[ j], otherwise c[ i, j ] + c[ i, j] = max( c[ i, j ], c[ i, j]) if x[ i] = y[ j], otherwise Caso base: i i = j j = (substrings vazios de de X e Y) Y) Se X e/ou Y são strings vazios: para todo iie j: j: c[, j] j] = c[i,] = Primeiro Caso: x[i]=y[j]: mais um símbolo em X e Y confere. Logo, LCS para X i i e Y j j é igual ao aolcs de de X i- i- e Y i- i-,, mais.. 7

22 Solução Recursiva O lgoritmo c[ i, j ] + if x[ i] = y[ j], c[ i, j] = max( c[ i, j ], c[ i, j]) otherwise Segundo caso: x[i] y[j] Se os ossímbolos não casam, não podemos melhorar a nossa resposta: (i.e. max(lcs(x i, i, Y j- j- )) e LCS(X i- i-,y,y j )). j )). Por que não repetir LCS(X i-, Y j- )? LCS(X, Y) m length(x) n length(y) for i to m do c[i, ] for j to n do c[, j] for i to m do for j to n do if (X i == Y j ) then c[i, j] c[i-, j-] + else c[i, j] max(c[i-, j], c[i, j-]) return c[m, n] Exemplo Considere: X = C Y = DC Determine o tamanho da LCS de X e Y. i Exemplo j 5 Yj D C Xi C X = C; m = X = Y = DC; n = Y = 5 C DC Exemplo: caso base Exemplo: primeiro valor i j 5 Yj D C Xi C for i = to m c[i,] = for j = to n c[,j] = C DC i j 5 Yj D C Xi C if ( X i == Y j ) c[i,j] = c[i-,j-] + else c[i,j] = max( c[i-,j], c[i,j-] ) C DC 8

23 i j 5 Yj D C Xi C if ( X i == Y j ) c[i,j] = c[i-,j-] + else c[i,j] = max( c[i-,j], c[i,j-] ) C DC i j 5 Yj D C Xi C if ( X i == Y j ) c[i,j] = c[i-,j-] + else c[i,j] = max( c[i-,j], c[i,j-] ) C DC i j 5 Yj D C Xi i j 5 Yj D C Xi C C if ( X i == Y j ) c[i,j] = c[i-,j-] + else c[i,j] = max( c[i-,j], c[i,j-] ) C DC if ( X i == Y j ) c[i,j] = c[i-,j-] + else c[i,j] = max( c[i-,j], c[i,j-] ) C DC i j 5 Yj D C Xi i j 5 Yj D C Xi C C if ( X i == Y j ) c[i,j] = c[i-,j-] + else c[i,j] = max( c[i-,j], c[i,j-] ) C DC if ( X i == Y j ) c[i,j] = c[i-,j-] + else c[i,j] = max( c[i-,j], c[i,j-] ) C DC 9

24 i j 5 Yj D C Xi C if ( X i == Y j ) c[i,j] = c[i-,j-] + else c[i,j] = max( c[i-,j], c[i,j-] ) C DC i j 5 Yj D C Xi C if ( X i == Y j ) c[i,j] = c[i-,j-] + else c[i,j] = max( c[i-,j], c[i,j-] ) C DC i j 5 Yj D C Xi C i j 5 Yj D C Xi C if ( X i == Y j ) c[i,j] = c[i-,j-] + else c[i,j] = max( c[i-,j], c[i,j-] ) C DC if ( X i == Y j ) c[i,j] = c[i-,j-] + else c[i,j] = max( c[i-,j], c[i,j-] ) C DC i j 5 Yj D C Xi C if ( X i == Y j ) c[i,j] = c[i-,j-] + else c[i,j] = max( c[i-,j], c[i,j-] ) C DC i j 5 Yj D C Xi C if ( X i == Y j ) c[i,j] = c[i-,j-] + else c[i,j] = max( c[i-,j], c[i,j-] ) C DC

25 nálise do lgoritmo LCS Como encontrar a LCS Qual o tempo de de execução? O(m*n) cada c[i,j] é calculado em tempo constante, e existem m*n células Mesmo esquema usado no no problema da damochila Cada c[i,j] depende de de c[i-,j], c[i,j-] e c[i-, j-]. Podemos identificar como cada c[i,j] foi foiobtido: Por exemplo, c[i,j] = c[i-,j-] + = += Voltando ao nosso exemplo Sabemos que: c[ i, j ] + c[ i, j] = max( c[ i, j ], c[ i, j]) if x[ i] = y[ j], otherwise Começar de c[m,n] e retornar Sempre que c[i,j] = c[i-, j-]+, guardar x[i] (x[i] faz parte da LCS) Se i= or j= (retorno chega ao fim) saída é o conjunto de símbolos guardados em ordem inversa i j 5 Yj D C Xi C Problema: Multiplicação de Cadeia de Matrizes i j 5 Yj D C Xi C Seja a seqüência (cadeia) <,,,, n > de de n matrizes. Computar o produto n de de forma a minimizar o número de de multiplicações Duas matrizes e podem ser multiplicadas se se forem compatíveis Número de de colunas de de = Número de de linhas de de (p*q) * (q*r) C(p*r) O número de de multiplicações é p*q*r LCS (ordem inversa): C

26 Exemplo: <,,,, > (,, 5, 5, 5) (( ) ) )) **5 + *5*5 = = 75 ( ( ( )) )) *5*5 + **5 = = 75 Seja i i de de dimensão p i- i- *p *p i i Encontrar forma de de definir parênteses para minimizar o número de de multiplicações. Quantas formas diferentes? Ω( n ). ). Impraticável verificar todas as possibilidades Multiplicação de Duas Matrizes Qual a Idéia? Multiplica-Matrizes(, ) if colunas[] Linhas [] then ERRO else for i to Linhas[] do for j to Colunas[] do C[i, j] for k to Colunas[] do c[i, j] c[i, j] + [i,k].[k,j] return C Notação: i..j i..j = resultado da da avaliação de de i i i+ i+ j j (i (i j) j) Qualquer forma de de colocar parênteses em i i i+ i+ j j deve dividir a cadeia entre kk e k+ k+,, para algum inteiro k, k, i i k < jj Custo = custo de de computar i..k i..k + custo de de computar k+..j k+..j + custo de de multiplicar i..k i..k e k+..j k+..j sub-cadeia i i i+ i+ kk deve ter ter parentização ótima sub-cadeia k+ k+ i+ i+ j j deve ter ter parentização ótima Subestrutura Ótima Mínimo Custo_..6 + Custo_ p p 6 p 9 Suponha (( )( (( 5 ) 6 ))) (( 7 8 ) 9 ) Éótima então ( ) ( (( 5 ) 6 )) Deve ser ótima para 5 6 Solução Sub-problema: determinar o custo mínimo de de i i i+ i+ j j ( ( i i j j n) n) m[i..j] = número mínimo de de multiplicações para calcular a matriz i..j i..j s[i, j] j] = k, k, em que m[i, j] j] = m[i, k] k] + m[k+, j] j] + p i- i- p kk p j j senão, se ( ( )) (( 5 ) 6 ) Éótimapara 5 6 então (( ( )) (( 5 ) 6 )) (( 7 8 ) 9 ) Seria melhor do que (( )( (( 5 ) 6 ))) (( 7 8 ) 9 ), m [ i, j ] = min k < j { m [ i, k ] + m [ k +, j ] + p i se i = j p p se i < j k j

27 resposta está em m[, n]. n]. Necessidade de de Programação Dinâmica: overlap de de problemas. Caso base: m[i, i] i] =.. Calcular primeiro m[i, i+], depois m[i, i+], Caminhamento por diagonal. O(n ), Ω (n ) Θ(n ) running time Θ(n ) space 5*5*5= 65 l = l = **5= 5 Colocando os Parênteses s[i, j] j] armazena o valor de de k ótimo para i i i+ i+ j, j, dividindo a matriz em kk e k+ k+..n..n..s[..n]..s[..n] s[..n]+..n s[..n]+..n..s[..n]..s[..n]..s[,..s[, s[..n]] s[..n]] s[, s[, s[..n]]+..s[..n] s[..n]]+..s[..n] m[,5] = min m[,]+m[5,5] + 5** = = 75 m[,]+m[,5] + 5*5* = = 5

28 genda nálise e Técnicas de lgoritmos Jorge Figueiredo Conceitos ásicos O Problema das Rainhas Template Genérico Mochila inária acktracking and ranch-and-ound Jogo da Troca de olas Jogo da Troca de olas n bolas vermelhas e n bolas pretas Tabuleiro (uma linha) com n n + posições olas com a mesma cor em extremidades diferentes, e um espaço vazio separando o conjunto de de bolas diferentes. Movimentos possíveis: ola vermelha para a esquerda e preta para a direita Mover um espaço se se o espaço está vazio Pular sobre exatamente uma bola de de cor diferente, se se o espaço logo após a bola estiver vazio Problema do Labirinto Problema do Labirinto

29 Jogo do Resta Um O Que Estes Problemas Têm em Comum? Tomar uma série de de decisões entre várias opções. Cada decisão leva a um novo conjunto de de decisões. lguma(s) seqüência(s) de de decisões pode(m) conduzir a solução do do problema. Encontrar solução:.. Fazer uma lista com todos os os candidatos possíveis... Examinar todas as as respostas ou ou alguma delas... Retornar a solução. Problemas de de otimização Como Resolver? acktracking Estratégia para sistematicamente considerar a lista de de possíveis soluções, eliminando (explicitamente) a verificação de de uma boa parte dos possíveis candidatos. Pode ser considerado como uma variação de de DFS. Usa uma árvore implícita. Candidatos Restrições Força bruta: na na prática esta abordagem não é muito eficiente porque a lista de de candidatos é grande. Lixo Idéia Geral: Usando o Espaço de Solução Soluções representadas por n-tuplas ou ou vetores de de solução: <v <v,, v,,...,..., v n > Cada v i i é escolhido a partir de de um conjunto finito de de opções S i. i. Inicia com um vetor vazio. Em cada etapa o vetor é extendido com um novo valor. O novo vetor é então avaliado. Se Se não for for solução parcial, o último valor do do vetor é eliminado e outro candidato é considerado. Restrições Restrições Explícitas: correspondem às àsregras que restringem cada v i i em tomar valores de de um determinado conjunto. Está relacionado com a representação do do problema e as as escolhas possíveis. Restrições Implícitas: determinam como os osv i s i sse se relacionam entre si. si.

30 O Problema das 8 Rainhas Colocar 8 rainhas em um tabuleiro de de xadrez de de modo que nenhuma rainha ataque uma outra. Solução: uma 8-tupla <v <v,, v,,, v 8 > em que v i i indica a coluna da darainha i. i. Restrições Explícitas: S i i = {, {,,,,,, 8}, 8}, i i n. n. Restrições implícitas: Nenhum v i i pode ser igual ao aooutro. Duas rainhas não podem estar na namesma diagonal. Tamanho do do espaço solução: Força ruta: Com R.E.: Com R.I.: 8!. 8!. Soma de Subconjuntos Sejam n números positivos (W i, i, i i n) n) e um valor positivo M, M, achar todos os ossubconjuntos de de W i i cuja soma é M. M. Solução: uma k-tupla com os osíndices dos números escolhidos. Restrições Explícitas: v i i = {j {j j j é inteiro, j j n}. n}. Restrições Implícitas: v i i v j, j, i i j. j. Σ = M. M. v i i < v i+ i+,, i i < n. n. Geração da Árvore Exemplo: Problema das rainhas Para criar a árvore que representa o espaço solução fazemos:.. Começar da da raiz e gerar outros nós... Um nó nóque foi foi gerado e que não foi foi totalmente explorado édito é nó nóvivo... Um nó nócujos filhos estão sendo gerados é dito em expansão... Usar função de de poda para detonar a geração de de alguns filhos, se se for for o caso Um nó nómorto é aquele que foi foi podado ou ou todos os os filhos já já foram gerados. lgoritmo Genérico Mochila inária acktrack(v[..k]) v é um vetor promissor de tamanho k if v é solução then escreva v for cada vetor promissor w de tamanho k+ em que w[..k] = v[..k] do acktrack(w[..k+]) Considerar n tipos de de objetos (um número adequado de de cada objeto) Cada objeto iitem: valor (v (v i ) i ) e peso (w (w i ) i ) Mochila com capacidade W Para concretizar: W = 8 o ::(w=, v=) o ::(, (, 5) 5) o ::(, (, 6) 6) o ::(5, (5, )

31 Mochila inária: lgoritmo Mochila inária (Variação) ackpack(i, r) maior lucro usando objetos de tipos i até n e que não exceda r b for k i to n do if w[k] r then b max(b, v[k]+ ackpack(k, r w[k])) return b Um objeto de de cada tipo. Usar uma função extra que limita poda: Usar a estratégia gulosa para mochila fracionária para computar um limite superior de de lucro. Ordenar os os objetos por valor/peso. Duas possibilidades de de backtracking: Limite de de peso. Se Se não existe possibilidade da da melhor estimativa de de lucro ser maior do do que o melhor lucro já jáencontrado. Mochila inária (Variação) Mochila inária (Variação) Considere W= 6 6 e os os seguintes objetos: ii v ii w ii v i /w i /w ii R$5 R$5 R$ 5 R$ 6 R$5 9 R$ 5 R$ 5 R$ Valor = R$5 Peso = E.L = R$ 5 Valor = R$ Peso = E.L = R$ 5 Valor = R$ Peso = E.L = R$ 79 Mochila inária (Variação) ranch-and-ound R$75 8 R$ 5 R$5 R$ 5 R$ R$ 5 R$5 R$ 96 R$ R$ 79 X Variação de de backtracking. Necessidade de de função de de poda. Em alguns problemas, poda pode ser realizada mais cedo se se usarmos FS em vez de de DFS. n = acktracking + Função de de poda DFS + FS + PQ R$ 7 X R$85 R$ 85 R$75 8 R$ 85 R$75 8 R$ 75 max R$ 7 R$9 R$ 96 R$9 R$ 9 X X X X R$5 R$ R$ R$ 555 X

32 Mochila inária (Variação) Mochila inária (n) Considere W= 6 6 e os os seguintes objetos: R$ R$ 5 ii v ii w ii v i /w i /w ii R$5 R$5 R$ 5 R$ 6 R$5 9 R$ 5 R$ 5 R$ R$ 7 X R$75 8 R$ 5 R$75 8 R$ 85 X R$5 R$ 5 max R$ 7 R$9 R$ 96 R$5 R$ 96 R$9 R$ 9 R$5 R$ R$ R$ 555 X R$ R$ 79 X X X Problema de tribuição de Tarefas Problema de tribuição de Tarefas n nagentes para n tarefas. Cada agente deve executar exatamente uma única tarefa. Se ao ao agente iié atribuída a tarefa j, j, um custo C i,j i,j é identificado. Problema é atribuir tarefas aos agentes para minimizar o custo total de de executar as as n tarefas. 8 5 Usar n. Identificar função de de poda. Guiar FS (est-first Search) 8 5 C 7 9 D C D [58..7] Problema de tribuição de Tarefas Problema de tribuição de Tarefas C D [58..7] C D [58..7]

33 Problema de tribuição de Tarefas Problema de tribuição de Tarefas C D [58..7] C D [58..7] 6 ; 68 6 ; ; ; ; 6 65 ; Problema de tribuição de Tarefas Problema de tribuição de Tarefas C D [58..7] C D [58..6] 6 ; 68 ; ; c ; d 6 ; 68 ; ; c ; d 58 ; ; ; 6 ; ; c ; d 65 ; 6 ; ; c ; d Eficiência de acktracking e n Exercício: O Problema do Caixeiro Viajante Fatores que afetam a eficiência: tempo para gerar o próximo v k k ;; Cardinalidade de de S kk satisfazendo as as restrições; tempo de de execução da da função de de poda; Cardinalidade de de S kk satisfazendo a função de de poda. Uma boa função de de poda reduz substancialmente o número de de nodos considerados. Existe um tradeoff: uma boa função de de poda versus o tempo de de avaliá-la. Para estimar o número de de nodos gerados, podemos usar nálise Monte-Carlo (simulação estatística). 6

34 Exercício: O Problema do Caixeiro Viajante 7

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos divisão. divisão. combina. combina. Jorge Figueiredo, DSC/UFCG

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos divisão. divisão. combina. combina. Jorge Figueiredo, DSC/UFCG Agena Análise e Técnicas e Algoritmos Conceitos Básicos Template Genérico Exemplos Jorge Figueireo Divisão e Conquista Motivação Pegar um problema e e entraa grane. Quebrar a entraa em peaços menores (DIVISÃO.

Leia mais

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.1. Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.1. Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005. genda nálise e Técnicas de lgoritmos Jorge Figueiredo onceitos ásicos O Problema das Rainhas Template Genérico Mochila inária acktracking and ranch-and-ound Jogo da Troca de olas Jogo da Troca de olas

Leia mais

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15

Análise e Síntese de Algoritmos. Programação Dinâmica CLRS, Cap. 15 Análise e Síntese de Algoritmos Programação Dinâmica CLRS, Cap. 15 Contexto Revisões [CLRS, Cap. 1-10] Algoritmos em Grafos [CLRS, Cap. 22-26] Algoritmos elementares Árvores abrangentes Caminhos mais curtos

Leia mais

Problema de seleção de atividades. Aula 14. Exemplo. Algoritmos Gulosos. Algoritmos Gulosos. Intervalo: par ordenado de números

Problema de seleção de atividades. Aula 14. Exemplo. Algoritmos Gulosos. Algoritmos Gulosos. Intervalo: par ordenado de números Problema de seleção de atividades Aula 14 Algoritmos Gulosos Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Intervalo: par ordenado de números [s[i],f[i]): início e fim do intervalo

Leia mais

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.1. Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.1. Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005. Agenda Análise e Técnicas de Algoritmos Jorge Figueiredo Problemas de de otimização Conceitos ásicos O Problema da da Mochila Fracionária Template Genérico xemplos: Código de de Huffman Algoritmos Gulosos

Leia mais

PROGRAMAÇÃO DINÂMICA

PROGRAMAÇÃO DINÂMICA PROGRAMAÇÃO DINÂMICA Programação dinâmica é tipicamente aplicada para problemas de otimização. O desenvolvimento de um algoritmo de programação dinâmica pode ser divido em 4 etapas. Caracterizar uma solução

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Principais paradigmas do projeto de algoritmos - Recursividade - Tentativa e erro - Divisão e Conquista - Programação dinâmica - Algoritmos Gulosos e de Aproximação

Leia mais

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( ) Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista (2.1-2.2) DECOM/UFOP 2013/1 5º. Período Anderson Almeida Ferreira Adaptado do material desenvolvido por Andréa Iabrudi

Leia mais

Programação Dinâmica. Prof. Anderson Almeida Ferreira. Adaptado do material elaborado por Andrea Iabrudi Tavares

Programação Dinâmica. Prof. Anderson Almeida Ferreira. Adaptado do material elaborado por Andrea Iabrudi Tavares Programação Dinâmica Prof. Anderson Almeida Ferreira Adaptado do material elaborado por Andrea Iabrudi Tavares Programação Dinâmica 1950, Bellman Evitar recálculos dos subproblemas em comum Menor para

Leia mais

Programação Dinâmica. Prof. Anderson Almeida Ferreira

Programação Dinâmica. Prof. Anderson Almeida Ferreira Programação Dinâmica Prof. Anderson Almeida Ferreira Programação Dinâmica 1950, Bellman Evitar recálculos dos subproblemas em comum Menor para maior (bottom-up) Tabelas ou memorização É uma técnica de

Leia mais

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante).

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante). Divisão e Conquista Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 27 Divisão e Conquista É uma técnica para resolver problemas (veremos outras técnicas mais adiante). Consiste em 3 passos: Dividir

Leia mais

Fernando Lobo. Algoritmos e Estrutura de Dados. Outra técnica de concepção de algoritmos, tal como Divisão e Conquista.

Fernando Lobo. Algoritmos e Estrutura de Dados. Outra técnica de concepção de algoritmos, tal como Divisão e Conquista. Programação Dinâmica Fernando Lobo Algoritmos e Estrutura de Dados 1 / 56 Programação Dinâmica Outra técnica de concepção de algoritmos, tal como Divisão e Conquista. O termo Programação Dinâmica é um

Leia mais

Programação dinâmica

Programação dinâmica Programação dinâmica CLRS 15.2 15.3 = recursão com tabela = transformação inteligente de recursão em iteração Algoritmos p. 1 Multiplicação iterada de matrizes Se A é p q e B é q r então AB é p r. (AB)[i,j]

Leia mais

Desafios de Programação

Desafios de Programação Desafios de Programação 2018.1 Programação Dinâmica É um método de projeto de algoritmos que utiliza a memorização para melhorar a eficiência de um algoritmo. Método parecido com o de divisão e conquista

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 05 Técnicas de Projeto de Algoritmos (Programação Dinâmica) Edirlei Soares de Lima Estratégias de Projeto de Algoritmos Força Bruta (Brute Force)

Leia mais

Otimização Combinatória - Parte 4

Otimização Combinatória - Parte 4 Graduação em Matemática Industrial Otimização Combinatória - Parte 4 Prof. Thiago Alves de Queiroz Departamento de Matemática - CAC/UFG 2/2014 Thiago Queiroz (DM) Parte 4 2/2014 1 / 33 Complexidade Computacional

Leia mais

Algoritmos para Automação e Sistemas. Programação Dinâmica. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

Algoritmos para Automação e Sistemas. Programação Dinâmica. Universidade Federal do Amazonas Departamento de Eletrônica e Computação Algoritmos para Automação e Sistemas Programação Dinâmica Universidade Federal do Amazonas Departamento de Eletrônica e Computação Roteiro Programação Dinâmica Problemas de Otimização Linha de Montagem

Leia mais

Análise de algoritmos

Análise de algoritmos Análise de algoritmos Introdução à Ciência de Computação II Baseados nos Slides do Prof. Dr. Thiago A. S. Pardo Análise de algoritmos Existem basicamente 2 formas de estimar o tempo de execução de programas

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Algoritmos Pontifícia Universidade Católica de Minas Gerais harison@pucpcaldas.br 26 de Maio de 2017 Sumário A complexidade no desempenho de Quando utilizamos uma máquina boa, ela tende a ter

Leia mais

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo ( Análise de Problemas Recursivos Algoritmos e Estruturas de Dados 2 2017-1 Flavio Figueiredo (http://flaviovdf.github.io) 1 Lembrando de Recursividade Procedimento que chama a si mesmo Recursividade permite

Leia mais

Aula prática 5. Funções Recursivas

Aula prática 5. Funções Recursivas Programação Funcional UFOP DECOM 2014.1 Aula prática 5 Funções Recursivas Resumo Definições recursivas são comuns na programação funcional. Nesta aula vamos aprender a definir funções recursivas. Sumário

Leia mais

Backtracking. Túlio Toffolo Marco Antônio Carvalho BCC402 Aula 10 Algoritmos e Programação Avançada

Backtracking. Túlio Toffolo  Marco Antônio Carvalho BCC402 Aula 10 Algoritmos e Programação Avançada Backtracking Túlio Toffolo www.toffolo.com.br Marco Antônio Carvalho marco.opt@gmail.com BCC402 Aula 10 Algoritmos e Programação Avançada Backtracking Backtracking é um refinamento do algoritmo de busca

Leia mais

Introdução Paradigmas

Introdução Paradigmas Introdução Paradigmas Recursividade Algoritmos tentativa e erro Divisão e conquista Programação dinâmica Algoritmos gulosos Algoritmos aproximados 1 Introdução O projeto de algoritmos requer abordagens

Leia mais

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I BCC202 - Estrutura de Dados I Aula 13: Ordenação: MergeSort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes Email: reifortes@iceb.ufop.br

Leia mais

Comparação com Divisão e Conquista

Comparação com Divisão e Conquista Programação Dinâmica Programação Dinâmica Fernando Lobo Algoritmos e Estrutura de Dados II Outra técnica de concepção de algoritmos, tal como Divisão e Conquista ou Estratégias Greedy. O termo Programação

Leia mais

Programação Dinâmica. Prof. Marcio Delamaro ICMC/USP

Programação Dinâmica. Prof. Marcio Delamaro ICMC/USP Programação Dinâmica Prof. Marcio Delamaro ICMC/USP Características Resolve problemas combinando soluções para subproblemas Características Resolve problemas combinando soluções para subproblemas Opa!!!

Leia mais

O termo Programação Dinâmica é um bocado infeliz.

O termo Programação Dinâmica é um bocado infeliz. Programação Dinâmica Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 18 Programação Dinâmica Outra técnica de concepção de algoritmos, tal como Divisão e Conquista ou Estratégias Greedy. O termo Programação

Leia mais

Divisão e conquista. Eficiência de divisão e conquista

Divisão e conquista. Eficiência de divisão e conquista Divisão e conquista Divisão: resolver recursivamente problemas mais pequenos (até caso base) Conquista: solução do problema original é formada com as soluções dos subproblemas á divisão quando o algoritmo

Leia mais

Referências e materiais complementares desse tópico

Referências e materiais complementares desse tópico Notas de aula: Análise de Algoritmos Centro de Matemática, Computação e Cognição Universidade Federal do ABC Profa. Carla Negri Lintzmayer Programação Dinâmica (Última atualização: 6 de maio de 2019) Referências

Leia mais

Recursividade Exaustiva e Backtracking

Recursividade Exaustiva e Backtracking Universidade Federal do Espírito Santo Centro de Ciências Agrárias CCA UFES Departamento de Computação Recursividade Exaustiva e Tópicos Especiais em Programação Site: http://jeiks.net E-mail: jacsonrcsilva@gmail.com

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos Complexidade de Algoritmos Prof. Diego Buchinger diego.buchinger@outlook.com diego.buchinger@udesc.br Prof. Cristiano Damiani Vasconcellos cristiano.vasconcellos@udesc.br Abordagens para Resolução de Problemas

Leia mais

Divisão-e-Conquista ( ) CAL ( ) MIEIC/FEUP. ./rr (1) Técnicas de Concepção de Algoritmos

Divisão-e-Conquista ( ) CAL ( ) MIEIC/FEUP. ./rr (1) Técnicas de Concepção de Algoritmos 1 Técnicas de Concepção de Algoritmos (1ª parte): divisão e conquista R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes CAL, MIEIC, FEUP Fevereiro de 2011 2 Divisão e Conquista (divide and

Leia mais

Divisão e conquista. Há divisão quando o algoritmo tem pelo menos 2 chamadas recursivas no corpo

Divisão e conquista. Há divisão quando o algoritmo tem pelo menos 2 chamadas recursivas no corpo Divisão e conquista Divisão: resolver recursivamente problemas mais pequenos (até caso base) Conquista: solução do problema original é formada com as soluções dos subproblemas á divisão quando o algoritmo

Leia mais

Técnicas de Projeto de Algoritmos

Técnicas de Projeto de Algoritmos UNIVERSIDADE NOVE DE JULHO - UNINOVE Pesquisa e Ordenação Técnicas de Projeto de Algoritmos Material disponível para download em: www.profvaniacristina.com Profa. Vânia Cristina de Souza Pereira 03 _ Material

Leia mais

ANÁLISE DE ALGORITMOS

ANÁLISE DE ALGORITMOS ANÁLISE DE ALGORITMOS Paulo Feofiloff Instituto de Matemática e Estatística Universidade de São Paulo agosto 2009 Introdução P. Feofiloff (IME-USP) Análise de Algoritmos agosto 2009 2 / 102 Introdução

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 03 Técnicas de Projeto de Algoritmos (Divisão e Conquista) Edirlei Soares de Lima Estratégias de Projeto de Algoritmos Força Bruta (Brute Force)

Leia mais

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches CT-234 Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural Carlos Alberto Alonso Sanches CT-234 2) Algoritmos recursivos Indução matemática, recursão, recorrências Indução matemática Uma

Leia mais

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos. Edson Prestes Edson Prestes Programação Dinâmica A programação dinâmica costuma ser aplicada a problemas de otimização resultando, em geral, em algoritmos mais eficientes que os mais diretos. Esse método é útil quando

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Professor Ariel da Silva Dias Algoritmos Divisão e Conquista Construção incremental Resolver o problema para um sub-conjunto dos elementos de entrada; Então, adicionar

Leia mais

Algoritmos e Estruturas de Dados I Linguagem C

Algoritmos e Estruturas de Dados I Linguagem C Algoritmos e Estruturas de Dados I (DCC/003) Algoritmos e Estruturas de Dados I Linguagem C Aula Tópico 11 Recursividade 1 Recursão Na linguagem C, uma função pode chamar outra função. A função main()

Leia mais

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35 INE5603 Introdução à POO Prof. A. G. Silva 25 de setembro de 2017 Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de 2017 1 / 35 Baseado em materiais da Recursividade Unisinos, Cesar Tacla (UTFPR),

Leia mais

Paradigmas de Projetos de Algoritmos

Paradigmas de Projetos de Algoritmos Paradigmas de Projetos de Algoritmos Luciana Assis 9 de junho de 2016 Luciana Assis (UFVJM) 9 de junho de 2016 1 / 36 1 Introdução 2 Força Bruta 3 Abordagem Incremental ou Construtiva 4 Recursão 5 Divisão

Leia mais

Teoria dos Grafos Aula 17

Teoria dos Grafos Aula 17 Teoria dos Grafos Aula 17 Aula passada Problema da soma do subconjunto (subset sum) Programação dinâmica Problema da mochila Aula de hoje Alinhamento de sequências Programação dinâmica Caminho mais curto

Leia mais

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (DPV 5; CLRS 4)

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (DPV 5; CLRS 4) 1 Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (DPV 5; CLRS 4) DECOM/UFOP 2013/1 5º. Período Anderson Almeida Ferreira Adaptado do material de Andréa Iabrudi Tavares BCC241/2012-2 3 Comparação

Leia mais

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

Ordenação: MergeSort. Prof. Túlio Toffolo  BCC202 Aula 14 Algoritmos e Estruturas de Dados I Ordenação: MergeSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 14 Algoritmos e Estruturas de Dados I DIVISÃO E CONQUISTA Motivação É preciso revolver um problema com uma entrada grande

Leia mais

AULA 15. Algoritmos p.600/637

AULA 15. Algoritmos p.600/637 AULA 15 Algoritmos p.600/637 Programação dinâmica CLRS 15.1 15.3 = recursão com tabela = transformação inteligente de recursão em iteração Algoritmos p.601/637 Programação dinâmica "Dynamic programming

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/34 Introdução Técnica de Projeto de Algoritmos utilizada para Problemas de Otimização; Idéia:

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Dividir e Conquistar IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/83 Projeto de Algoritmos por Divisão

Leia mais

Aula 20: Revisão Otimização Linear e Inteira Túlio A. M. Toffolo

Aula 20: Revisão Otimização Linear e Inteira Túlio A. M. Toffolo Aula 20: Revisão Otimização Linear e Inteira Túlio A. M. Toffolo http://www.toffolo.com.br BCC464 / PCC174 Departamento de Computação - UFOP Breve Revisão Programação Linear vs Programação Inteira Modelagem

Leia mais

Método Guloso. Troco mínimo. Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) junho/2012. Troco mínimo. Troco mínimo

Método Guloso. Troco mínimo. Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) junho/2012. Troco mínimo. Troco mínimo Notas de aula da disciplina IME - ALGORITMOS E ESTRUTURAS DE DADOS II Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) Troco mínimo Dados os tipos de moedas de um país, determinar o número mínimo

Leia mais

n Programação Dinâmica n Exemplo: Sequência de Fibonnaci n Problemas de Otimização n Multiplicação de Matrizes n Principios de Programação Dinâmica

n Programação Dinâmica n Exemplo: Sequência de Fibonnaci n Problemas de Otimização n Multiplicação de Matrizes n Principios de Programação Dinâmica Proeto e Análise e Algoritmos Altigran Soares a Silva Universiae Feeral o Amazonas Departamento e Ciência a Computação Roteiro Exemplo: Sequência e Fibonnaci Problemas e Otimização Multiplicação e Matrizes

Leia mais

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser executado 1 Fazendo estimativas e simplificações... O número

Leia mais

Técnicas de Desenho de Algoritmos

Técnicas de Desenho de Algoritmos Técnicas de Desenho de Algoritmos Mudança de ênfase: da implementação de algoritmos para o desenho de algoritmos A ver: 5 tipos de algoritmos abordagem ao problema exemplos complexidade em tempo e espaço

Leia mais

SCC0601 Projeto de Algoritmos. Recursão

SCC0601 Projeto de Algoritmos. Recursão SCC0601 Projeto de Algoritmos Recursão Definição Uma função é dita recursiva quando é definida em seus próprios termos, direta ou indiretamente Dicionário Michaelis: ato ou efeito de recorrer Recorrer:

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 01 Complexidade de Algoritmos Edirlei Soares de Lima O que é um algoritmo? Um conjunto de instruções executáveis para resolver um problema (são

Leia mais

Classes, Herança e Interfaces

Classes, Herança e Interfaces Escola de Artes, Ciências e Humanidades EACH-USP ACH2002 Introdução à Ciência da Computação II Professor: Delano Medeiros Beder revisada pelo professor: Luciano Digiampietri EACH Segundo Semestre de 2011

Leia mais

Luís Fernando Schultz Xavier da Silveira. 12 de maio de 2010

Luís Fernando Schultz Xavier da Silveira. 12 de maio de 2010 Monóides e o Algoritmo de Exponenciação Luís Fernando Schultz Xavier da Silveira Departamento de Informática e Estatística - INE - CTC - UFSC 12 de maio de 2010 Conteúdo 1 Monóides Definição Propriedades

Leia mais

CAL ( ) MIEIC/FEUP Técnicas de Concepção de Algoritmos, CAL MIEIC/FEUP, Fev. de Técnicas de Concepção de Algoritmos. .

CAL ( ) MIEIC/FEUP Técnicas de Concepção de Algoritmos, CAL MIEIC/FEUP, Fev. de Técnicas de Concepção de Algoritmos. . 1 Técnicas de Concepção de Algoritmos (1ª parte): algoritmos gananciosos R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes CAL, MIEIC, FEUP Fevereiro de 2011 2 Algoritmos gananciosos (greedy

Leia mais

Técnicas de análise de algoritmos

Técnicas de análise de algoritmos CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Técnicas de análise de algoritmos Algoritmos e Estruturas de Dados I Natália Batista https://sites.google.com/site/nataliacefetmg/ nataliabatista@decom.cefetmg.br

Leia mais

Prova 1 PMR3201 Computação para Automação 1o. semestre 2016 Prof. Thiago de Castro Martins

Prova 1 PMR3201 Computação para Automação 1o. semestre 2016 Prof. Thiago de Castro Martins Prova 1 PMR3201 Computação para Automação 1o. semestre 2016 Prof. Thiago de Castro Martins 1. (25 pontos) A listagem a seguir mostra o código de uma função que converte uma cadeia de caracteres com a representação

Leia mais

Abordagens para Resolução de Problemas

Abordagens para Resolução de Problemas Abordagens para Resolução de Problemas UDESC - Universidade do Estado de Santa Catarina Departamento de Ciência da Computação CAL - Complexidade de Algoritmos Teodoro Alberto Borges Junior Abordagens para

Leia mais

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (5)

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (5) 1 Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (5) DECOM/UFOP 2012/2 5º. Período Anderson Almeida Ferreira Adaptado do material de Andréa Iabrudi Tavares BCC241/2012-2 3 Algoritmos Gulosos

Leia mais

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 3 Conceitos Básicos de Algoritmos Prof. Tiago A. E. Ferreira Definição de Algoritmo Informalmente... Um Algoritmo é qualquer procedimento computacional bem definido

Leia mais

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/30 3 - INDUÇÃO E RECURSÃO 3.1) Indução Matemática 3.2)

Leia mais

Introdução a Algoritmos Parte 08

Introdução a Algoritmos Parte 08 Universidade Federal do Vale do São Francisco Curso de Engenharia de Computação Introdução a Algoritmos Parte 08 (Baseado no Material do Prof. Marcelo Linder) Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br

Leia mais

Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante

Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante Programação Dinâmica I SCC0210 Algoritmos Avançados (2/2011) Lucas Schmidt Cavalcante Introdução Soma máxima de uma subsequência contígua Problema do troco Quantidade de formas de dar troco Problema da

Leia mais

QUESTÕES DE PROVAS ANTIGAS

QUESTÕES DE PROVAS ANTIGAS CT-24 QUESTÕES DE PROVAS ANTIGAS ) Preencha a tabela abaixo com Î ou Ï: ω(log n) Θ(n) O(n log n) Ω(n 2 ) o(n ) 6n + 2n 2 + 2.log n + 4n + n.log n + log n 2) Dada a árvore binária abaixo, escreva os seus

Leia mais

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira Lista de exercícios sobre contagem de operações Prof. João B. Oliveira 1. metodo m ( Vetor V ) int i, res = 0; para i de 1 a V.size res = res + V[i]; return res; Soma de elementos de um vetor, O( ). 2.

Leia mais

Programação de Computadores II TCC

Programação de Computadores II TCC Programação de Computadores II TCC-00.174 Profs.: Leandro A. F. Fernandes (Turma A1) & Marcos Lage (Turma B1) (Turma A1) www.ic.uff.br/~laffernandes (Turma B1) www.ic.uff.br/~mlage Conteúdo: Material elaborado

Leia mais

Problemas de otimização

Problemas de otimização Problemas de otimização Problemas de decisão: Existe uma solução satisfazendo certa propriedade? Resultado: sim ou não Problemas de otimização: Entre todas as soluções satisfazendo determinada propriedade,

Leia mais

CIC 110 Análise e Projeto de Algoritmos I

CIC 110 Análise e Projeto de Algoritmos I CIC 110 Análise e Projeto de Algoritmos I Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá Algoritmos Gulosos AULA 06 Algoritmos Gulosos Um algoritmo guloso constrói uma solução para

Leia mais

Recursividade, Tentativa e Erro

Recursividade, Tentativa e Erro Recursividade, Tentativa e Erro Túlio Toffolo www.toffolo.com.br Marco Antônio Carvalho marco.opt@gmail.com BCC402 Aula 07 Algoritmos e Programação Avançada Na aula anterior Prova 2 Na aula de hoje Técnicas

Leia mais

14 Projeto de Algoritmos: paradigmas SCC201/501 - Introdução à Ciência de Computação II

14 Projeto de Algoritmos: paradigmas SCC201/501 - Introdução à Ciência de Computação II 14 Projeto de Algoritmos: paradigmas SCC201/501 - Introdução à Ciência de Computação II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP contém material

Leia mais

Programação I Aula 16 Mais exemplos de recursão

Programação I Aula 16 Mais exemplos de recursão Programação I Aula 16 Mais exemplos de recursão Pedro Vasconcelos DCC/FCUP 2018 Pedro Vasconcelos (DCC/FCUP) Programação I Aula 16 Mais exemplos de recursão 2018 1 / 27 Nesta aula 1 Desenhar árvores 2

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 02 Técnicas de Projeto de Algoritmos (Força Bruta) Edirlei Soares de Lima Tipos Importantes de Problemas Problemas de Ordenação: Reorganizar

Leia mais

Algoritmos Combinatórios: Backtracking

Algoritmos Combinatórios: Backtracking lucia@site.uottawa.ca UFSC, Fevereiro, 2010 Problema da Mochila Problema da Mochila Problema da Mochila (Otimização) Instância: Lucros p 0, p 1,..., p n 1 Pesos w 0, w 1,..., w n 1 Capacidade da mochila

Leia mais

Análise de Algoritmos Parte 4

Análise de Algoritmos Parte 4 Análise de Algoritmos Parte 4 Túlio Toffolo tulio@toffolo.com.br www.toffolo.com.br BCC202 Aula 07 Algoritmos e Estruturas de Dados I Como escolher o algoritmo mais adequado para uma situação? (continuação)

Leia mais

Aula 13: Branch-and-bound

Aula 13: Branch-and-bound Aula 13: Branch-and-bound Otimização Linear e Inteira Túlio A. M. Toffolo http://www.toffolo.com.br BCC464/PCC174 2018/2 Departamento de Computação UFOP Previously... Modelagem em PI / Problemas Combinatórios

Leia mais

ALGORITMOS AVANÇADOS UNIDADE I Análise de Algoritmo - Notação O. Luiz Leão

ALGORITMOS AVANÇADOS UNIDADE I Análise de Algoritmo - Notação O. Luiz Leão Luiz Leão luizleao@gmail.com http://www.luizleao.com Conteúdo Programático 1.1 - Algoritmo 1.2 - Estrutura de Dados 1.2.1 - Revisão de Programas em C++ envolvendo Vetores, Matrizes, Ponteiros, Registros

Leia mais

Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica. Prof. Humberto Brandão

Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica. Prof. Humberto Brandão Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica Prof. Humberto Brandão humberto@bcc.unifal-mg.edu.br Universidade Federal de Alfenas versão da aula: 0.3 Programação Dinâmica

Leia mais

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Medida do Tempo de Execução de um Programa David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Classes de Comportamento Assintótico Se f é uma função de complexidade para um algoritmo F, então

Leia mais

Hashing: conceitos. Hashing

Hashing: conceitos. Hashing Hashing: conceitos hashing é uma técnica conhecida como espalhamento, mapeamento ou randomização que tenta distribuir dados em posições aleatórias de uma tabela (array) associa cada objeto (de um determinado

Leia mais

Programação Dinâmica Partição de Inteiros

Programação Dinâmica Partição de Inteiros Notas de aula da disciplina IME -8 ALGORITMOS E ESTRUTURAS DE DADOS II Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) abril/9 Partição de Inteiros Dado n inteiro, determinar o número de maneiras

Leia mais

Paradigmas de Projeto de Algoritmos

Paradigmas de Projeto de Algoritmos Projeto de Algoritmos Cap.2 Paradigmas de Projeto de Algoritmos 1 Paradigmas de Projeto de Algoritmos indução, recursividade, algoritmos tentativa e erro, Paradigmas de Projeto de Algoritmos divisão e

Leia mais

Paradigmas de Projeto de Algoritmos

Paradigmas de Projeto de Algoritmos Projeto de Algoritmos Cap.2 Paradigmas de Projeto de Algoritmos 1 Paradigmas de Projeto de Algoritmos indução, recursividade, Paradigmas de Projeto de Algoritmos algoritmos tentativa e erro, divisão e

Leia mais

Programação Estruturada

Programação Estruturada Programação Estruturada Recursão Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Recursão Recursão 1 Recursão 2

Leia mais

Paradigmas de Projeto de Algoritmos

Paradigmas de Projeto de Algoritmos Paradigmas de Projeto de Algoritmos Última alteração: 10 de Outubro de 2006 Transparências elaboradas por Charles Ornelas, Leonardo Rocha, Leonardo Mata e Nivio Ziviani Projeto de Algoritmos Cap.2 Paradigmas

Leia mais

Problema da Mochila Booleana: Uma Solução Usando Programação Dinâmica. Gabriel Rosa Guilherme Alves

Problema da Mochila Booleana: Uma Solução Usando Programação Dinâmica. Gabriel Rosa Guilherme Alves Problema da Mochila Booleana: Uma Solução Usando Programação Dinâmica Gabriel Rosa Guilherme Alves Agenda O problema, definição e exemplo Construindo uma solução... Expressão recursiva Algoritmo recursivo

Leia mais

Divisão e Conquista: Par de Pontos mais Próximo

Divisão e Conquista: Par de Pontos mais Próximo Divisão e Conquista: Par de Pontos mais Próximo Fernando Lobo Algoritmos e Estrutura de Dados II 1 / 18 Divisão e Conquista (cont.) Problema: Dado um conjunto de pontos no plano, obter o par de pontos

Leia mais

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas Processamento e Otimização de Consultas Banco de Dados Motivação Consulta pode ter sua resposta computada por uma variedade de métodos (geralmente) Usuário (programador) sugere uma estratégia para achar

Leia mais

MC102 Aula 26. Instituto de Computação Unicamp. 17 de Novembro de 2016

MC102 Aula 26. Instituto de Computação Unicamp. 17 de Novembro de 2016 MC102 Aula 26 Recursão Instituto de Computação Unicamp 17 de Novembro de 2016 Roteiro 1 Recursão Indução 2 Recursão 3 Fatorial 4 O que acontece na memória 5 Recursão Iteração 6 Soma em um Vetor 7 Números

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos Complexidade de Algoritmos O que é um algoritmo? Sequência bem definida e finita de cálculos que, para um dado valor de entrada, retorna uma saída desejada/esperada. Na computação: Uma descrição de como

Leia mais

RESOLUÇÃO DCC-UFRJ MATEMÁTICA COMBINATÓRIA 2006/2 PROVA Considere a soma. S n = n 2 n 1

RESOLUÇÃO DCC-UFRJ MATEMÁTICA COMBINATÓRIA 2006/2 PROVA Considere a soma. S n = n 2 n 1 DCC-UFRJ MATEMÁTICA COMBINATÓRIA 2006/2 PROVA 1 1. Considere a soma S n = 1 2 0 + 2 2 1 + 3 2 2 + + n 2 n 1. Mostre, por indução finita, que S n = (n 1)2 n + 1. Indique claramente a base da indução, a

Leia mais

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013 Lista 1 - PMR2300 Fabio G. Cozman 3 de abril de 2013 1. Qual String é impressa pelo programa: p u b l i c c l a s s What { p u b l i c s t a t i c void f ( i n t x ) { x = 2 ; p u b l i c s t a t i c void

Leia mais

AED2 - Aula 11 Problema da separação e quicksort

AED2 - Aula 11 Problema da separação e quicksort AED2 - Aula 11 Problema da separação e quicksort Projeto de algoritmos por divisão e conquista Dividir: o problema é dividido em subproblemas menores do mesmo tipo. Conquistar: os subproblemas são resolvidos

Leia mais

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1 Na aula anterior Prova 2 Na aula de hoje Técnicas básicas de contagem; Tentativa e Erro; Recursividade.

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 04 Técnicas de Projeto de Algoritmos (Método Guloso) Edirlei Soares de Lima Estratégias de Projeto de Algoritmos Força Bruta (Brute Force) Dividir

Leia mais