JohKemPo / Programacao-Dinamica

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

PROGRAMAÇÃO DINÂMICA E SEUS ALGORITMOS [ EM PRODUÇÃO ]

- Repositório de Estudos sobre programação dinâmica -


  Bem-vindo ao Repositório de Estudos de Programação Dinâmica e seus Algoritmos! Este repositório foi criado com o objetivo de ser material de ensino sobre programação dinâmica e seus algoritmos.



S U M A R I O


  1. Introdução
  2. Algoritmos
  3. Referências Bibliográcas

Introdução


 A programação dinâmica é uma técnica de otimização utilizada para resolver problemas que podem ser divididos em subproblemas menores e onde as soluções para esses subproblemas podem ser reutilizadas para resolver o problema maior. Essa abordagem ajuda a evitar o cálculo repetitivo de soluções para os mesmos subproblemas, economizando tempo computacional. Aqui estão alguns dos algoritmos e problemas clássicos associados à programação dinâmica:

Algoritmos


Algoritmo de Fibonacci com Programação Dinâmica:

  • O problema de calcular o N-ésimo número de Fibonacci de forma eficiente.
  • O algoritmo de Fibonacci com programação dinâmica armazena os resultados dos números de Fibonacci já calculados para evitar recálculos.

Algoritmo de Mochila (Knapsack Problem):

  • Um problema de otimização onde se deve selecionar itens com valores e pesos específicos para maximizar o valor total, com uma capacidade de peso limitada.
  • A programação dinâmica é frequentemente usada para resolver este problema, calculando o valor máximo que pode ser alcançado em diferentes capacidades de mochila.

Algoritmo de Edição de Distância (Levenshtein Distance):

  • Usado para calcular a distância de edição (ou distância de Levenshtein) entre duas sequências, que é o número mínimo de operações (inserções, exclusões ou substituições) necessárias para transformar uma sequência na outra.
  • A programação dinâmica é empregada para encontrar a solução eficiente.

Algoritmo de Longest Common Subsequence (LCS):

  • Usado para encontrar a subsequência comum mais longa entre duas sequências (strings ou listas).
  • A programação dinâmica é aplicada para encontrar o comprimento da LCS e, em seguida, reconstruir a subsequência.

Algoritmo de Cadeia de Matrizes (Matrix Chain Multiplication):

  • Envolve determinar a ordem de multiplicação de várias matrizes para minimizar o número de operações de multiplicação.
  • A programação dinâmica é usada para encontrar a ordem ideal de multiplicação.

Algoritmo de Caminho Mais Curto em Grafos (Dijkstra e Floyd-Warshall):

  • Para encontrar o caminho mais curto entre dois vértices em um grafo ponderado, como em problemas de roteamento de redes ou navegação.
  • A programação dinâmica pode ser usada em variantes desses algoritmos.

Algoritmo de Crescimento de Sequências (Longest Increasing Subsequence):

  • Para encontrar a subsequência crescente mais longa em uma sequência de números.
  • A programação dinâmica é usada para calcular o tamanho da subsequência e, em seguida, reconstruí-la.

Algoritmo de Partição de Palavras (Word Break Problem):

  • Usado para determinar se uma string pode ser dividida em palavras presentes em um dicionário.
  • A programação dinâmica ajuda a verificar a divisibilidade da string.

 Os algoritmos FP-Max, Apriori e FP-Growth não são algoritmos de programação dinâmica. Eles pertencem ao campo da mineração de dados e são usados para resolver problemas de mineração de regras de associação em conjuntos de dados transacionais. A programação dinâmica é uma técnica de otimização que se concentra na resolução de problemas de otimização divididos em subproblemas menores, enquanto os algoritmos mencionados se concentram na descoberta de padrões frequentes em dados.

Algoritmo FP-Max

 O FP-Max é uma variação do algoritmo FP-Growth e é usado para encontrar conjuntos de itens frequentes que não são subconjuntos de outros conjuntos frequentes. Ele não emprega programação dinâmica, mas sim técnicas de estruturas de dados eficientes para identificar padrões frequentes.

Apriori

 O algoritmo Apriori é usado para a mineração de regras de associação em dados transacionais. Ele é um dos algoritmos pioneiros nessa área e baseia-se em técnicas de geração de candidatos e poda para identificar regras de associação frequentes. Assim como o FP-Max e o FP-Growth, o Apriori não faz uso de programação dinâmica.

FP-Growth

 O FP-Growth é um algoritmo de mineração de dados que se baseia em uma estrutura de dados chamada "Árvore de Projeto de Padrões" (FP-Tree) para encontrar padrões frequentes em dados. Ele também não utiliza programação dinâmica, mas é eficiente na identificação de padrões frequentes.

Referências Bibliográficas



Equipe


Desenvolvedor GitHub LinkedIn
👤 João Vitor Moraes https://github.com/JohKemPo https://www.linkedin.com/in/joao-vitor-de-moraes/

About

License:MIT License