Bienvenue dans notre série de blogs sur la résolution de problèmes dans le génie logiciel moderne !
Dans la première partie, nous avons exploré le Modèle de compteur de fréquence, une technique puissante pour optimiser les algorithmes en comptant efficacement la fréquence des éléments. Si vous l'avez manqué ou si vous souhaitez un rappel rapide, n'hésitez pas à le consulter avant de continuer.
Dans cette partie, nous allons plonger dans un autre modèle essentiel : le modèle multipointeur. Ce modèle est inestimable lorsqu'il s'agit de scénarios dans lesquels plusieurs éléments doivent être comparés, recherchés ou parcourus simultanément. Explorons comment cela fonctionne et où vous pouvez l'appliquer pour améliorer l'efficacité de votre code.
Le modèle multipointeur est une technique utilisée dans la conception d'algorithmes où plusieurs pointeurs (ou itérateurs) sont utilisés pour parcourir des structures de données telles que des tableaux ou des listes chaînées. Au lieu de s'appuyer sur un seul pointeur ou une seule boucle, ce modèle utilise deux ou plusieurs pointeurs qui se déplacent dans les données à des vitesses différentes ou à partir de différents points de départ.
Exemple de problème
Écrivez une fonction appelée sumZero qui accepte un tableau trié d'entiers. La fonction doit trouver la première paire où la somme est nulle. Si une telle paire existe, renvoie un tableau qui inclut les deux valeurs ; sinon, renvoie non défini.
sumZero([-3,-2,-1,0,1,2,3]) //output: [-3, 3] sumZero([-2,0,1,3]) //output: undefined sumZero([-4, -3, -2, -1, 0, 1, 2, 5]) //output: [-2, 2]
Solution de base
function sumZero(arr){ for (let i = 0; iComplexité temporelle - O(N^2)
Solution utilisant un modèle multipointeur
étape 1 : Comprendre le problème
Nous devons trouver deux nombres dans un tableau **sorted dont la somme donne zéro. Puisque le tableau est trié, nous pouvons profiter de cet ordre pour trouver la solution plus efficacement.étape 2 : initialiser deux pointeurs
Configurez deux pointeurs : l'un (gauche) commençant au début du tableau et l'autre (droite) commençant à la fin.Exemple:
Array: [-4, -3, -2, -1, 0, 1, 2, 5] Left Pointer (L): -4 Right Pointer (R): 5Étape 3 : Calculer la somme des valeurs aux pointeurs
Ajoutez les valeurs aux pointeurs gauche et droit pour obtenir la sommeSum = -4 5 = 1Étape 4 : Comparez la somme avec zéro
Sum is 1 > 0, so move the right pointer left: Array: [-4, -3, -2, -1, 0, 1, 2, 5] Left Pointer (L): -4 Right Pointer (R): 2
New Sum = -4 2 = -2 Sum is -2Étape 5 : Répétez le processus
Continuez à déplacer les pointeurs et à calculer la somme jusqu'à ce qu'ils se rencontrent ou qu'une paire soit trouvée.New Sum = -3 2 = -1 Sum is -1La somme est nulle, donc la fonction renvoie [-2, 2].
Si la boucle se termine sans trouver une telle paire, renvoie undefined.
Code final
function sumZero(arr) { let left = 0; // Initialize the left pointer at the start of the array let right = arr.length - 1; // Initialize the right pointer at the end of the array while (left 0) { // If the sum is greater than zero, move the right pointer left right--; } else { // If the sum is less than zero, move the left pointer right left ; } } return undefined; // If no pair is found, return undefined }NOTE:
Complexité temporelle : O(n) – La fonction est efficace et évolue linéairement avec la taille du tableau.
Complexité spatiale : O(1) – La fonction utilise une quantité minimale de mémoire supplémentaire.Conclusion
Le modèle multipointeur est une technique puissante pour résoudre des problèmes impliquant la recherche, la comparaison ou la manipulation d'éléments dans une structure de données triée. En utilisant plusieurs pointeurs qui se rapprochent les uns des autres, nous pouvons améliorer considérablement l'efficacité des algorithmes, réduisant ainsi la complexité temporelle de O(n²) à O(n) dans de nombreux cas. Ce modèle est polyvalent et peut être appliqué à un large éventail de problèmes, ce qui en fait une stratégie essentielle pour optimiser les performances de votre code.
Restez à l'écoute de notre prochain article, où nous plongerons dans le Modèle de fenêtre coulissante, un autre outil essentiel pour résoudre les problèmes impliquant des segments de données dynamiques. C'est un modèle incroyablement utile qui peut vous aider à résoudre facilement des défis encore plus complexes !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3