La programmation dynamique est une idée algorithmique couramment utilisée qui peut être utilisée pour résoudre de nombreux problèmes pratiques. Cet article présentera comment utiliser les algorithmes de programmation dynamique pour résoudre le problème de la sous-séquence d'augmentation la plus longue et fournir des exemples de code spécifiques.
Le problème de sous-séquence ascendant le plus long fait référence à la recherche d'une sous-séquence dans une séquence entière donnée afin que les éléments de la sous-séquence soient organisés par ordre incrémentiel et aient la longueur la plus longue. Par exemple, dans la séquence [10, 22, 9, 33, 21, 50, 41, 60, 80], la séquence ascension la plus longue est [10, 22, 33, 50, 60, 80], avec une longueur de 6.
Les algorithmes de programmation dynamique adoptent généralement une approche ascendante, résolvant d'abord les sous-problèmes, puis résolvant progressivement des problèmes majeurs. Pour le problème de sous-séquence ascendant le plus long, nous pouvons définir DP [i] pour représenter la longueur de la sous-séquence ascendante la plus longue se terminant par le i-th element. Alors l'équation de transition de l'État est:
dp [i] = max (dp [j]) + 1, où 0 ≤ j <i
Premièrement, nous définissons un DP de tableau, initialisez tous les éléments à 1, indiquant que chaque élément lui-même est une sous-séquence ascendante. Ensuite, traversez les numéros de séquence entière d'entrée de gauche à droite, pour chaque élément num [i], puis traverser tous les éléments num [J] entre 0 et I-1. Si nums [j] <nums [i] est satisfait, la valeur de dp [i] est mise à jour. Ensuite, nous avons juste besoin de parcourir l'ensemble du tableau DP et de trouver le plus grand élément, c'est-à-dire la longueur de la plus longue subséquence ascendante.
Fonction LengthOflis ($ nums) { $ n = count ($ nums); $ dp = array_fill (0, $ n, 1); pour ($ i = 1; $ i <$ n; $ i ++) { pour ($ j = 0; $ j <$ i; $ j ++) { if ($ nums [$ j] <$ nums [$ i]) { $ dp [$ i] = max ($ dp [$ i], $ dp [$ j] + 1); } } } $ maxlen = 0; pour ($ i = 0; $ i <$ n; $ i ++) { $ maxlen = max ($ maxlen, $ dp [$ i]); } retourner $ maxlen; } $ nums = tableau (10, 22, 9, 33, 21, 50, 41, 60, 80); $ result = longueuroflis ($ nums); Écho "La longueur de la séquence ascension la plus longue est:". $ résultat;
Dans le code ci-dessus, la fonction de fonction de la fonction prend une séquence entière num comme argument et renvoie la longueur de la plus longue subséquence ascendante. Dans l'exemple donné, la sortie est de 6.
Grâce à des algorithmes de programmation dynamique, nous pouvons résoudre efficacement le problème de la plus longue subséquence ascendante. Dans les applications pratiques, cet algorithme est également largement utilisé, tel que l'optimisation des moteurs de recherche, la compression des données et la transmission du réseau.
J'espère que cet article pourra vous aider à comprendre les algorithmes de programmation dynamique et à être appliqué de manière flexible aux problèmes pratiques.