Zwei Summenproblem in Python

Zwei Summenproblem in Python
Das Problem mit zwei Summen ist eine Version des Summenproblems der Untergruppe und eine gemeinsame Programmierfrage. Obwohl es eine beliebte dynamische Programmierlösung für das Problem der Untergruppe gibt. Das Ziel ist es, alle Paare von zwei Zahlen zu identifizieren, die sich zu einem bestimmten „S“ in einem ungeortierten Array summieren. In diesem Artikel geht es um eine berühmte Codierungsaufgabe, die häufig in Python -Interviews gefragt wird.

Lösen von zwei Summenproblemen in Python

Ihr Ansatz zu diesem Thema wird durch Ihr Fachwissen festgelegt. Eine Methode besteht darin, die Liste zu durchlaufen und jedes Element mit dem Rest zu vergleichen. Wir werden zwei verschiedene Techniken durchlaufen, mit denen Sie dieses Problem beheben können.

Problemstellung: Geben Sie alle Paare von zwei Zahlen zurück, deren Sum. Sie können davon ausgehen, dass jeder Eingang nur eine rationale Antwort hat und dass dasselbe Element nicht wiederverwendet werden kann.

Beginnen wir mit der Erläuterung der Problemanweisung und gehen Sie dann zu den möglichen Lösungen über. Dies bedeutet wirklich, dass wir eine Funktion erstellen müssen, um zu überprüfen, ob in diesem Array Werte vorhanden sind. Wir werden ein grundlegendes Beispiel zur Beschreibung des Problems und der Lösung geben.

Angenommen, wir erhielten die Zahlen [4, 6, 1, -5, 8], und die Zielsumme betrug 9. Wir möchten sehen, ob dieses Array ein Zahlenpaar enthält, die zur gelieferten Zielsumme hinzufügen. Wie Sie sehen können, sollte die Prozedur 8 und 1 zurückgeben, was bis zu 9 als die gewünschte Summe beträgt. Was ist also die beste Strategie für den Umgang mit diesem Thema? Siehe folgende Abschnitte:

Lösung 1:

Die erste Antwort, die mir in den Sinn kommt, besteht darin, die Schleife zweimal zu wiederholen. Die native Technik verwendet zwei für Schleifen und wandert zweimal über das gesamte Array, um die beabsichtigte Summe zu erreichen.

Also gingen wir nach dem anderen durch die Array. Auf diese Weise müssen Sie den Rest des Arrays überprüfen, um zu wissen, ob die Summe dem Zahlenwert entspricht.

Zum Beispiel können wir mit 4 fortfahren und uns durch die restlichen Zahlen [6, 1, -5, 8] arbeiten, um festzustellen, ob das Hinzufügen von 4 zu einem von ihnen 9 liefert oder nicht. Wir werden zur nächsten Nummer 6, 6, und überprüft die Zahlen ebenfalls [1, -5, 8], um festzustellen, ob das Hinzufügen der Nummer 6 zu einer der im Array angegebenen Zahlen 9 hinzuge. Der Python -Code für ein zwei Summenproblem mit zwei für Loops ist unten angezeigt.

Def TwosumProb (my_arr, t_sum):
Denn ich in Reichweite (Len (my_arr) -1):
für j in Reichweite (ich, len (my_arr)):
Wenn my_arr [i]+my_arr [j] == t_sum:
return (my_arr [i]. my_arr [j])
zurückkehren[]

Die Idee ist, das zu ermitteln. Es ist immer noch eine praktikable Option. Zwei für die Schleife führen zu einer Zeitkomplexität von O (N2), da die zweimalige Verwendung von zwei für die Loop die N2 -Zeit in Bezug auf die Zeitkomplexität bedeuten würde. Da wir keine Ganzzahlen speichern, ist die Raumkomplexität O (1).

Die zweite Lösung ist eine Sortiermethode. Obwohl die Methode möglicherweise mehr Platz einnimmt, ist sie ohne Zweifel effizienter.

Lösung 2:

Wir werden den Sortieralgorithmus auf diese Weise nutzen, da die Sortierung Nlog (n) Zeitschritte erfordert, was erheblich effizienter ist als O (N2), das in der vorherigen Strategie mit zwei für Loops verwendet wird.

Die Nummern des Arrays sind in diesem Ansatz zuerst sortiert. Wir werden zwei Zeiger haben, einen links an der ersten Nummer im Array und die andere rechts auf der letzten Nummer im Array.

Wir werden dieses Problem erneut vereinfachen, indem wir das vorherige Array -Beispiel von [4, 6, 1, -5, 8] verwenden. Die Daten werden dann sortiert, um ein sortiertes Array von [-5, 1, 4, 6, 8] widerzuspiegeln]. Unser linker Zeiger (als l_pointer angegeben) wird auf -5 und unser rechter Zeiger (als r_pointer angegeben) auf 8 eingestellt. Wir werden sehen, ob -5 + 8 gleich 9 ist, was die angegebene Gesamtsumme ist. Nein, weil 3 weniger als die angegebene Summe von 9 ist. Wir werden unseren Cursor in aufsteigender Reihenfolge von links nach rechts verschieben.

Jetzt gehen wir zurück zu 1 und sehen, ob die Zugabe von 1 und 8 9 entspricht, was es tut. Dies gibt uns das Paar, das wir suchen. Die Paarungen 1 und 8 werden nun als die Paare gedruckt, die die erforderlichen zwei numerischen Summen liefern.

Lassen Sie uns ein bisschen mehr über dieses Problem sprechen. Betrachten Sie das folgende Szenario: Wenn die Zielsumme zehn ist und die Summe von einem und acht weniger als zehn beträgt, wird der linke Zeiger in aufsteigender Reihenfolge auf vier bewegt. Die Gesamtsumme von 4 und 8 entspricht 12, was größer ist als das Ziel, insgesamt.

Infolgedessen verschieben wir den rechten Zeiger in absteigender Reihenfolge von der rechten Position nach links. Der linke Zeiger ist jetzt bei 4, während sich der rechte Zeiger auf 6 bewegt hat. In dieser Situation haben wir das erforderliche Paar von 4 und 6 erreicht, die uns den erforderlichen Betrag von 10 geben werden. Der folgende Python -Code zeigt, wie die vorherigen Informationen unten implementiert werden:

Def TwosumProb (my_arr, t_sum):
my_arr.Sortieren()
l_pointer = 0
r_pointer = len (my_arr) -1
während l_pointer < r_pointer:
c_sum = my_arr [l_pointer]+my_arr [r_pointer]
Wenn c_sum == t_sum:
return (my_arr [l_pointer], my_arr [r_pointer])
elif c_suml_pointer+= 1
anders:
r_pointer- = 1
zurückkehren[]

Wir verwenden O (NLOGN) in Bezug auf die Zeitkomplexität aufgrund von Sortierung, was besser ist als die Methode der vorherigen Lösung, und es ist etwas teurer, weil es O (NLogn) verwendet.

Abschluss:

In diesem Artikel haben wir das bekannte Python zwei Summenprobleme untersucht und zwei praktikable Lösungen für Sie angeboten. Wir haben zwei Lösungen hinzugefügt, um dieses zwei Summenproblem in Python zu beheben. Diese Beispiele können auf unterschiedliche Weise entsprechend den Anforderungen des Benutzers angewendet werden. Wir hoffen, Sie haben Artikel hilfreich gefunden. Weitere Tipps und Informationen finden Sie in anderen Linux -Hinweisartikeln.