Programação Dinâmica Partição de Inteiros
|
|
|
- Washington Castilho
- 6 Há anos
- Visualizações:
Transcrição
1 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 de particionamento de n. Exemplo : n = Exemplo : n = 6 maneiras distintas: maneiras distintas: Partição de Inteiros Formulação recursiva: dado n, T(n, p) = número de partições onde a maior parcela p T(n, p) =, se (n < ) ou (n > e p = ) T(n, p) =, se (n = ) T(n, p) = T(n p, p) + T(n, p - ), n >, p > Procura-se obter T(n, n). Pode-se implementar a recursão com memorização. Partição de Inteiros T(n, p) =, se (n < ) ou (n >, p = ) T(n, p) =, se (n = ) T(n, p) = T(n p, p) + T(n, p - ), n >, p > Quer-se obter T(n, n). A idéia da programação dinâmica é evitar a recursão, de forma análoga à memorização, mas calculando, de forma bottom-up, todos os subproblemas menores do que o problema a ser solucionado. Por forma bottom-up deve-se entender que a solução dos subproblemas deve ser feita por ordem de tamanho, dos menores para os maiores. Neste caso, é possível usar a idéia da PD! Partição de Inteiros T(n, p) =, se (n < ) ou (n >, p = ) T(n, p) =, se (n = ) T(n, p) = T(n p, p) + T(n, p - ), n >, p > Quer-se obter T(n, n). Para implementar PD, calcular T(n, p) em ordem crescente por n e p, começando por qualquer um dos dois parâmetros. Partição de Inteiros T(n, p) =, se (n < ) ou (n >, p = ) T(n, p) =, se (n = ) T(n, p) = T(n p, p) + T(n, p - ), n >, p > Algoritmo (por linha): Partição(): para p até n incl.: T[, p] para i até n incl.: T[i, ] para p até n incl.: se (i p): T[i, p] T[i, p-] + T[i-p, p] senão: T[i, p] T[i, p-] Complexidade: O(n )
2 Partição de Inteiros T(n, p) =, se (n < ) ou (n >, p = ) T(n, p) =, se (n = ) T(n, p) = T(n p, p) + T(n, p - ), n >, p > Algoritmo (por coluna): Partição(): T[,] para i até n incl.: T[i, ] para p até n incl.: para i até n incl.: se (i p): T[i, p] T[i, p-] + T[i-p, p]; senão: T[i, p] T[i, p-] Partição de Inteiros Cálculo de T(, ) 6 Partição de Inteiros ExS Completar a tabela abaixo, para n = 6 Partição de Inteiros Exercício - Solução Completar a tabela abaixo, para n = Dados os tipos de moedas de um país, determinar o número de maneiras distintas para dar um troco de valor n. Exemplo: V = {,,,,,} m = 6 n = 6 Há maneiras distintas:,,,,,,...,,,,,,,...,,...,...,,,,,,,,,...,,,...,,..., Formulação recursiva: dados m, n T(p, n) = formas distintas de dar um troco n, usando os p tipos iniciais de moedas, V[]...V[p] T(p, n) =, (n < ) T(p, n) =, (n = ) T(p, n) = T(p, n V[p]) + T(p-, n), (n > ) A solução do problema é obter T(m, n). Observe que a formulação é a mesma feita no estudo de memorização.
3 Exemplo: V = {,,,,,} m = 6 n = 6 Há maneiras distintas: T(,6) =T(,)+...=+.., T(,6)=T(,6)+...=6+..,,,,,...,,,,,,,...,,...,... T(,6)=T(,) +,,,=,,,,, = +...,,,,..,,,..,,..,.. =T(,6) =,... Exemplo: V = {,,,,, } m = 6, n = A solução por PD consiste em preencher a tabela m x n por ordem crescente do tamanho dos subproblemas, sem necessidade de recursão. Há duas formas de fazer isso: + ou + Ex. da a forma: V = {,,,,, } Exercício: Completar a tabela abaixo para n = V = {,, } ExS: Preencher a tabala para n = T(p, n) =, (n < ) ou (p = ) T(p, n) =, (n = ) T(p, n) = T(p, n V[p])+T(p-,n), (n > ) Algoritmo, com preenchimento linha x coluna: (): para i até m incl.: T[i, ] para j até n incl.: se j > V[i]: T[i,j] T[i,j] + T[i,j-V[i]] senão T[i, j] se i > T[i, j] T[i,j] + T[i-, j] Complexidade: O(n.m)
4 PD x Memorização V = {,,,,, } Formulação recursiva: dados m, n T(p, n) = formas distintas de dar um troco n, usando os p tipos iniciais de moedas, V[]...V[p] T(p, n) =, (n < ) T(p, n) =, (n = ) T(p, n) = Σ T(i, n V[i]), (n > ), i p A solução do problema é obter T(m, n). Observe que a formulação é diferente daquela feita no estudo de memorização. Exemplo: V = {,,,,, } m = 6, n = Mochila (/) Dada uma mochila com capacidade M e t ítens com peso w i cada, verificar se existe uma combinação de itens que preencha exatamente a mochila. Exemplo: Dado o conjunto de ítens {,,, 9, }, é possível preencher exatamente mochilas com capacidades e, mas não é possível preencher mochila com capacidade 6. Mochila (/) Define-se K(q, n) = x = indicador de solução quando se usa os q itens iniciais numa mochila de capacidade n. x =- não há solução, cc indica o menor índice de ítem que que completa a mochila. Formulação recursiva: K(q, ) =, K(, n) = -, se n >, K(q, n) = K(q-, n), se K(q-,n) -, n M; q t; K(q, n) = q, se K(q-, n-p q ) -, n M; q t; K(q, n) = -, nos demais casos Mochila (/) K(q, ) =, K(, n) = -, se n >, K(q, n) = K(q-, n), se K(q-,n) -, n M; q t; K(q, n) = q, se K(q-, n-p q ) -, n M; q t; K(q, n) = -, nos demais casos Algoritmo: Mochila(): K[, ] para j até M incl.: K[, j] - para i até t incl.: para j até M incl.: se (K[i-, j] -): K[i, j] K[i-, j] senão Se ((j P[i]) e (K[i-, j-p[i]] -)): K[i, j] i senão K[i, j] - Complexidade: O(t.M)
5 Mochila (/) Exemplo: P= {,,, 9, } M = Obs: - não representado () Mochila (/) P = {,,, 9, } ExS: Completar a tabela abaixo para M = () Mochila (/) Apresentação de uma solução Solução(): j M enquanto (j ): escrever (P[K[t, j]]) j j - P[K[t,j]] Para M =, a saída seria: 9 () () (9) () () () (9) () () () () (9) () Mochila (/) P = {,,, 9, } Exercício: Encontrar a solução para M = Mochila (/) outras versões a) usar dois valores booleanos em cada célula, o primeiro indicando se há solução e o segundo se o ítem atual é o de menor índice para a solução Exemplo: P = {,,, 9, } M = Obs: célula em branco com (F,F) Mochila (/) outras versões b) usar um vetor ao invés de uma matriz Exemplo: P = {,,, 9, } M = () () () (9) () () () () (9) () VF VF VV VF VV VF VV VF VF VV VF VV VF VV VV VF VF VF VF VF VV VF VF VV VF VV VV VV VF VF VF VF VF VF VF VF VF VF VF VF VV VF VV Algoritmo: Mochila(): K[] para j até M incl.: K[j] - para i até t incl.: para j M..P[i] incl.: se ((K[j] = -) e (K[j-P[i]] )): K[j] i
6 Mochila (/) outras versões b) usar um vetor ao invés de uma matriz Exemplo: P = {,,, 9, } M = Exercício: mostrar a situação do vetor acima após o processamento de cada ítem, a partir da situação inicial: Mochila (/) outras versões ExS: mostrar a situação do vetor para o problema mochila para M =, e ítens: {,,,, 6}: Mochila (/) outras versões b) usar um vetor ao invés de uma matriz Problema Ferry Loading (Val 6) Tem-se um ferry de comprimento lf, duas linhas para carros e uma fila dada de carros, com seus comprimen-tos lc i. Quer-se saber quantos carros podem ser carregados, obedecendo-se a fila. Dados: n carros de comprimentos lc i dados e o ferry com comprimento lf. lf = 9 Fila:,,,,,,, Sol: (/, /, /, /, /) Mochila (/) outras versões b) usar um vetor ao invés de uma matriz Problema Ferry Loading (Val 6) Tem-se um ferry de comprimento lf, duas linhas para carros e uma fila dada de carros, com seus comprimentos lc i. Quer-se saber quantos carros podem ser carregados, obedecendo a fila. lf = 9, lc = (,,,,,,, ) tot SIT V V V - - V - - V F Mochila (/) outras versões Problema Ferry Loading (Val 6) - Escolha dos carros Algoritmo: FerryLoading(): K[*] -; K[] ; F[*] ; i ; lotado F; tot ; enquanto ((i t) e (não lotado)): tot tot + lc[i]; lotado V; para j lf..lc[i] incl.: se ((K[j-lc[i]] > -) e ((tot-j) lf)): lotado F; F[i] ; se (K[j] = -): k[j] i; i i+; Mochila (/) outras versões Problema Ferry Loading (Val 6) - Determinação das filas Solução(): i lf enquanto (K[i] = -): i i-; enquanto (i > ): j K[i]; F[j] ; Vetor K Vetor F i i-lc[j]; SIT - - F i 6 8 9
7 Mochila (/) outras versões c) contar o número de soluções Exemplo: P = {,,,, } M = Mochila (/) outras versões c) contar o número de soluções Algoritmo: Mochila (/) outras versões ExS6: mostrar o preenchimento do vetor para contar o número de soluções para M =, e ítens: {,,,,6}: ContaSoluçõesMochila(): K[] para j até M incl.: K[j] para i até t incl.: para j M..P[i] incl.: K[j] K[j] + K[j-P[i]] TESTE : SOLUÇÕES DA MOCHILA Escrever a recorrência para contar o número de soluções distintas da Mochila, K(p, q) Mochila (/) outras versões d) contar o número de itens na solução Exemplo: P = {,,, 9, } M = Mochila (/) outras versões d) contar o número de itens na solução Exemplo: P = {,,, 9, } M = Algoritmo: Algoritmo: ContaSoluçõesMochila(): K[] para j até M incl.: K[j] para i até t incl.: para j M..P[i] incl.: K[j] K[j] + K[j-P[i]] ExS6: M =, e ítens: {,,,,6}: ContaItensMochila(): K[,] para j até M incl.: K[,j] - para i até t incl.: para j até M incl.: K[i,j] - para r i.. incl.: para j P[i] até M incl.: se ((K[r, j] = -) e (K[r-,j-P[i]] )): K[r, j] i
8 Mochila (/) outras versões d) contar o número de itens na solução Problema Tug of War (Val ) Tem-se n competidores, e são dados os pesos de cada um. Quer-se dividir as pessoas em dois times tal que o número de competidores difira no máximo em e a soma dos pesos deve ser mínima. Indicar os pesos de cada grupo. Dados: n = 9 Pesos:, 6,, 8, 9,,, 66, 8 Sol: (,,,,,,,, ) Mochila (/) outras versões d) contar o número de itens na solução Problema Joys of Farming (Val ) Tem-se n casas, cada uma com quartos, em cada quarto um número variável de camas. Quer-se distribuir m moças e r rapazes pelas casas, tal que em cada quarto só tenha ou moças ou rapazes e não podendo os dois quartos de uma mesma casa serem ocupados pelo mesmo sexo. É possível fazer a distribuição? Dados: n =, m =, r = Quartos: /8, /6, /, 6/, / Sol: S (moças:, 6,, 6, rapazes: 8,,,, ) Mochila (/) - ExS: mostrar o preenchimento da matriz para mostrar o número de ítens na solução M =, e ítens: {,,,,6}: Mochila (/) outras versões e) Mochila com peso e valor: a cada ítem, além do peso(p) é associado um valor(v). O objetivo passa a ser determinar o valor máximo que pode comportar a mochila Ex: P = {(,), (,), (,), (9,), (,)} M = Mochila (/) outras versões Peso e Valor Ex: P = {(,), (,), (,), (9,), (,)} M = Mochila (/) outras versões Peso e Valor e) Mochila com peso e valor: a cada ítem, além do peso(w) é associado um valor(v). O objetivo passa a ser determinar o valor máximo que pode comportar a mochila Ex: P, V = {(,), (,6), (,), (9,), (,)} M = MochilaPesoeValor(): K[].me ; K[].vm ; para j até M incl.: K[j].me -; K[j].vm ; para i até t incl.: para j M..P[i] incl.: se ((K[j-P[i]].me ) e (K[j].vm < (K[j-P[i]].vm+V[i]))): K[j].me i; K[j].vm K[j-P[i]].vm+V[i]; Obs: K[j].me = menor índice que obtém o valor máximo K[j].vm = valor máximo
9 Mochila (/) outras versões - Peso e Valor ExS8: mostrar a situação do vetor para os seguintes ítens, M =. Ex: P, V = {(,), (,), (,), (,)} M = Mochila (/) outras versões - Peso e Valor f) Mochila múltiplos itens: existem infinitos objetos de cada tipo de ítem Ex: P = {,,, 9, } M = Mochila outras versões f) Mochila múltiplos itens: existem infinitos objetos de cada tipo de ítem Ex: P = {,,, 9, } M = MochilaItensMultiplos(): K[] para j até M incl.: K[j] - para i até t incl.: para j P[i] até M incl.: se ((K[j-P[i]] ) e (K[j] = -)): K[j] i; Mochila outras versões g) Mochila com múltiplos itens, cada um com peso e valor: a cada ítem, além do peso(p) é associado um valor(v). O objetivo passa a ser determinar o valor máximo que pode comportar a mochila Ex: W = {(,), (,6), (,), (9,), (,)} M = (valores da versão /) Mochila outras versões g) Mochila com múltiplos itens, cada um com peso e valor: a cada ítem, além do peso(w) é associado um valor(v). O objetivo passa a ser determinar o valor máximo que pode comportar a mochila Ex: P, V = {(,), (,6), (,), (9,), (,)} M = MochilaItensMultiplosPesoeValor(): K[].me ; K[].vm ; para j até M incl.: K[j].me -; K[j].vm ; para i até t incl.: para j P[i] até M incl.: se ((K[j-P[i]].me ) e (K[j].vm < (K[j-P[i]].vm+V[i])): K[j].me i; K[j].vm K[j-P[i]].vm+V[i]; Mochila (/) Ítens múltiplos ExS9: mostrar a situação do vetor para os seguintes ítens, M =, Ex: P, V = {(,), (,), (,), (,)} M = a) Sem considerar o valor b) Considerando o valor
10 Mochila outras versões h) Mochila com ítens fracionáveis: cada ítem pode ser fracionado. Será visto adiante (Guloso) i) Mochila mista: parte dos itens não fracionáveis e parte fracionáveis. Será visto adiante (PD+Guloso) Mochila PD x Backtracking -Muitos itens pequenos S = {,,,, 9,, 6,,, 8,,,,,,,,,,, } é melhor PD -Poucos itens grandes S = {., 9.99,.,., 899.6,..,..6.86,.99..} é melhor BK Problemas com paradigma da "diagonal" Alguns problemas com solução por PD requerem que se examine todos os subproblemas relativos a intervalos consecutivos de um vetor, ou seja intervalos (,), (,)...(,n),(,)...(n-,n)(n,n). Neste caso, o resultado ótimo para cada intervalo (i,j), com j i é guardado na célula (i,j) de uma matriz M n x n, que geralmente é preenchida por diagonais, onde cada diagonal representa dada diferença de índices j-i, dos diversos intervalos. Só é preenchido o "triângulo" superior da matriz, Problemas apresentados são: Produto de Matrizes e Jogo da Soma. x x x x x x Produto de Matrizes Dada uma sequência de matrizes que devem ser multi-plicadas, determinar a ordem ótima de multiplicação (aquela que requer o menor número de operações), considerando que o produto é associativo. Exemplo: M ( x ) M ( x ) M ( x ) M ( x ) O produto pode ser feito de inúmeras maneiras, dentre as quais: ((M x M ) x (M x M )) (M x ((M x M ) x M )) Produto de Matrizes Associatividade M (a x b) x M (b x c) x M (c x d) a) ((M x M ) x M ) = M (a x d), (M x M ) = M (a x c) M ij = Σ k c M ik x M kj = Σ k c (Σ t b M it x M tk,) x M kj = Σ k c Σ t b M it x M tk x M kj b) (M x (M x M )) = M (a x d), (M x M ) = M 6 (b x d) M ij = Σ t b M it x M 6tj = Σ t b M it (Σ k c M itk x M kj ) = Σ k c Σ t b M it x M tk x M kj Produto de Matrizes Quantidade de operações M (a x b) x M (b x c) a x b x c produtos a x (b-) x c somas Produto de Matrizes Mais de duas matrizes M ( x ) M ( x ) M ( x ) M ( x ) a) ((M x M ) x (M x M )) x x + x x + x x = = b) (M x ((M x M ) x M )) x x + x x + x x = =
11 Produto de Matrizes Formulação recursiva Vetor de dimensões: M i (r i- x r i ) n r r r r n T[i, j] = núm. mínimo de operações p/ obter M i... M j T[i, j] = min i k <j {T[i, k]+t[k+,j] + r i- x r k x r j } T[i, i] = Produto de Matrizes Implementação com PD M M M M A idéia é calcular os produtos ótimos M i... M j em ordem crescente da diferença j i: T[,], T[,], T[,], T[,] T[,], T[,], T[,] T[,], T[,] T[,], a solução buscada! Produto de Matrizes Implementação com PD M M M M j i = Produto de Matrizes Implementação com PD M M M M j i = Produto de Matrizes Implementação com PD M M M M j i = Produto de Matrizes Implementação com PD M M M M j i = T[,] k = T[,]+T[,]+r.r.r = =. k = T[,]+T[,]+r.r.r = = T[,] k = T[,]+T[,]+r.r.r = =. k = T[,]+T[,]+r.r.r = =.
12 Produto de Matrizes PD - j i = M M M M T[,] k = T[,]+T[,]+r.r.r = =. k = T[,]+T[,]+r.r.r = =. k = T[,]+T[,]+r.r.r = = 8. Produto de Matrizes PD - Solução Custo Melhor k Multiplicação ótima: ((M x (M x M )) x M ) Produto Matrizes T[i, j] = min{t[i, k]+t[k+,j] + r i- x r k x r j } i k <j T[i, i] = Quer-se encontrar T[, n]. ProdutoMatrizes(): para k até n incl.: T[k, k] para d até n- incl.: para i até n-d incl.: j i + d; T[i, j] ; para k i até j- incl.: se ((T[i, k] + T[k+, j] + r[i-].r[k].r[j]) < T[i, j]): T[i, j] T[i, k] + T[k+, j] + r[i-].r[k].r[j]; MK[i, j] k; Complexidade: O(n ) Produto de Matrizes M M M M ExS: Calcular a pior maneira de multiplicar as matrizes acima. Produto Matrizes Impressão da expressão: baseada em uma recorrência sobre a matriz MK Algoritmo: String Expressao(i,j): se (i = j): retornar 'M' + i senão: retornar '(' + Expressao(i,MK[i,j])+ 'x' + Expressao(MK[i,j]+,j) + ')'; Jogo da Soma Dado um vetor V contendo inteiros, determinar ao melhor resultado para o seguinte jogo: os jogadores retiram, em turnos, quantos elementos quiserem do vetor, desde que seja de uma das pontas. A solução é maximizar a diferença entre os dois jogadores, levando em conta que os dois jogam de maneira ótima. Para o vetor abaixo, a maior diferença possível é : o primeiro retira e ; o segundo retira, o primeiro retira - e o segundo -, com a diferença (+-)-(-) =. - -
13 Jogo da Soma - Recorrência M(i,i) = V(i) M(i,j) = max( Ac(i,j), Ac(i,k) - M(k+,j), i k <j, Ac(k,j) - M(i, k-), i< k j, ) O primeiro termo da maximização corresponde à retirada de todos os números i a j; o segundo, às retiradas da ponta esquerda e o trceiro, às retiradas da ponta direita do vetor. Alagoritmo para p Jogo da Soma JogodaSoma(): para k até n incl.: T[k, k] V[k] VA[] para k até n incl.: VA[k] VA[k-]+V[k] para d até n- incl.: para i até n-d incl.: j i + d; T[i, j] VA[j]-VA[i-]; MI[i, j] (i, j); para k i até j- incl.: se ((T[i, j] < (VA[k]-VA[i-]-T[k+,j])): T[i, j] VA[k]-VA[i-]-T[k+,j] MI[i, j] (i, k) para k i+ até j incl.: se ((T[i, j] < (VA[j]-VA[k-]-T[i, k-])): T[i, j] VA[j]-VA[k-]-T[i,k-] MI[i, j] (k, j) Jogo da Soma - Exemplo: V x - x x x x x x x x x Diagonal de diferença de índices= Jogo da Soma - Exemplo: Jogo da Soma - Exemplo: Jogo da Soma - Exemplo: V x - 6 x x x x x x x x x Diagonal de diferença de índices= M(,) = max(-6, --(-), --(-)) = M(,) = max(-, --(), -(-)) =6 M(,) = max(, -(), -()) = M(,) = max(, -(), -()) = V x - 6 x x x x x x x x x Diagonal de diferença de índices= M(,) = max(-, --(6), -6-(), -(), --(-) =- M(,) = max(-, --(), --(), -(6), -(-)) = M(,) = max(, -(), -(), -(), -()) = V x x x x x x x x x x Diagonal de diferença de índices= M(,) = max(-, --(), -6-(),--(), -(-),-(), --(-))= M(,) = max(-, --(), --(), --(), -(),-(6),-(-)) =8
14 Jogo da Soma - Exemplo: V x x x x x x x x x x Diagonal de diferença de índices= M(,) = max(-, --(8), -6-(), --(),--(), -(), -(-), -(), -(-)) = Jogo da Soma - Exemplo: V - - Maior diferença - - x x x x x x x x x x Melhor intervalo x x x x x x - - x x x x - Distância de Edição Dados dois strings A e B, quer-se determinar a menor sequência de operações p/ transformar A em B. Os tipos de operação são: -inserção de um caracter -deleção de um caractér -substituição de um caractér Exemplo: ERRO transforma-se em ACERTO mediante operações: -inserção do A AERRO -inserção do C ACERRO -substituição do R ACERTO Distância de Edição - Formulação recursiva Dados os substrings A i (primeiros i caracteres) e B j, D(i, j) = distância de edição entre A i e B j = D(i-, j-), se a i = b j min(d(i-, j), D(i, j-), D(i-, j-)) +, se a i b j Deleção de a i Inserção de b j Substituição de a i por b j Cálculo da Distância de Edição A C E R T 6 O 6 E R R O Distância de Edição D(i, j) = D(i-, j-) =, se a i = b j min(d(i-, j), D(i, j-), D(i-, j-)) +, se a i b j DistânciaEdição(): #Dados: Strings A e B, com A = n e B = m para i até n incl.: D[i, ] i para j até m incl.: D[, j] j para i até n incl.: para j até m incl.: se (A[i] = B[j]): D[i, j] D[i-, j-] senão: D[i, j] min(d[i-, j-], D[i-, j], D[i, j-])+ Complexidade: O(n.m)
15 Distância de Edição - Apresentando a transformação A C E R T 6 O 6 E R R O Distância de Edição - Apresentando a transformação M A R R O 6 M 6 A M O R A Distância de Edição - Apresentando a transformação Transf(i,j): #Dados Matriz de distâncias D, Strings A e B se ((i>) ou (j>)): se (A[i] = B[j]): Transf(i-,j-); escrever 'Manteve' A[i]; senão se ((j > ) e D[i,j] = D[i,j-]+): Transf(i,j-); escrever 'Inseriu' B[j]; senão se ((i > ) e D[i,j] = D[i-,j]+): Transf(i-,j); escrever 'Deletou' A[i]; senão: Transf(i-,j-) escrever 'Transformou' A[i] 'em' B[j] Transf(n,m) Distância de Edição ExS: Determinar a distância de edição do seu ALSTRING(8 letras iniciais do nome) para o do colega. Mostrar duas transformações mínimas do primeiro string para o segundo. Exercício - a) Resolver intuitivamente o seguinte problema: Qual o valor máximo possível da soma dos números obtidos pela concatenação dos dígitos do particionamento do vetor de dígitos em segmentos consecutivos de a dígitos? Exercício - b) Escrever uma recorrência para o problema: Qual o valor máximo possível da soma dos números obtidos pela concatenação dos dígitos do particionamento do vetor de dígitos em segmentos consecutivos de a dígitos?
16 Exercício - c) Escrever um algoritmo de PD para o problema: Qual o valor máximo possível da soma dos números obtidos pela concatenação dos dígitos do particionamento do vetor de dígitos em segmentos consecutivos de a dígitos? Exercício - d) Escrever um algoritmo de PD para o problema: Qual a maneira de particionar um vetor de dígitos em partições de a dígitos, tal que a soma dos números resultantes da concatenação dos dígitos de cada partição seja máxima? Exercício - a) Escrever a recorrência que indica o número de caminhos mínimos distintos entre os pontos (,) e (n,m) em um grid de dimensões n x m, onde há obstáculos em alguns pontos de cruzamento (no máximo n- obstáculos)., ,6 Exercício b) Escrever um algoritmo de PD para a formulação anterior., Exercício c) Mostrar o preenchimento da matriz para o exemplo abaixo., Exercício - a) Escrever a recorrência que indica o número mínimo de quadrados, T(a,b) que podem ser obtidos com cortes transversais em uma chapa de dimensões a x b. Exemplo: a =, b=6,6,6
17 Exercício - Exercício - b) Escrever um algoritmo de PD para o problema descrito. Exemplo: a =, b=6 c) Preencher a matriz 6 x 6 relativa ao exemplo. Exemplo: a =, b=6 FIM
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
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]
Introdução à Análise Algoritmos
Introdução à Análise Algoritmos Notas de aula da disciplina IME 4-182 Estruturas de Dados I Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) abril/218 Ordenação por SELEÇÃO: Idéia: Dado um vetor
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
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
PCC104 - Projeto e Análise de Algoritmos
PCC104 - Projeto e Análise de Algoritmos Marco Antonio M. Carvalho Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade Federal de Ouro Preto 11 de agosto de 2017 Marco Antonio
Backtracking. Backtracking
Notas de aula da disciplina IME 0-0 ALGORITMOS E ESTRUTURAS DE DADOS II Paulo Eustáquio Duarte Pinto (pauloedp arroba ime.uerj.br) É uma técnica de solução de problemas (construção de algoritmos) que eamina
5ª Lista de Exercícios de Programação I
5ª Lista de Exercícios de Programação I Instrução As questões devem ser implementadas em C. Questões que envolvam leitura de matrizes, a construção dessas matrizes pode ser realizada através da geração
Tópicos Avançados em Algoritmos - exercícios de Prog. Din. com correcção parcial
Armando Matos, 2008/2009 Tópicos Avançados em Algoritmos - exercícios de Prog. Din. com correcção parcial 1. Optimizar o produto de matrizes Considere o problema da parentização óptima de uma multiplicação
MATRIZES - PARTE Mais exemplos Multiplicação de duas matrizes AULA 26
AULA 26 MATRIZES - PARTE 2 26. Mais exemplos Nesta aula, veremos mais dois algoritmos envolvendo matrizes. O primeiro deles calcula a matriz resultante da multiplicação de duas matrizes e utiliza três
Aprendizado de Máquina
Aprendizado de Máquina Template Matching Luiz Eduardo S. Oliveira Universidade Federal do Paraná Departamento de Informática http://lesoliveira.net October 25, 2012 Luiz S. Oliveira (UFPR) Aprendizado
Algoritmos de Ordenação. Profº Carlos Alberto T. Batista
Algoritmos de Ordenação Profº Carlos Alberto T. Batista E-mail: [email protected] [email protected] Por que ordenar os dados? Encontrar elementos em uma lista torna-se algo simples e
Exercícios: Recursão
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem C Exercícios: Recursão 1. Faça uma função recursiva que calcule e retorne o fatorial
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
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
Aula 5 - Produto Vetorial
Aula 5 - Produto Vetorial Antes de iniciar o conceito de produto vetorial, precisamos recordar como se calculam os determinantes. Mas o que é um Determinante? Determinante é uma função matricial que associa
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.
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
Teoria dos Grafos Aula 23
Teoria dos Grafos Aula 23 Aula passada Apresentação de trabalhos Discussão da prova Subset sum Problema da mochila Aula de hoje Caminho mais curto entre todos os pares Algortimo de Floyd Warshall Programação
EXERCÍCIOS DE RECORDAÇÃO DE ALGORITMOS
UNIVERSIDADE SALGADO DE OLIVEIRA CURSO DE SISTEMAS DE INFORMAÇÃO DISCIPLINA: LINGUAGEM DE PROGRAMAÇÃO I PROF: GIULIANO PRADO DE MORAIS GIGLIO EXERCÍCIOS DE RECORDAÇÃO DE ALGORITMOS 0) Faça um algoritmo
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
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
Algoritmos em Strings
Algoritmos em Strings R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes FEUP, MIEIC, CAL, 2010/2011 1 Índice Pesquisa exacta (string matching) Pesquisa aproximada (approximate string matching)
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
Árvore Binária de Busca Ótima
MAC 5710 - Estruturas de Dados - 2008 Referência bibliográfica Os slides sobre este assunto são parcialmente baseados nas seções sobre árvore binária de busca ótima do capítulo 4 do livro N. Wirth. Algorithms
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
Resolução de Sistemas Lineares. Ana Paula
Resolução de Sistemas Lineares Sumário 1 Aula Anterior 2 Decomposição LU 3 Decomposição LU com Pivotamento 4 Revisão Aula Anterior Aula Anterior Aula Anterior Aula Anterior Eliminação de Gauss Transforma
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
Fundamentos de Matemática Curso: Informática Biomédica
Fundamentos de Matemática Curso: Informática Biomédica Profa. Vanessa Rolnik Artioli Assunto: sequências e matrizes 05 e 06/06/14 Sequências Def.: chama-se sequência finita ou n-upla toda aplicação f do
Questões de Divisão e Conquista
Questões de Divisão e Conquista 1. Potência de inteiros Certo ou errado? O algoritmo abaixo Pot(n,k) calcula n k, para n e k inteiros. Sua complexidade é O(k): Pot(n, k): se (k = 0): retornar 1 senão se
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
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
Teoria dos Grafos Aula 24
Teoria dos Grafos Aula 24 Aula passada Caminho mais curto entre todos os pares Algortimo de Floyd Warshall Programação dinâmica Aula de hoje Caminho mais curto em grafos Algoritmo de Bellman Ford Algoritmo
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
CADERNO DE EXERCÍCIOS ALGORITMOS
J. EXERCÍCIOS SOBRE MODULARIZAÇÃO 77. Faça uma função que recebe um número inteiro por parâmetro e retorna verdadeiro se ele for par e falso se for ímpar. 78. Escreva um programa que leia o raio de um
Exercícios: Vetores e Matrizes
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem C Exercícios: Vetores e Matrizes 1 Vetores 1. Faça um programa que possua um vetor
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
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
Algoritmos gulosos (greedy)
Algoritmos gulosos (greedy) CLRS 16.1 e mais... Algoritmos p. 1 Algoritmos gulosos Algoritmo guloso procura ótimo local e acaba obtendo ótimo global costuma ser muito simples e intuitivo muito eficiente
Grafos: caminhos (matriz adjacência)
Grafos: caminhos (matriz adjacência) Algoritmos e Estruturas de Dados 2 Graça Nunes 1 O problema do menor caminho Um motorista deseja encontrar o caminho mais curto possível entre duas cidades do Brasil
Sistemas de Equações Lineares Algébricas
Sistemas de Equações Lineares Algébricas A 11 x 1 + A 12 x 2 +... + A 1n x n = b 1 A 21 x 1 + A 22 x 2 +... + A 2n x n = b 2............... A n1 x1 + A n2 x 2 +... + A nn x n = b n A 11 A 12... A 1n x
Algoritmos de Ordenação
Algoritmos de Ordenação! Problema: encontrar um número de telefone em uma lista telefônica! simplificado pelo fato dos nomes estarem em ordem alfabética! e se estivesse sem uma ordem?! Problema: busca
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
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)
CAL ( ) - MIEIC/FEUP Programação Dinâmica ( )
AL (-) - MIEI/FEUP Programação Dinâmica (--4) Técnicas de oncepção de Algoritmos (ª parte): programação dinâmica R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes AL, MIEI, FEUP Fevereiro de
Aula 10: Introdução a Vetores e Matrizes
Aula 10: Introdução a Vetores e Matrizes Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Vetores e Matrizes Programação de Computadores IV 1 / 50 Agenda
Solução de Recorrências
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Solução de Recorrências Algoritmos e Estruturas de Dados I Natália Batista https://sites.google.com/site/nataliacefetmg/ [email protected]
Exercícios sobre algoritmos
Exercícios sobre algoritmos Exercícios envolvendo estruturas de decisão Fazer um algoritmo para: 1) Receber um número do usuário e mostrar se esse número é par ou não par 2) Receber 3 valores numéricos,
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
Faculdades Integradas Rui Barbosa Programação II Prof. Marcos Antonio Estremote. Exercícios com Vetores e Matrizes
Faculdades Integradas Rui Barbosa Programação II Prof. Marcos Antonio Estremote Exercícios com Vetores e Matrizes 1. Leia um vetor de 12 posições e em seguida ler também dois valores X e Y quaisquer correspondentes
OBMEP 2010 Soluções da prova da 2ª Fase Nível 2. Questão 1
Questão a) Para saber o número que deve dizer ao matemágico, Joãozinho deve fazer quatro contas: ª conta: multiplicar o número no cartão escolhido por 2; 2ª conta: somar 3 ao resultado da primeira conta;
Resolução de sistemas de equações lineares: Fatorações de matrizes
Resolução de sistemas de equações lineares: Fatorações de matrizes Marina Andretta/Franklina Toledo ICMC-USP 27 de agosto de 2012 Baseado no livro Análise Numérica, de R. L. Burden e J. D. Faires. Marina
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS. Aluno (s): 01 ATIVIDADE. Revisão de Conteúdo
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS DISCIPLINA: Lab. de Programação PROF: MSc. Flávio Barros PERÍODO: 2 DATA: Aluno (s): 01 ATIVIDADE / / Revisão de Conteúdo
Resolução de sistemas de equações lineares: Fatorações de matrizes
Resolução de sistemas de equações lineares: Fatorações de matrizes Marina Andretta/Franklina Toledo ICMC-USP 27 de fevereiro de 2015 Baseado no livro Análise Numérica, de R. L. Burden e J. D. Faires. Marina
Actividade Formativa 1
Actividade Formativa 1 Resolução 1. a. Dada a função y 3+4x definida no conjunto A {x R: 2 x < 7} represente graficamente A e a sua imagem; exprima a imagem de A como um conjunto. b. Dada a função y 3
Primeira Lista de Exercícios 2005/1... Exercício 1 Desenhe Diagrama de Estados para Máquinas que Decidem as Linguagens:
UFLA Universidade Federal de Lavras Departamento de Ciência da Computação COM167 Teoria da Computação Prof. Rudini Sampaio Monitor: Rodrigo Pereira dos Santos Primeira Lista de Exercícios 2005/1 Exercício
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 [email protected] Universidade Federal de Alfenas versão da aula: 0.3 Programação Dinâmica
Pesquisa Operacional. Prof. José Luiz
Pesquisa Operacional Prof. José Luiz Resolver um problema de Programação Linear significa basicamente resolver sistemas de equações lineares; Esse procedimento, apesar de correto, é bastante trabalhoso,
Coloração de intervalos
Coloração de intervalos Problema: Dados intervalos de tempo [s 1,f 1 ),...,[s n,f n ), encontrar uma coloração dos intervalos com o menor número possível de cores em que dois intervalos de mesma cor sempre
Complexidade de Algoritmos
Complexidade de Algoritmos! Uma característica importante de qualquer algoritmo é seu tempo de execução! é possível determiná-lo através de métodos empíricos, considerando-se entradas diversas! é também
Tópicos em Algoritmos. André Guedes
Tópicos em Algoritmos André Guedes 31 de agosto de 2017 Sumário 1 Aulas 1 2 Introdução 2 3 Problemas Computacionais e Algoritmos 4 3.1 Definições............................. 4 3.2 Correção e eficiência.......................
Ficha 1 Noções de sequência e decisão em algoritmia
Ficha 1 Noções de sequência e decisão em algoritmia 1. Ler uma temperatura em Celsius e converter para Fahrenheit. Elabore o algoritmo e especifique as estruturas de dados necessárias para a resolução
ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS
1/18 ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS Algoritmos 2/18 Algoritmos Algoritmo - sequência de instruções necessárias para a resolução de um problema bem formulado (passíveis de implementação em computador)
SISTEMAS LINEARES PROF. EDÉZIO
SOLUÇÕES NUMÉRICAS DE SISTEMAS LINEARES PROF. EDÉZIO Considere o sistema de n equações e n incógnitas: onde E : a x + a x +... + a n x n = b E : a x + a x +... + a n x n = b. =. () E n : a n x + a n x
Refletores de Householder e Fatoração QR
Refletores de Householder e Fatoração QR Antonio Elias Fabris Instituto de Matemática e Estatística Universidade de São Paulo Map 2210 Aplicações de Álgebra Linear Antonio Elias Fabris (IME-USP) Householder
Sistemas Lineares. Métodos Iterativos Estacionários
-58 Sistemas Lineares Estacionários Lucia Catabriga e Andréa Maria Pedrosa Valli Laboratório de Computação de Alto Desempenho (LCAD) Departamento de Informática Universidade Federal do Espírito Santo -
DINTER UFF/IFTM - Análise e Síntese de Algoritmos - Lista de Exercícios
DINTER UFF/IFTM - Análise e Síntese de Algoritmos - Lista de Exercícios - 2013 1. Uma pessoa sobe uma escada composta de n degraus, com passos que podem alcançar entre 1 e k n degraus. Escrever equações
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
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem Python
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem Python Exercícios: Funções 1. Crie uma função que recebe como parâmetro um número
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
Alguns comentários. Segunda prova. Programação dinâmica em grafos. Guloso em grafos. Algoritmos p. 1
Alguns comentários Segunda prova Programação dinâmica em grafos Guloso em grafos Algoritmos p. 1 Problema dos intervalos disjuntos Problema: Dados intervalos [s[1],f[1]),...,[s[n],f[n]), encontrar coleção
Estruturas de Repetição WHILE e DO- WHILE
Universidade Federal do Pampa UNIPAMPA Campus Itaqui RS Engenharia de Agrimensura Introdução à Programação (prof. Dr. Rogério Vargas) Lista 2 (entrega: 1 de junho de 2015) Instruções: Trabalhos iguais
Álgebra Linear e Geometria Anaĺıtica. Matrizes e Sistemas de Equações Lineares
universidade de aveiro departamento de matemática Álgebra Linear e Geometria Anaĺıtica Agrupamento IV (ECT, EET, EI) Capítulo 1 Matrizes e Sistemas de Equações Lineares Geometria anaĺıtica em R 3 [1 01]
Projeto e Análise de Algoritmos
Projeto e Algoritmos Pontifícia Universidade Católica de Minas Gerais [email protected] 26 de Maio de 2017 Sumário A complexidade no desempenho de Quando utilizamos uma máquina boa, ela tende a ter
Sistemas Lineares - Eliminação de Gauss
1-28 Sistemas Lineares - Andréa Maria Pedrosa Valli Laboratório de Computação de Alto Desempenho (LCAD) Departamento de Informática Universidade Federal do Espírito Santo - UFES, Vitória, ES, Brasil 2-28
Programação de Computadores 1 Lista 2. Prof. Álvaro A. F. de Souza DECSI - ICEA - UFOP
Programação de Computadores 1 Lista 2 Prof. Álvaro A. F. de Souza DECSI - ICEA - UFOP 0.1 Vetores e Cadeias de Caracteres 1. Codifique um programa que leia e armazene duas notas de 10 alunos e calcule
