Deux problèmes de somme dans Python

Deux problèmes de somme dans Python
Le problème des deux somme est une version du problème de somme sous-ensemble et est une question de programmation commune. Bien qu'il existe une solution de programmation dynamique populaire pour le problème de somme sous-ensemble, nous pouvons construire une approche temporelle O (n) pour le problème des deux somme. L'objectif est d'identifier toutes les paires de deux nombres qui s'ajoutent à un certain «S» dans un tableau non trié. Cet article concerne une célèbre tâche de codage fréquemment demandée dans les interviews Python.

Résolution de deux problèmes de somme dans Python

Votre approche de ce sujet sera déterminée par votre niveau d'expertise. Une méthode consiste à parcourir la liste, en comparant chaque élément au reste. Nous allons passer par deux techniques différentes que vous pouvez utiliser pour remédier à ce problème.

Déclaration de problème: Renvoyez toutes les paires de deux nombres dont la somme équivaut à une cible donnée d'un tableau d'entiers. Vous pouvez supposer que chaque entrée n'a qu'une seule réponse rationnelle et que le même élément ne peut pas être réutilisé.

Commençons par expliquer l'énoncé du problème, puis passant aux solutions possibles. Cela signifie vraiment que nous devons construire une fonction pour vérifier s'il y a des valeurs dans ce tableau qui s'ajoutent au numéro cible fourni. Nous fournirons un exemple de base pour décrire le problème et la solution.

Supposons qu'on nous ait donné les chiffres [4, 6, 1, -5, 8], et la somme cible était 9. Nous voulons voir si ce tableau a une paire de nombres qui ajoutent à la somme cible fournie. Comme vous pouvez le voir, la procédure doit retourner 8 et 1, qui résume jusqu'à 9 comme total souhaité. Alors, quelle est la meilleure stratégie pour traiter ce problème? Reportez-vous aux sections suivantes:

Solution 1:

La première réponse qui vient à l'esprit est de répéter la boucle deux fois. La technique native en utilise deux pour les boucles et voyager deux fois sur le tableau complet pour atteindre la somme prévue.

Alors, nous traversions le tableau un à la fois. De cette manière, vous devez vérifier le reste du tableau pour savoir si la somme est égale à la valeur du nombre spécifié tout en passant par tous les nombres.

Par exemple, nous pouvons continuer avec 4 et nous frayer un chemin à travers le reste des chiffres [6, 1, -5, 8] pour déterminer si l'ajout de 4 à l'un d'eux fournit 9 ou non. Nous passerons au numéro suivant, 6, et vérifierons également les nombres [1, -5, 8] pour voir si l'ajout du numéro 6 à l'un des nombres présentés dans le tableau donne 9, avant de poursuivre le processus via le tableau. Le code Python pour un problème de deux somme avec deux pour Loops est illustré ci-dessous.

def twosumpRob (my_arr, t_sum):
Pour I à Range (Len (My_Arr) -1):
pour J dans la gamme (I, Len (my_arr)):
Si my_arr [i] + my_arr [j] == t_sum:
retour (my_arr [i]. my_arr [j])
retour[]

L'idée est de faire ressortir que cela peut ne pas être l'utilisation la plus efficace du temps. C'est toujours une option viable. Deux pour Loop entraîneront une complexité temporelle d'O (N2), car le voyage deux fois en utilisant deux pour la boucle signifierait traverser le temps de N2 en termes de complexité de temps. Parce que nous ne stockons pas entiers, la complexité de l'espace est O (1).

La deuxième solution est une méthode de tri. Bien que la méthode puisse prendre plus de place, elle est plus efficace sans aucun doute.

Solution 2:

Nous utiliserons l'algorithme de tri de cette manière car le tri nécessite des pas de temps NLOG (n), ce qui est considérablement plus efficace que O (N2), employé dans la stratégie précédente avec deux pour les boucles.

Les numéros du tableau sont triés en premier dans cette approche. Nous aurons deux pointeurs, l'un à gauche au premier numéro du tableau et l'autre à droite au dernier numéro du tableau.

Nous simplifierons à nouveau ce problème en utilisant l'exemple de tableau précédent de [4, 6, 1, -5, 8]. Les données sont ensuite triées pour refléter un tableau trié de [-5, 1, 4, 6, 8]. Notre pointeur gauche (indiqué comme l_pointer) sera défini sur -5 et notre pointeur droit (indiqué comme r_pointer) sur 8. Nous verrons si -5 + 8 est égal à 9, ce qui est le total spécifié. Non, car 3 est inférieur à la somme indiquée de 9. Nous déplacerons notre curseur dans l'ordre croissant, de gauche à droite.

Maintenant, nous reviendrons à 1 et verrons si l'ajout de 1 et 8 est égal à 9, ce qu'il fait. Cela nous donne la paire que nous recherchons. Les couples 1 et 8 seront désormais imprimés comme les paires qui fourniront les deux sommes numériques requises.

Parlons un peu plus de ce problème. Considérez le scénario suivant: si la somme cible est dix et la somme d'un et huit est inférieure à dix, le pointeur gauche sera déplacé jusqu'à quatre dans l'ordre croissant. Le total de 4 et 8 est égal à 12, ce qui est supérieur au total de l'objectif.

En conséquence, nous allons déplacer le pointeur droit par ordre décroissant de la position droite à gauche. Le pointeur gauche est maintenant à 4, tandis que le pointeur droit est passé à 6. Dans cette situation, nous avons atteint la paire requise de 4 et 6, ce qui nous donnera le montant requis de 10. Le code Python suivant montre comment les informations précédentes sont implémentées ci-dessous:

def twosumpRob (my_arr, t_sum):
my_arr.trier()
l_pointer = 0
r_pointer = len (my_arr) -1
tandis que l_pointer < r_pointer:
c_sum = my_arr [l_pointer] + my_arr [r_pointer]
Si c_sum == t_sum:
return (my_arr [l_pointer], my_arr [r_pointer])
elif c_suml_pointer + = 1
autre:
r_pointer- = 1
retour[]

Nous utilisons O (nlogn) en termes de complexité du temps en raison du tri, ce qui est meilleur que la méthode de la solution précédente, et il est un peu plus cher car il utilise O (NLOGN).

Conclusion:

Dans cet article, nous avons examiné le problème bien connu Python à deux sommes et proposé deux solutions viables à considérer. Nous avons ajouté deux solutions pour résoudre ce problème de deux sommes dans Python. Ces exemples peuvent être appliqués de différentes manières selon les besoins de l'utilisateur. Nous espérons que vous avez trouvé un article utile. Consultez d'autres articles sur les conseils Linux pour plus de conseils et d'informations.