Zastanawiam się, jaka jest złożoność czasu metody pop obiektów listy w Pythonie (w szczególności w CPython). Również wartość N dla list.pop (N) wpływa na złożoność?Jaka jest złożoność czasu pojawiania się elementów z listy w Pythonie?
Odpowiedz
dla ostatniego elementu powinno być O (1), ponieważ wystarczy zwrócić element, do którego odnosi się ostatni element tablicy i zaktualizować indeks ostatniego elementu. Spodziewałbym się, że dowolny element będzie O (N) i wymagałby średnio N/2 operacji, ponieważ musiałbyś przenieść dowolne elementy poza element, który usuwasz jedną pozycję w tablicy wskaźników.
Tak, to jest O (1) pop ostatni element listy Python i O (N) do pop jest arbitralną elementu (ponieważ cała reszta listy musi zostać przesunięte).
Oto wielki artykuł na temat listy Python są przechowywane i manipulowane: http://effbot.org/zone/python-list.htm
Aby to wyjaśnić, list.pop (0) to O (n), a list.pop() to O (1). –
Aby uzyskać obie operacje w O (1), użyj collections.deque zobacz [tutaj] (https://wiki.python.org/moin/TimeComplexity) – galath
Odpowiedź jest krótka spojrzeć tutaj: https://wiki.python.org/moin/TimeComplexity
Bez argumentów pop swoją O (1)
z Argument pop:
- Średni czas Złożoność o (k) (k oznacza liczbę przekazywana jako argument dla pop
- zamortyzowany najgorszym przypadku czas złożoność O (k)
- Najgorszy czas sprawa złożoność O (n)
Średnia złożoność czas:
każdym razem, gdy umieścić w wartość złożoności czasowej tej operacji to O (n - k).
Na przykład, jeśli masz listę 9 pozycji niż usunięcie z końca listy jest 9 operacje i oderwaniem od początku lista jest 1 operacji (usunięcie indeksu 0TH i przenoszenie wszystkich inne elementy do ich bieżącego indeksu - 1)
Ponieważ n - k dla środkowego elementu listy jest k operacji, średnia może być skrócona do O (k).
Innym sposobem, aby o tym pomyśleć, jest wyobrazić sobie, że każdy indeks został usunięty z listy 9 przedmiotów jeden raz. To byłoby w sumie 45 operacji. (9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 45)
45 jest równe O (nk), a ponieważ operacja pop wystąpiła O (n) razy dzielisz nk przez n aby uzyskać o (k)
zamortyzowany najgorszym przypadku złożoność czasowa
Wyobraź sobie, że masz listę 9 pozycji ponownie.Wyobraź sobie, że usuwasz wszystkie elementy z listy i pojawia się najgorszy przypadek, a za każdym razem usuwasz pierwszy element listy.
Ponieważ lista kurczy się o 1 za każdym razem, gdy liczba wszystkich operacji zmniejsza się za każdym razem od 9 do 1.
9 + 8 + 7 + 5 + 6 + 4 + 3 + 2 + 1 = 45 45 równa się O (nk). Ponieważ wykonałeś 9 operacji, a 9 to O (n), aby obliczyć amortyzowany scenariusz najgorszego scenariusza, wykonasz O (nk)/O (n), który jest równy O (k)
Podanie wartości O (n) dla średniej i najgorszy przypadek złożoność czasu jest również w pewnym sensie poprawna. Zauważ, że O (k) wynosi około O (1/2n) i upuszczenie stałej wynosi O (n)
najgorszym przypadku złożoność czasowa
- przeciwieństwie zamortyzowanego najgorszym przypadku czas złożoności ty nie należy uwzględniać stanu struktury danych i myśleć tylko o najgorszym przypadku dla każdej pojedynczej operacji.
- W tym przypadku najgorszym przypadkiem jest usunięcie pierwszego elementu z listy, która jest O (n) czas.
- 1. Jaka jest złożoność czasu w dict.keys() w Pythonie?
- 2. Jaka jest złożoność czasu HashMap.containsValue() w java?
- 3. Jaka jest złożoność czasu HashMap.containsKey() w java?
- 4. Jaka jest złożoność czasu przeglądarek HTML DOM
- 5. Jaka jest złożoność czasu dodawania elementu na początku tablicy ArrayList?
- 6. Jaka jest złożoność czasu A * i jak jest uzyskiwana?
- 7. jaka jest złożoność czasu metody Array # uniq w ruby?
- 8. Jaka jest złożoność czasu funkcji liczenia w clojure?
- 9. Jaka jest najgorsza złożoność sortowania kubełków?
- 10. Jaka jest złożoność czasu przejścia drzew przy użyciu plonu?
- 11. Podział elementów listy w pythonie
- 12. Najdłuższy łańcuch elementów z listy w Pythonie
- 13. Złożoność czasu system.out.println
- 14. Jaka jest złożoność tego kodu manipulacji ciągami?
- 15. Jaka jest najlepsza złożoność zagadek N-Queens?
- 16. Jaka jest złożoność set_intersection w C++?
- 17. Jaka jest złożoność złożonych lin zrównoważonych?
- 18. Złożoność czasu dla java ArrayList
- 19. Uzyskiwanie mniejszych n elementów listy w Pythonie
- 20. Złożoność czasu mnożenia macierzy w MATLAB
- 21. Czym jest złożoność OrderedDictionary?
- 22. Złożoność czasu zabawy()?
- 23. Jaka jest złożoność czasowa inicjowania macierzy?
- 24. Jaka jest złożoność Morris Traversal o (n)?
- 25. Jaka jest asymptotyczna złożoność operacji GroupBy?
- 26. zbierać każdą parę elementów z listy do krotek w Pythonie
- 27. Spark: Jaka jest złożoność czasu algorytmu połączonych komponentów używanego w GraphX?
- 28. Pary elementów z listy
- 29. Jaka jest równoważność w Pythonie 3 liter w Pythonie 2?
- 30. Jaka jest najlepsza metoda w Pythonie?
zgadzam się z odpowiedzi udzielonej, ale wyjaśnienie jest imho źle. Możesz usunąć dowolny obiekt z listy w czasie O (1) (zasadniczo spraw, aby poprzedni wskaźnik wskazywał następny i usuń go) Problem polega na tym, że aby ZNALEŹĆ obiekt na tej pozycji, musisz przejść do tej listy point (zabiera czas O (N), nie wymaga uśredniania.) Na koniec specjalna uwaga przypadku :, pop (0) zajmie O (1), a nie O (0). – ntg
@nt lista jest tablicą wskaźników. aby usunąć wskaźnik z tablicy w środku, wszystkie wskaźniki po nim muszą być przesunięte w górę w tablicy, biorąc ilość czasu proporcjonalną do wielkości listy (którą oznaczamy jako N), a zatem będącą O (N) . Wyjaśnienie N w notacji Big-O NIE jest indeksem zwracanego elementu, ale funkcją ograniczającą czas działania algorytmu z O (1) będącym stałym czasem - tj. Nie zależy od wielkości Lista. O (N) oznacza, że funkcja graniczna jest trochę stała w stosunku do wielkości listy, f (n) = c * n + b. – tvanfosson
Ja się poprawiłem :) Rzeczywiście, implementacja list jest tablicą wskaźników. Twoja odpowiedź jest poprawna. Przez pop (N) w twojej odpowiedzi masz na myśli pop (k), N gdzie k jest pozycją elementu do usunięcia, a rozmiar wspomnianej tablicy to N. Wtedy k może być w zakresie od 0 do N-1, a więc na średnią N/2 operacje przesuwania elementów k + 1, ...., N-1 o jedną pozycję do tyłu. – ntg