O que é Programação Dinâmica?

Dec 09 2022
Quando se trata de programação de computadores, a programação dinâmica é tão versátil quanto matemática. Richard Bellman criou a técnica nos anos 50 e, desde então, encontrou uso em tudo, desde a engenharia aeronáutica até a economia.

Quando se trata de programação de computadores, a programação dinâmica é tão versátil quanto matemática. Richard Bellman criou a técnica nos anos 50 e, desde então, encontrou uso em tudo, desde a engenharia aeronáutica até a economia.

Em ambos os contextos, a palavra se refere a dividir um tópico complicado em partes gerenciáveis. Decisões plurianuais normalmente se separam recursivamente. Na ciência da computação, um problema tem uma subestrutura ótima se puder ser tratado de maneira otimizada, dissecando-o em subproblemas e encontrando recursivamente as melhores soluções.

Existe uma relação entre o valor do problema principal e os valores dos subproblemas se os subproblemas puderem ser aninhados recursivamente dentro do problema principal e técnicas de programação dinâmica puderem ser usadas para resolver o problema principal. No campo da otimização, a equação de Bellman é uma maneira bem conhecida de falar sobre esse elo específico para uma melhor estratégia.

Você pode aprender engenharia de software com a ajuda de cursos online.

Otimização matemática

Ao decompor uma escolha complexa em uma série de escolhas incrementais, como é feito na programação dinâmica, um problema de otimização matemática pode se tornar muito mais gerenciável para operações. Para conseguir isso, definimos um conjunto de funções de valor V1, V2,…, Vn, cada uma tomando y como argumento para descrever o estado do sistema em um determinado instante no tempo I de 0 a n. Vn(y) é o valor no tempo n que foi adquirido do estado y. Usando uma conexão recursiva conhecida como equação de Bellman, podemos determinar os valores de Vi em períodos anteriores I = n1, n2,…, 2, 1. Maximizando uma função simples (muitas vezes a soma) do benefício de uma escolha em tempo I 1 e a função Vi no novo estado do sistema, podemos derivar Vi1 em qualquer estado y de Vi, onde I = 2,…, n. Este procedimento retorna Vi1 para os estados necessários, pois Vi já foi calculado para eles. E por último, o valor da solução ótima, V1, é encontrado na condição inicial do sistema. Refazendo os passos de cálculos anteriores, os valores ótimos das variáveis ​​de escolha podem ser recuperados um de cada vez.

Para que a programação dinâmica seja útil, um problema deve ter duas características: uma subestrutura ótima e subproblemas sobrepostos. O termo “dividir e conquistar” é usado para se referir a uma técnica na qual uma dificuldade é dividida em problemas menores e independentes e, em seguida, resolvidos combinando as melhores respostas para cada um. É por isso que não consideramos merge sort e rapid sort como dificuldades de programação dinâmica.

Um programa de certificação de engenharia de software pode aprimorar suas habilidades.

Um problema de otimização com uma subestrutura ótima pode ser resolvido combinando as soluções de seus subproblemas. Subestruturas ideais são normalmente definidas via recursão. Cada vértice intermediário ganhou o caminho mais curto p de um vértice u para um vértice v no grafo G=(V,E) é um exemplo de subestrutura ótima. Se o caminho p for o mais curto, ele pode ser particionado em dois caminhos, p1 de u para w e p2 de w para v, que também são os mais curtos entre seus respectivos pares de vértices. Assim, os algoritmos de Bellman-Ford e Floyd-Warshall usam recursão para encontrar os caminhos mais curtos.

Qual é a lógica por trás do uso de um método de programação dinâmica?

O procedimento da programação dinâmica é o seguinte:

  1. Ao fazê-lo, reduz a complexidade de todos os aspectos da edição original.
  2. Para resolver esses problemas menores, ele determina a melhor resposta possível.
  3. Ele acompanha as soluções para desafios menores (memoização). Memorização é o ato de lembrar as soluções para problemas menores.
  4. Ele os recicla de forma que a mesma parte do problema pode ser resolvida várias vezes.
  5. Depois de tudo isso, você precisa descobrir a resposta para a questão difícil.
  1. Subestruturas ótimas e problemas com subproblemas sobrepostos. Neste contexto, o termo “subestrutura ótima” refere-se a um método pelo qual problemas de otimização podem ser resolvidos integrando as melhores soluções para seus subproblemas constituintes.
  2. Como os resultados intermediários devem ser armazenados, a complexidade do espaço da programação dinâmica aumenta mesmo quando a complexidade do tempo diminui.