Programmation dynamique

Résolvez des problèmes d'optimisation complexes en les décomposant en sous-problèmes plus simples se chevauchant. Maîtrisez les approches de mémoïsation et ascendantes à travers des problèmes classiques comme les suites de Fibonacci, la plus longue sous-séquence commune, les problèmes du sac à dos et la multiplication en chaîne de matrices. Apprenez comment la programmation dynamique transforme des solutions en temps exponentiel en algorithmes en temps polynomial.

9 algorithmes

Multiplication en chaîne de matrices

Advanced

Trouve la manière optimale de parenthéser une chaîne de matrices pour minimiser le nombre de multiplications scalaires. Problème classique de programmation dynamique du chapitre 15 de CLRS.

O(n³)
O(n²)
dynamic-programmingoptimization
Start Learning

Fibonacci (Programmation dynamique)

Beginner

Calcule efficacement les nombres de Fibonacci en utilisant la programmation dynamique pour éviter les calculs redondants. Démontre la puissance de la mémoïsation pour transformer une solution récursive en temps exponentiel en un algorithme en temps linéaire. Une introduction classique aux concepts de programmation dynamique.

O(n)
O(n)
dynamic-programmingmemoization
Start Learning

Plus longue sous-séquence commune (LCS)

Intermediate

Trouve la plus longue sous-séquence présente dans deux séquences dans le même ordre. Utilise la programmation dynamique pour construire une table de solution. Les applications incluent l'alignement de séquences ADN, les outils de différence de fichiers (diff) et la détection de plagiat.

O(m × n)
O(m × n)
dynamic-programmingstrings
Start Learning

Distance d'édition (Levenshtein)

Intermediate

Algorithme de programmation dynamique qui calcule le nombre minimum d'éditions de caractères uniques (insertions, suppressions, substitutions) nécessaires pour transformer une chaîne en une autre. Fondamental dans la correction orthographique, l'alignement de séquences ADN et le traitement du langage naturel.

O(m × n)
O(m × n)
dynamic-programmingstrings
Start Learning

Problème du sac à dos 0/1

Intermediate

Problème classique de programmation dynamique où vous devez sélectionner des objets avec des poids et des valeurs donnés pour maximiser la valeur totale tout en restant dans une capacité de poids. Chaque objet ne peut être pris qu'une seule fois (0/1). Les applications incluent l'allocation de ressources, l'optimisation de portefeuille et le chargement de cargaisons.

O(n × W)
O(n × W)
dynamic-programmingoptimization
Start Learning

Plus longue sous-séquence croissante

Intermediate

Trouvez la plus longue sous-séquence où tous les éléments sont en ordre croissant. Problème classique de programmation dynamique.

O(n log n)
O(n)
dynamic-programmingbinary-search
Start Learning

Algorithme de Kadane (Sous-tableau maximum)

Intermediate

Algorithme élégant de programmation dynamique qui trouve le sous-tableau contigu avec la somme maximale en temps O(n). Combine les principes gloutons et de PD en décidant à chaque étape s'il faut étendre le sous-tableau actuel ou en commencer un nouveau. Essentiel pour l'optimisation des profits boursiers, le traitement du signal et la compréhension des techniques d'optimisation PD.

O(n)
O(1)
dynamic-programminggreedy
Start Learning

Problème du rendu de monnaie

Intermediate

Problème classique de programmation dynamique qui trouve le nombre minimum de pièces nécessaires pour atteindre un montant cible. Démontre la sous-structure optimale où la solution dépend des solutions pour des montants plus petits. Largement appliqué dans les systèmes financiers, les distributeurs automatiques et l'optimisation de l'allocation des ressources.

O(amount × coins)
O(amount)
dynamic-programmingoptimization
Start Learning

Partitionnement en palindromes

Advanced

Problème de programmation dynamique qui trouve le nombre minimum de coupes nécessaires pour partitionner une chaîne en sous-chaînes palindromiques. Utilise la PD pour précalculer quelles sous-chaînes sont des palindromes, puis trouve les coupes optimales. Les applications incluent la segmentation de texte, l'analyse de séquences ADN et les problèmes d'optimisation de chaînes.

O(n²)
O(n²)
dynamic-programmingstrings
Start Learning

💡 Conseil d'apprentissage

Commencez par les algorithmes de niveau débutant pour construire vos bases, puis progressez vers les sujets intermédiaires et avancés. Chaque algorithme comprend des visualisations interactives, une analyse de complexité et des exemples de code dans plusieurs langages.