SlideShare ist ein Scribd-Unternehmen logo
1 von 7
1 INTRODUÇÃO
Programação dinâmica é um paradigma de programação aplicado sobretudo a
problemas de otimização. Embora a técnica seja semelhante ao princípio de divisão e
conquista, a solução do problema - denominada solução ótima - é encontrada a partir de uma
série de escolhas que são feitas pelo algoritmo durante a execução do processo. Sabe-se,
todavia, que o método de resolução de um problema estritamente grande pelo princípio de
divisão e conquista consiste em dividir o problema em subproblemas, tornando o problema
original cada vez menor. Por outro lado, a programação dinâmica simplifica o problema como
um todo.
Sedgewick (1990) e Cormen et al. (2002) ressaltam a importância de se distinguir o
termo “programação" transportado pelo nome da técnica estudada. Os autores não definem a
técnica como um processo de escrita de código, mas referem-se a ela como um processo de
formulação de restrições por parte do problema que a utiliza.
Ademais, Sedgewick (idem) destaca duas dificuldades que podem surgir com a
utilização da técnica:
• Nem sempre pode ser possível combinar as soluções de problemas menores para
formar a solução de um maior;
• O número de pequenos problemas a serem resolvidos pode ser inaceitavelmente
grande;
Nota-se, a partir dessas características que limitam a técnica, a ponte que a distancia da
estratégia de divisão e conquista: esta, em sua última etapa, necessariamente combina as
soluções encontradas nos subproblemas resolvidos para encontrar a solução do problema
maior.
Este trabalho pretende apresentar como o paradigma da programação dinâmica
funciona. Para isto, alguns algoritmos já existentes que utilizam essa técnica serão
mencionados, particularizando um deles para ser comentado a fim de que seja possível
compreender e ilustrar mentalmente a importância do estudo desse estilo de programação.
2 FUNDAMENTOS DE PROGRAMAÇÃO DINÂMICA
Assim como outras áreas da ciência e da tecnologia, o estudo de algoritmos também
possui seu dicionário de termos técnicos. A programação dinâmica, especialmente, utiliza
esse dicionário e o complementa com seus próprios verbetes.
Antes de apresentar e comentar alguns algoritmos que demonstram o funcionamento
da programação dinâmica, este trabalho abordará neste capítulo a gama de termos que
fundamenta a aplicação da técnica.
2.1 Solução ótima
Um problema solucionável é aquele que possui solução. Ou seja, o problema é
passível de ser resolvido e, mais, essa resolução é conhecida. Em geral, a solução de
problemas computacionais não é única, mas é diversa e, muitas vezes, ilimitada.
Os problemas da programação dinâmica são caracterizados por essa variedade de
soluções existentes. Uma solução que existe e é ilimitada é chamada de solução ótima e existe
apenas se as duas seguintes condições forem válidas:
• Se a solução for possível: a solução considera ter todas as variáveis definidas para o
problema;
• Se a solução for ilimitada: ou seja, não tem tamanho, podendo crescer ou
decrescer com o propósito de atender todas as restrições do problema.
Em outras palavras, uma solução ótima é uma solução que otimiza a função-objetivo do
problema (OLIVEIRA).
Otimizar uma função é muito importante na utilização dessa estratégia. Como visto,
uma das condições de existência de uma solução ótima é a sua não limitação em termos de
crescimento. Computacionalmente falando, quanto maior for a entrada, maior será o custo do
algoritmo. Portanto, uma solução ótima é aquela que resolve e otimiza o problema.
2.2 Elementos essenciais de algoritmos de programação dinâmica
Cormen et al. (2002) separam em quatro etapas a construção de um algoritmo de
programação dinâmica. São elas:
1. Caracterizar a estrutura de uma solução ótima;
2. Definir recursivamente o valor de uma solução ótima;
3. Calcular o valor de uma solução ótima em um processo bottom-up; e
4. Construir uma solução ótima a partir das informações calculadas.
Caracterizar a estrutura de uma solução ótima significa definir previamente que os
subproblemas do problema mais geral também serão resolvidos. Todas as vezes que isso
ocorrer, é dito que o problema apresenta uma subestrutura ótima. Cormen et al. (2002)
apresentam um método padronizado para a descoberta dessa subestrutura. O capítulo 3 deste
trabalho aplicará e comentará cada um dos tópicos citados pelo método, além de descrever
com maior detalhamento as quatro etapas da construção de um algoritmo de programação
dinâmica.
Para que a programação dinâmica se torne aplicável a um problema, dois importantes
elementos conceituais devem satisfazê-lo, a fim de que ele seja otimizado. Um deles é a
existência de uma subestrutura ótima que resolva os problemas internos do problema mais
geral; o outro, chamado de subproblema superposto, tem a função de diminuir o espaço
utilizado pelo algoritmo.
Quando um algoritmo se utiliza de subproblemas superpostos, é dito que o seu espaço
para a resolução de subproblemas deve ser tão pequeno que "um algoritmo recursivo para o
problema resolve os mesmos subproblemas repetidas vezes, em lugar de sempre gerar novos
subproblemas" (Cormen et al., 2002, p. 276). Em outras palavras, o uso da técnica da recursão
proverá a resolução dos subproblemas uma única vez, sem gerá-los repetidamente e combiná-
los no final. Com este entendimento, a programação dinâmica é separada e estudada
independentemente da técnica de divisão e conquista.
3 OTIMIZAÇÃO DE PROBLEMAS: O PROBLEMA DO PRODUTO DE CADEIAS
DE MATRIZES
3.1 Enunciado
Um problema clássico da programação dinâmica é a multiplicação de cadeias de
matrizes. Dada uma cadeia de matrizes M1, M2, M3, ..., Mk, com k elementos e tamanhos
m1xn1, m2xn2, m3xn3, ..., mkxnk, respectivamente, a multiplicação dessa cadeia, com matrizes
que possuem propriedade associativa, será dada por M1
.
M2
.
M3
.
....
Mk.
Matematicamente, o modo como uma matriz se associa a outra não influencia o
resultado final da operação. Na computação, a associação de matrizes pode impactar o custo
da solução desse problema.
Embora, matematicamente, o modo de associação de uma matriz a outra não
influencie o resultado final da operação, na computação, essa associação pode vir a impactar o
custo da resolução desse problema. Exemplificando, realizar a multiplicação das duas últimas
matrizes de uma cadeia em primeira instância poderá custar menos do que multiplicá-las ao
final do processo.
Na matemática, a existência de parênteses em dois elementos algébricos aplica a
propriedade associativa, delimitando-os a serem resolvidos em primeira ordem. O do produto
de cadeias de matrizes aplicado à programação dinâmica deve ser entendido como um
problema que dificulta a multiplicação por conta da ordem disposta das matrizes. A solução
geral do problema visa buscar a melhor ordem (ou seja, com menor custo computacional) para
multiplicar as matrizes da sequência.
3.2 Resolução aplicada à programação dinâmica
Como dito, o problema do produto de matrizes está na ordem em que serão efetuadas
as operações. Este subcapítulo apresentará a resolução passo a passo do algoritmo conforme o
método de construção de algoritmos de programação dinâmica mencionado em 2.2.
A primeira etapa consiste em caracterizar a estrutura de uma solução ótima para o
problema. Para que isso seja possível, uma subestrutura ótima deve ser encontrada antes a fim
de minimizar o problema. Essa minimização deverá reduzir a resolução a ponto de torná-la
tão pequena que se torne trivial. No caso da parentização de matrizes para um produto, a
subestrutura ótima será a generalização de uma cadeia específica dentro da cadeia maior do
problema. Para melhor ilustrar esse problema veja a Figura 1.
Figura 1 - Ilustração da subestrutura ótima do problema do produto da cadeia de matrizes
Fonte: Autor
Como foi possível perceber na primeira etapa, qualquer lugar do produto da cadeia é
válido com um lugar de parentização, já que, examinando cada um dos lugares, tem-se uma
opção ótima. A partir desta já definida, a segunda etapa surge para generalizar a escolha feita
pelo algoritmo. Recursivamente, a solução é criada para medir o custo desta para as soluções
dos subproblemas. Por definição, o problema será trivial se a linha for igual à coluna.
Utilizando a primeira etapa, é possível supor que a escolha de um lugar Mk para a
parentização, enquanto i = j, será igual ao menor custo possível para executar o produto.
Como i = j, tem-se apenas uma matriz; ou seja, k = i x j, ou Mixj. Para Sedgewick (1990, p.
600), o algoritmo que calcula o custo pode ser definido conforme a Listagem 1.
Para i <- 1 a N passo 1 faça
Para j <- i + 1 a N passo 1 faça
custoi,j <- MaiorInteiro
Fim-para
Para i <- 1 a N passo 1 faça
custoi,j <- 0
Fim-para
Para j <- 1 a N passo 1 faça
Para i <- 1 a N - j passo 1 faça
Para k <- i + 1 a i + j passo 1 faça
tempo <- custoi,k-1 + custok,i+j + ri * rk * ri+j+1
Se tempo < custoi,i+j então
custoi,i+j <- tempo
melhori,i+j <- k
Fim-se
Fim-para
Fim-para
Fim-para
Fim-para
Listagem 1 – Algoritmo de Sedgewick para o cálculo do custo de multiplicações
Fonte: Autor “adaptado de” Sedgewick, 1990, p. 600
Para i <- 1 a N passo 1 faça
Para j <- i + 1 a N passo 1 faça
custoi,j <- MaiorInteiro
Fim-para
Para i <- 1 a N passo 1 faça
custoi,j <- 0
Fim-para
Para j <- 1 a N passo 1 faça
Para i <- 1 a N - j passo 1 faça
Para k <- i + 1 a i + j passo 1 faça
tempo <- custoi,k-1 + custok,i+j + ri * rk * ri+j+1
Se tempo < custoi,i+j então
custoi,i+j <- tempo
melhori,i+j <- k
Fim-se
Fim-para
Fim-para
Fim-para
Fim-para
Listagem 1 – Algoritmo de Sedgewick para o cálculo do custo de multiplicações
Fonte: Autor “adaptado de” Sedgewick, 1990, p. 600

Weitere ähnliche Inhalte

Was ist angesagt?

Linux 강의자료 ed10
Linux 강의자료 ed10Linux 강의자료 ed10
Linux 강의자료 ed10hungrok
 
Fuzzy Logic in Washing Machine
Fuzzy Logic in Washing MachineFuzzy Logic in Washing Machine
Fuzzy Logic in Washing MachineHarsh Gor
 
Build the Virtual Reality Web with A-Frame
Build the Virtual Reality Web with A-FrameBuild the Virtual Reality Web with A-Frame
Build the Virtual Reality Web with A-FrameMozilla VR
 
[데브루키] Color space gamma correction
[데브루키] Color space gamma correction[데브루키] Color space gamma correction
[데브루키] Color space gamma correctionMinGeun Park
 
Performance tests with Gatling (extended)
Performance tests with Gatling (extended)Performance tests with Gatling (extended)
Performance tests with Gatling (extended)Andrzej Ludwikowski
 
Cloud Gaming - A Green Solution to Massive Multiplayer Online Games
Cloud Gaming - A Green Solution to Massive Multiplayer Online Games Cloud Gaming - A Green Solution to Massive Multiplayer Online Games
Cloud Gaming - A Green Solution to Massive Multiplayer Online Games Suhas Urs
 
Beyond the HUD - User Interfaces for Increased Player Immersion in FPS Games
Beyond the HUD - User Interfaces for Increased Player Immersion in FPS GamesBeyond the HUD - User Interfaces for Increased Player Immersion in FPS Games
Beyond the HUD - User Interfaces for Increased Player Immersion in FPS GamesElectronic Arts / DICE
 
On fuzzy concepts in engineering ppt. ncce
On fuzzy concepts in engineering ppt. ncceOn fuzzy concepts in engineering ppt. ncce
On fuzzy concepts in engineering ppt. ncceSurender Singh
 
Game Balance 1: What is Game Balance
Game Balance 1: What is Game BalanceGame Balance 1: What is Game Balance
Game Balance 1: What is Game BalanceMarc Miquel
 
Fuzzy logic control of washing m achines
Fuzzy logic control of washing m achinesFuzzy logic control of washing m achines
Fuzzy logic control of washing m achinespradnya patil
 
Designing Puzzles for Video Games
Designing Puzzles for Video GamesDesigning Puzzles for Video Games
Designing Puzzles for Video GamesPier Luca Lanzi
 
NVIDIA Cloud Gaming
NVIDIA Cloud GamingNVIDIA Cloud Gaming
NVIDIA Cloud GamingPhil Eisler
 
High Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in FrostbiteHigh Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in FrostbiteElectronic Arts / DICE
 
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자Seongdae Kim
 
Game engines and Their Influence in Game Design
Game engines and Their Influence in Game DesignGame engines and Their Influence in Game Design
Game engines and Their Influence in Game DesignPrashant Warrier
 
STORYTELLING IN VIDEO GAME – Creating a narrative for management game. Hurme ...
STORYTELLING IN VIDEO GAME – Creating a narrative for management game. Hurme ...STORYTELLING IN VIDEO GAME – Creating a narrative for management game. Hurme ...
STORYTELLING IN VIDEO GAME – Creating a narrative for management game. Hurme ...eraser Juan José Calderón
 

Was ist angesagt? (20)

Linux 강의자료 ed10
Linux 강의자료 ed10Linux 강의자료 ed10
Linux 강의자료 ed10
 
Fuzzy Logic in Washing Machine
Fuzzy Logic in Washing MachineFuzzy Logic in Washing Machine
Fuzzy Logic in Washing Machine
 
Soft computing01
Soft computing01Soft computing01
Soft computing01
 
Build the Virtual Reality Web with A-Frame
Build the Virtual Reality Web with A-FrameBuild the Virtual Reality Web with A-Frame
Build the Virtual Reality Web with A-Frame
 
[데브루키] Color space gamma correction
[데브루키] Color space gamma correction[데브루키] Color space gamma correction
[데브루키] Color space gamma correction
 
Performance tests with Gatling (extended)
Performance tests with Gatling (extended)Performance tests with Gatling (extended)
Performance tests with Gatling (extended)
 
Fuzzy logic control system
Fuzzy logic control systemFuzzy logic control system
Fuzzy logic control system
 
Cloud Gaming - A Green Solution to Massive Multiplayer Online Games
Cloud Gaming - A Green Solution to Massive Multiplayer Online Games Cloud Gaming - A Green Solution to Massive Multiplayer Online Games
Cloud Gaming - A Green Solution to Massive Multiplayer Online Games
 
Beyond the HUD - User Interfaces for Increased Player Immersion in FPS Games
Beyond the HUD - User Interfaces for Increased Player Immersion in FPS GamesBeyond the HUD - User Interfaces for Increased Player Immersion in FPS Games
Beyond the HUD - User Interfaces for Increased Player Immersion in FPS Games
 
On fuzzy concepts in engineering ppt. ncce
On fuzzy concepts in engineering ppt. ncceOn fuzzy concepts in engineering ppt. ncce
On fuzzy concepts in engineering ppt. ncce
 
Game Balance 1: What is Game Balance
Game Balance 1: What is Game BalanceGame Balance 1: What is Game Balance
Game Balance 1: What is Game Balance
 
Fuzzy logic control of washing m achines
Fuzzy logic control of washing m achinesFuzzy logic control of washing m achines
Fuzzy logic control of washing m achines
 
Designing Puzzles for Video Games
Designing Puzzles for Video GamesDesigning Puzzles for Video Games
Designing Puzzles for Video Games
 
NVIDIA Cloud Gaming
NVIDIA Cloud GamingNVIDIA Cloud Gaming
NVIDIA Cloud Gaming
 
Algoritmo Z-Buffer e Árvores BSP
Algoritmo Z-Buffer e Árvores BSPAlgoritmo Z-Buffer e Árvores BSP
Algoritmo Z-Buffer e Árvores BSP
 
High Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in FrostbiteHigh Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in Frostbite
 
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
 
Game engines and Their Influence in Game Design
Game engines and Their Influence in Game DesignGame engines and Their Influence in Game Design
Game engines and Their Influence in Game Design
 
STORYTELLING IN VIDEO GAME – Creating a narrative for management game. Hurme ...
STORYTELLING IN VIDEO GAME – Creating a narrative for management game. Hurme ...STORYTELLING IN VIDEO GAME – Creating a narrative for management game. Hurme ...
STORYTELLING IN VIDEO GAME – Creating a narrative for management game. Hurme ...
 
Fuzzy logic
Fuzzy logicFuzzy logic
Fuzzy logic
 

Andere mochten auch

Programação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaProgramação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaGabriel Albuquerque
 
Apresentacao mochila - parte 1
Apresentacao mochila - parte 1Apresentacao mochila - parte 1
Apresentacao mochila - parte 1Bianca Dantas
 
Algoritmo da mediana
Algoritmo da medianaAlgoritmo da mediana
Algoritmo da medianaKelve Aragão
 
Introdução à pesquisa operacional
Introdução à pesquisa operacionalIntrodução à pesquisa operacional
Introdução à pesquisa operacionalklivermoreira
 
Analise de Sensibilidade
Analise de SensibilidadeAnalise de Sensibilidade
Analise de SensibilidadeVivi Basilio
 
Pesquisa Operacional Aula 01 - Apresentação
Pesquisa Operacional Aula 01 - ApresentaçãoPesquisa Operacional Aula 01 - Apresentação
Pesquisa Operacional Aula 01 - ApresentaçãoLeinylson Fontinele
 
Algoritmo de backtracking
Algoritmo de backtrackingAlgoritmo de backtracking
Algoritmo de backtrackingVictor Gonzalez
 

Andere mochten auch (10)

Programação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma MáximaProgramação Dinâmica - Segmento de Soma Máxima
Programação Dinâmica - Segmento de Soma Máxima
 
Apresentacao mochila - parte 1
Apresentacao mochila - parte 1Apresentacao mochila - parte 1
Apresentacao mochila - parte 1
 
Backtracking
BacktrackingBacktracking
Backtracking
 
Algoritmo da mediana
Algoritmo da medianaAlgoritmo da mediana
Algoritmo da mediana
 
Otimização
OtimizaçãoOtimização
Otimização
 
Introdução à pesquisa operacional
Introdução à pesquisa operacionalIntrodução à pesquisa operacional
Introdução à pesquisa operacional
 
Analise de Sensibilidade
Analise de SensibilidadeAnalise de Sensibilidade
Analise de Sensibilidade
 
Teoria das Filas
Teoria das FilasTeoria das Filas
Teoria das Filas
 
Pesquisa Operacional Aula 01 - Apresentação
Pesquisa Operacional Aula 01 - ApresentaçãoPesquisa Operacional Aula 01 - Apresentação
Pesquisa Operacional Aula 01 - Apresentação
 
Algoritmo de backtracking
Algoritmo de backtrackingAlgoritmo de backtracking
Algoritmo de backtracking
 

Ähnlich wie Programação dinâmica: resolução do problema do produto de cadeias de matrizes

Aula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvidoAula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvidoEduardo de Lucena Falcão
 
59 algoritmosgeneticos(1)
59 algoritmosgeneticos(1)59 algoritmosgeneticos(1)
59 algoritmosgeneticos(1)arapido
 
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...Eduardo de Lucena Falcão
 
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...Eduardo de Lucena Falcão
 
Introdução aos algoritmos e à algoritmia.pptx
Introdução aos algoritmos e à algoritmia.pptxIntrodução aos algoritmos e à algoritmia.pptx
Introdução aos algoritmos e à algoritmia.pptxPaulo Cardoso
 

Ähnlich wie Programação dinâmica: resolução do problema do produto de cadeias de matrizes (7)

Aula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvidoAula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvido
 
59 algoritmosgeneticos(1)
59 algoritmosgeneticos(1)59 algoritmosgeneticos(1)
59 algoritmosgeneticos(1)
 
Cálculo numérico
Cálculo numéricoCálculo numérico
Cálculo numérico
 
Analise Algoritmos
Analise AlgoritmosAnalise Algoritmos
Analise Algoritmos
 
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
 
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...
Estudo e Avaliação do Problema de Otimização da Multiplicação de Cadeias de M...
 
Introdução aos algoritmos e à algoritmia.pptx
Introdução aos algoritmos e à algoritmia.pptxIntrodução aos algoritmos e à algoritmia.pptx
Introdução aos algoritmos e à algoritmia.pptx
 

Mehr von Orlando Junior

Árvores - Introdução e Conceitos Básicos
Árvores - Introdução e Conceitos BásicosÁrvores - Introdução e Conceitos Básicos
Árvores - Introdução e Conceitos BásicosOrlando Junior
 
Um estudo sobre práticas arquiteturais em metodologias ágeis de desenvolvimen...
Um estudo sobre práticas arquiteturais em metodologias ágeis de desenvolvimen...Um estudo sobre práticas arquiteturais em metodologias ágeis de desenvolvimen...
Um estudo sobre práticas arquiteturais em metodologias ágeis de desenvolvimen...Orlando Junior
 
Predição de Links em Redes Complexas usando o Classificador Naïve Bayes
Predição de Links em Redes Complexas usando o Classificador Naïve BayesPredição de Links em Redes Complexas usando o Classificador Naïve Bayes
Predição de Links em Redes Complexas usando o Classificador Naïve BayesOrlando Junior
 
Predição de Fluxos em Redes de Computadores - SBRC/WP2P+ 2014
Predição de Fluxos em Redes de Computadores - SBRC/WP2P+ 2014Predição de Fluxos em Redes de Computadores - SBRC/WP2P+ 2014
Predição de Fluxos em Redes de Computadores - SBRC/WP2P+ 2014Orlando Junior
 
Investigação de Predição de Fluxos em Redes de Computadores
Investigação de Predição de Fluxos em Redes de ComputadoresInvestigação de Predição de Fluxos em Redes de Computadores
Investigação de Predição de Fluxos em Redes de ComputadoresOrlando Junior
 
Predição de Fluxos em Redes de Computadores
Predição de Fluxos em Redes de ComputadoresPredição de Fluxos em Redes de Computadores
Predição de Fluxos em Redes de ComputadoresOrlando Junior
 
Normalização em banco de dados
Normalização em banco de dadosNormalização em banco de dados
Normalização em banco de dadosOrlando Junior
 
Introdução à Engenharia de Requisitos
Introdução à Engenharia de RequisitosIntrodução à Engenharia de Requisitos
Introdução à Engenharia de RequisitosOrlando Junior
 
Classes de Problemas P e NP
Classes de Problemas P e NPClasses de Problemas P e NP
Classes de Problemas P e NPOrlando Junior
 
A Missa para não-católicos
A Missa para não-católicosA Missa para não-católicos
A Missa para não-católicosOrlando Junior
 
Aprendizado de Máquina Supervisionado na Predição de Links em Redes Complexas...
Aprendizado de Máquina Supervisionado na Predição de Links em Redes Complexas...Aprendizado de Máquina Supervisionado na Predição de Links em Redes Complexas...
Aprendizado de Máquina Supervisionado na Predição de Links em Redes Complexas...Orlando Junior
 
Sacramento da Penitência - Estrutura
Sacramento da Penitência - EstruturaSacramento da Penitência - Estrutura
Sacramento da Penitência - EstruturaOrlando Junior
 
Web Server Controls e Banco de Dados
Web Server Controls e Banco de DadosWeb Server Controls e Banco de Dados
Web Server Controls e Banco de DadosOrlando Junior
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosOrlando Junior
 
Acessando Dados com ADO .NET
Acessando Dados com ADO .NETAcessando Dados com ADO .NET
Acessando Dados com ADO .NETOrlando Junior
 
10 Mandamentos e Pecados Relacionados
10 Mandamentos e Pecados Relacionados10 Mandamentos e Pecados Relacionados
10 Mandamentos e Pecados RelacionadosOrlando Junior
 
Catequese da Missa Tridentina - Símbolos
Catequese da Missa Tridentina - SímbolosCatequese da Missa Tridentina - Símbolos
Catequese da Missa Tridentina - SímbolosOrlando Junior
 
Verbos da Língua Inglesa - Observações preliminares
Verbos da Língua Inglesa - Observações preliminaresVerbos da Língua Inglesa - Observações preliminares
Verbos da Língua Inglesa - Observações preliminaresOrlando Junior
 
Mineração em Fluxos Contínuos de Dados
Mineração em Fluxos Contínuos de DadosMineração em Fluxos Contínuos de Dados
Mineração em Fluxos Contínuos de DadosOrlando Junior
 

Mehr von Orlando Junior (20)

Árvores - Introdução e Conceitos Básicos
Árvores - Introdução e Conceitos BásicosÁrvores - Introdução e Conceitos Básicos
Árvores - Introdução e Conceitos Básicos
 
Um estudo sobre práticas arquiteturais em metodologias ágeis de desenvolvimen...
Um estudo sobre práticas arquiteturais em metodologias ágeis de desenvolvimen...Um estudo sobre práticas arquiteturais em metodologias ágeis de desenvolvimen...
Um estudo sobre práticas arquiteturais em metodologias ágeis de desenvolvimen...
 
Predição de Links em Redes Complexas usando o Classificador Naïve Bayes
Predição de Links em Redes Complexas usando o Classificador Naïve BayesPredição de Links em Redes Complexas usando o Classificador Naïve Bayes
Predição de Links em Redes Complexas usando o Classificador Naïve Bayes
 
Predição de Fluxos em Redes de Computadores - SBRC/WP2P+ 2014
Predição de Fluxos em Redes de Computadores - SBRC/WP2P+ 2014Predição de Fluxos em Redes de Computadores - SBRC/WP2P+ 2014
Predição de Fluxos em Redes de Computadores - SBRC/WP2P+ 2014
 
Investigação de Predição de Fluxos em Redes de Computadores
Investigação de Predição de Fluxos em Redes de ComputadoresInvestigação de Predição de Fluxos em Redes de Computadores
Investigação de Predição de Fluxos em Redes de Computadores
 
Predição de Fluxos em Redes de Computadores
Predição de Fluxos em Redes de ComputadoresPredição de Fluxos em Redes de Computadores
Predição de Fluxos em Redes de Computadores
 
Normalização em banco de dados
Normalização em banco de dadosNormalização em banco de dados
Normalização em banco de dados
 
Introdução à Engenharia de Requisitos
Introdução à Engenharia de RequisitosIntrodução à Engenharia de Requisitos
Introdução à Engenharia de Requisitos
 
O que é direito
O que é direitoO que é direito
O que é direito
 
Classes de Problemas P e NP
Classes de Problemas P e NPClasses de Problemas P e NP
Classes de Problemas P e NP
 
A Missa para não-católicos
A Missa para não-católicosA Missa para não-católicos
A Missa para não-católicos
 
Aprendizado de Máquina Supervisionado na Predição de Links em Redes Complexas...
Aprendizado de Máquina Supervisionado na Predição de Links em Redes Complexas...Aprendizado de Máquina Supervisionado na Predição de Links em Redes Complexas...
Aprendizado de Máquina Supervisionado na Predição de Links em Redes Complexas...
 
Sacramento da Penitência - Estrutura
Sacramento da Penitência - EstruturaSacramento da Penitência - Estrutura
Sacramento da Penitência - Estrutura
 
Web Server Controls e Banco de Dados
Web Server Controls e Banco de DadosWeb Server Controls e Banco de Dados
Web Server Controls e Banco de Dados
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Acessando Dados com ADO .NET
Acessando Dados com ADO .NETAcessando Dados com ADO .NET
Acessando Dados com ADO .NET
 
10 Mandamentos e Pecados Relacionados
10 Mandamentos e Pecados Relacionados10 Mandamentos e Pecados Relacionados
10 Mandamentos e Pecados Relacionados
 
Catequese da Missa Tridentina - Símbolos
Catequese da Missa Tridentina - SímbolosCatequese da Missa Tridentina - Símbolos
Catequese da Missa Tridentina - Símbolos
 
Verbos da Língua Inglesa - Observações preliminares
Verbos da Língua Inglesa - Observações preliminaresVerbos da Língua Inglesa - Observações preliminares
Verbos da Língua Inglesa - Observações preliminares
 
Mineração em Fluxos Contínuos de Dados
Mineração em Fluxos Contínuos de DadosMineração em Fluxos Contínuos de Dados
Mineração em Fluxos Contínuos de Dados
 

Programação dinâmica: resolução do problema do produto de cadeias de matrizes

  • 1. 1 INTRODUÇÃO Programação dinâmica é um paradigma de programação aplicado sobretudo a problemas de otimização. Embora a técnica seja semelhante ao princípio de divisão e conquista, a solução do problema - denominada solução ótima - é encontrada a partir de uma série de escolhas que são feitas pelo algoritmo durante a execução do processo. Sabe-se, todavia, que o método de resolução de um problema estritamente grande pelo princípio de divisão e conquista consiste em dividir o problema em subproblemas, tornando o problema original cada vez menor. Por outro lado, a programação dinâmica simplifica o problema como um todo. Sedgewick (1990) e Cormen et al. (2002) ressaltam a importância de se distinguir o termo “programação" transportado pelo nome da técnica estudada. Os autores não definem a técnica como um processo de escrita de código, mas referem-se a ela como um processo de formulação de restrições por parte do problema que a utiliza. Ademais, Sedgewick (idem) destaca duas dificuldades que podem surgir com a utilização da técnica: • Nem sempre pode ser possível combinar as soluções de problemas menores para formar a solução de um maior; • O número de pequenos problemas a serem resolvidos pode ser inaceitavelmente grande; Nota-se, a partir dessas características que limitam a técnica, a ponte que a distancia da estratégia de divisão e conquista: esta, em sua última etapa, necessariamente combina as soluções encontradas nos subproblemas resolvidos para encontrar a solução do problema maior. Este trabalho pretende apresentar como o paradigma da programação dinâmica funciona. Para isto, alguns algoritmos já existentes que utilizam essa técnica serão mencionados, particularizando um deles para ser comentado a fim de que seja possível compreender e ilustrar mentalmente a importância do estudo desse estilo de programação.
  • 2. 2 FUNDAMENTOS DE PROGRAMAÇÃO DINÂMICA Assim como outras áreas da ciência e da tecnologia, o estudo de algoritmos também possui seu dicionário de termos técnicos. A programação dinâmica, especialmente, utiliza esse dicionário e o complementa com seus próprios verbetes. Antes de apresentar e comentar alguns algoritmos que demonstram o funcionamento da programação dinâmica, este trabalho abordará neste capítulo a gama de termos que fundamenta a aplicação da técnica. 2.1 Solução ótima Um problema solucionável é aquele que possui solução. Ou seja, o problema é passível de ser resolvido e, mais, essa resolução é conhecida. Em geral, a solução de problemas computacionais não é única, mas é diversa e, muitas vezes, ilimitada. Os problemas da programação dinâmica são caracterizados por essa variedade de soluções existentes. Uma solução que existe e é ilimitada é chamada de solução ótima e existe apenas se as duas seguintes condições forem válidas: • Se a solução for possível: a solução considera ter todas as variáveis definidas para o problema; • Se a solução for ilimitada: ou seja, não tem tamanho, podendo crescer ou decrescer com o propósito de atender todas as restrições do problema. Em outras palavras, uma solução ótima é uma solução que otimiza a função-objetivo do problema (OLIVEIRA). Otimizar uma função é muito importante na utilização dessa estratégia. Como visto, uma das condições de existência de uma solução ótima é a sua não limitação em termos de crescimento. Computacionalmente falando, quanto maior for a entrada, maior será o custo do algoritmo. Portanto, uma solução ótima é aquela que resolve e otimiza o problema. 2.2 Elementos essenciais de algoritmos de programação dinâmica Cormen et al. (2002) separam em quatro etapas a construção de um algoritmo de programação dinâmica. São elas:
  • 3. 1. Caracterizar a estrutura de uma solução ótima; 2. Definir recursivamente o valor de uma solução ótima; 3. Calcular o valor de uma solução ótima em um processo bottom-up; e 4. Construir uma solução ótima a partir das informações calculadas. Caracterizar a estrutura de uma solução ótima significa definir previamente que os subproblemas do problema mais geral também serão resolvidos. Todas as vezes que isso ocorrer, é dito que o problema apresenta uma subestrutura ótima. Cormen et al. (2002) apresentam um método padronizado para a descoberta dessa subestrutura. O capítulo 3 deste trabalho aplicará e comentará cada um dos tópicos citados pelo método, além de descrever com maior detalhamento as quatro etapas da construção de um algoritmo de programação dinâmica. Para que a programação dinâmica se torne aplicável a um problema, dois importantes elementos conceituais devem satisfazê-lo, a fim de que ele seja otimizado. Um deles é a existência de uma subestrutura ótima que resolva os problemas internos do problema mais geral; o outro, chamado de subproblema superposto, tem a função de diminuir o espaço utilizado pelo algoritmo. Quando um algoritmo se utiliza de subproblemas superpostos, é dito que o seu espaço para a resolução de subproblemas deve ser tão pequeno que "um algoritmo recursivo para o problema resolve os mesmos subproblemas repetidas vezes, em lugar de sempre gerar novos subproblemas" (Cormen et al., 2002, p. 276). Em outras palavras, o uso da técnica da recursão proverá a resolução dos subproblemas uma única vez, sem gerá-los repetidamente e combiná- los no final. Com este entendimento, a programação dinâmica é separada e estudada independentemente da técnica de divisão e conquista. 3 OTIMIZAÇÃO DE PROBLEMAS: O PROBLEMA DO PRODUTO DE CADEIAS DE MATRIZES 3.1 Enunciado Um problema clássico da programação dinâmica é a multiplicação de cadeias de matrizes. Dada uma cadeia de matrizes M1, M2, M3, ..., Mk, com k elementos e tamanhos m1xn1, m2xn2, m3xn3, ..., mkxnk, respectivamente, a multiplicação dessa cadeia, com matrizes que possuem propriedade associativa, será dada por M1 . M2 . M3 . .... Mk.
  • 4. Matematicamente, o modo como uma matriz se associa a outra não influencia o resultado final da operação. Na computação, a associação de matrizes pode impactar o custo da solução desse problema. Embora, matematicamente, o modo de associação de uma matriz a outra não influencie o resultado final da operação, na computação, essa associação pode vir a impactar o custo da resolução desse problema. Exemplificando, realizar a multiplicação das duas últimas matrizes de uma cadeia em primeira instância poderá custar menos do que multiplicá-las ao final do processo. Na matemática, a existência de parênteses em dois elementos algébricos aplica a propriedade associativa, delimitando-os a serem resolvidos em primeira ordem. O do produto de cadeias de matrizes aplicado à programação dinâmica deve ser entendido como um problema que dificulta a multiplicação por conta da ordem disposta das matrizes. A solução geral do problema visa buscar a melhor ordem (ou seja, com menor custo computacional) para multiplicar as matrizes da sequência. 3.2 Resolução aplicada à programação dinâmica Como dito, o problema do produto de matrizes está na ordem em que serão efetuadas as operações. Este subcapítulo apresentará a resolução passo a passo do algoritmo conforme o método de construção de algoritmos de programação dinâmica mencionado em 2.2. A primeira etapa consiste em caracterizar a estrutura de uma solução ótima para o problema. Para que isso seja possível, uma subestrutura ótima deve ser encontrada antes a fim de minimizar o problema. Essa minimização deverá reduzir a resolução a ponto de torná-la tão pequena que se torne trivial. No caso da parentização de matrizes para um produto, a subestrutura ótima será a generalização de uma cadeia específica dentro da cadeia maior do problema. Para melhor ilustrar esse problema veja a Figura 1.
  • 5. Figura 1 - Ilustração da subestrutura ótima do problema do produto da cadeia de matrizes Fonte: Autor Como foi possível perceber na primeira etapa, qualquer lugar do produto da cadeia é válido com um lugar de parentização, já que, examinando cada um dos lugares, tem-se uma opção ótima. A partir desta já definida, a segunda etapa surge para generalizar a escolha feita pelo algoritmo. Recursivamente, a solução é criada para medir o custo desta para as soluções dos subproblemas. Por definição, o problema será trivial se a linha for igual à coluna. Utilizando a primeira etapa, é possível supor que a escolha de um lugar Mk para a parentização, enquanto i = j, será igual ao menor custo possível para executar o produto. Como i = j, tem-se apenas uma matriz; ou seja, k = i x j, ou Mixj. Para Sedgewick (1990, p. 600), o algoritmo que calcula o custo pode ser definido conforme a Listagem 1.
  • 6. Para i <- 1 a N passo 1 faça Para j <- i + 1 a N passo 1 faça custoi,j <- MaiorInteiro Fim-para Para i <- 1 a N passo 1 faça custoi,j <- 0 Fim-para Para j <- 1 a N passo 1 faça Para i <- 1 a N - j passo 1 faça Para k <- i + 1 a i + j passo 1 faça tempo <- custoi,k-1 + custok,i+j + ri * rk * ri+j+1 Se tempo < custoi,i+j então custoi,i+j <- tempo melhori,i+j <- k Fim-se Fim-para Fim-para Fim-para Fim-para Listagem 1 – Algoritmo de Sedgewick para o cálculo do custo de multiplicações Fonte: Autor “adaptado de” Sedgewick, 1990, p. 600
  • 7. Para i <- 1 a N passo 1 faça Para j <- i + 1 a N passo 1 faça custoi,j <- MaiorInteiro Fim-para Para i <- 1 a N passo 1 faça custoi,j <- 0 Fim-para Para j <- 1 a N passo 1 faça Para i <- 1 a N - j passo 1 faça Para k <- i + 1 a i + j passo 1 faça tempo <- custoi,k-1 + custok,i+j + ri * rk * ri+j+1 Se tempo < custoi,i+j então custoi,i+j <- tempo melhori,i+j <- k Fim-se Fim-para Fim-para Fim-para Fim-para Listagem 1 – Algoritmo de Sedgewick para o cálculo do custo de multiplicações Fonte: Autor “adaptado de” Sedgewick, 1990, p. 600