Problem dwóch sum w Pythonie

Problem dwóch sum w Pythonie
Problem z dwoma sumami jest wersja problemu podsumowego i jest powszechnym pytaniem programowania. Chociaż istnieje popularne rozwiązanie dynamicznego programowania dla problemu sumowego podzbioru, możemy skonstruować podejście czasowe O (N) dla dwóch problemów. Celem jest zidentyfikowanie wszystkich par dwóch liczb, które sumują się do określonej „S” w nieporozumieniu. Ten artykuł dotyczy słynnego zadania kodowania często zadawanego w wywiadach Pythona.

Rozwiązywanie problemów z dwoma sumami w Pythonie

Twoje podejście do tego tematu będzie określone przez twój poziom wiedzy specjalistycznej. Jedną metodą jest zapętlenie listy, porównując każdy element z resztą. Przejdziemy przez dwie różne techniki, których możesz użyć, aby rozwiązać ten problem.

Stwierdzenie problemu: Zwróć wszystkie pary dwóch liczb, których suma jest równa danym celu z szeregu liczb całkowitych. Możesz założyć, że każde dane wejściowe ma tylko jedną racjonalną odpowiedź i że ten sam element nie można ponownie wykorzystać.

Zacznijmy od wyjaśnienia stwierdzenia problemu, a następnie przejdź do możliwych rozwiązań. To naprawdę oznacza, że ​​musimy skonstruować funkcję, aby sprawdzić, czy istnieją jakieś wartości w tej tablicy, które sumują się do dostarczonego numeru docelowego. Podamy podstawowy przykład opisania problemu i rozwiązania.

Załóżmy, że otrzymaliśmy liczby [4, 6, 1, -5, 8], a suma docelowa wynosiła 9. Chcemy sprawdzić, czy ta tablica ma parę liczb, które dodają do dostarczonej sumy docelowej. Jak widać, procedura powinna zwrócić 8 i 1, co podsumowuje do 9 jako pożądana suma. Więc jaka jest najlepsza strategia radzenia sobie z tym problemem? Patrz następujące sekcje:

Rozwiązanie 1:

Pierwszą odpowiedzią, która przychodzi mi na myśl, jest dwukrotne powtórzenie pętli. Native Technika wykorzystuje dwie do pętli i dwukrotnie podróżują nad pełną tablicą, aby osiągnąć zamierzoną sumę.

Więc przechodziliśmy przez tablicę pojedynczo. W ten sposób musisz sprawdzić resztę tablicy, aby wiedzieć, czy suma jest równa wartości liczby określonej podczas przechodzenia przez wszystkie liczby.

Na przykład możemy kontynuować 4 i przejść przez resztę liczb [6, 1, -5, 8], aby ustalić, czy dodanie 4 do któregokolwiek z nich zapewnia 9, czy nie. Przejdziemy do następnego numeru, 6, i sprawdzimy liczby również [1, -5, 8], aby sprawdzić, czy dodanie numeru 6 do dowolnej liczby przedstawionych w tablicy daje 9, zanim kontynuujemy proces przez tablicę. Kod Pythona dla dwóch sumy problemu z dwiema pętlami pokazano poniżej.

def Twosumprob (my_arr, t_sum):
bo in Range (len (my_arr) -1):
dla J z zakresu (i, len (my_arr)):
Jeśli my_arr [i]+my_arr [j] == t_sum:
powrót (my_arr [i]. my_arr [j])
powrót[]

Chodzi o to, aby to wydać, że chociaż może nie być najbardziej wydajnym wykorzystaniem czasu. To wciąż realna opcja. Dwa dla pętli spowodują złożoność czasu O (N2), ponieważ podróżowanie dwa razy z wykorzystaniem dwóch dla pętli oznaczałoby przemieszczenie czasu N2 pod względem złożoności czasu. Ponieważ nie przechowujemy żadnych liczb całkowitych, złożoność przestrzeni wynosi O (1).

Drugie rozwiązanie jest metodą sortowania. Chociaż metoda może zająć więcej miejsca, jest bardziej wydajna.

Rozwiązanie 2:

W ten sposób wykorzystamy algorytm sortowania, ponieważ sortowanie wymaga kroków czasowych NLOG (n), co jest znacznie bardziej wydajne niż O (N2), zastosowane w poprzedniej strategii z dwiema pętlami.

Liczby tablicy są sortowane najpierw w tym podejściu. Będziemy mieli dwa wskazówki, jeden po lewej stronie pierwszej liczby w tablicy, a drugi po prawej stronie na ostatnim numerze w tablicy.

Ponownie uproszczymy ten problem, używając przykładu z poprzedniej tablicy [4, 6, 1, -5, 8]. Dane są następnie sortowane w celu odzwierciedlenia posortowanej tablicy [-5, 1, 4, 6, 8]. Nasz lewy wskaźnik (wskazany jako L_Pointer) zostanie ustawiony na -5 i nasz prawy wskaźnik (wskazany jako r_pointer) na 8. Zobaczymy, czy -5 + 8 jest równa 9, co jest określoną ogółem. Nie, ponieważ 3 jest mniej niż podana suma 9. Zmienimy nasz kursor w kolejności rosnącej, od lewej do prawej.

Teraz wrócimy do 1 i zobaczymy, czy dodanie 1 i 8 jest równe 9, co robi. To daje nam parę, której szukamy. Pary 1 i 8 zostaną teraz wydrukowane jako pary, które zapewnią wymagane dwie sumy numeryczne.

Porozmawiajmy trochę o tym problemie. Rozważ następujący scenariusz: Jeśli suma docelowa wynosi dziesięć, a suma jednego i ośmiu jest mniejsza niż dziesięć, lewy wskaźnik zostanie przeniesiony do czterech. W sumie 4 i 8 jest 12, co jest większe niż w sumie cel.

W rezultacie przesuniemy prawy wskaźnik w kolejności malejącej z prawej pozycji do lewej. Lewy wskaźnik ma teraz 4, a prawy wskaźnik przeniósł się do 6. W tej sytuacji osiągnęliśmy wymaganą parę 4 i 6, co da nam wymaganą kwotę 10. Poniższy kod Python pokazuje, w jaki sposób poprzednie informacje są wdrażane poniżej:

def Twosumprob (my_arr, t_sum):
my_arr.sortować()
l_pointer = 0
r_pointer = len (my_arr) -1
podczas L_Pointer < r_pointer:
c_sum = my_arr [l_pointer]+my_arr [r_pointer]
Jeśli c_sum == t_sum:
return (my_arr [l_pointer], my_arr [r_pointer])
Elif C_Suml_pointer+= 1
w przeciwnym razie:
r_pointer- = 1
powrót[]

Wykorzystujemy O (NLOGN) pod względem złożoności czasu z powodu sortowania, co jest lepsze niż metoda poprzedniego rozwiązania, i jest nieco droższy, ponieważ wykorzystuje O (NLOGN).

Wniosek:

W tym artykule zbadaliśmy znany problem Pythona dwa sum. Dodaliśmy dwa rozwiązania, aby rozwiązać ten problem z sumą w Pythonie. Te przykłady można stosować na różne sposoby zgodnie z potrzebami użytkownika. Mamy nadzieję, że znalazłeś artykuł za pomocny. Sprawdź inne artykuły w Linux, aby uzyskać więcej wskazówek i informacji.