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):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):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.