Czy ktoś jest w stanie podać "zwykły angielski" intuicyjne, ale formalne wyjaśnienie, co powoduje, że QuickSort n log n? Z mojego rozumowania musi on przejść przez n pozycji, i robi to log n razy ... Nie jestem pewien, jak umieścić to w słowach, dlaczego robi to log n razy.Intuicyjne wyjaśnienie, dlaczego QuickSort to n log n?
Odpowiedz
Każda operacja partycjonowania wymaga operacji O (n) (jedno przejście w tablicy). Średnio, każde partycjonowanie dzieli tablicę na dwie części (sumujące się do operacji log n). W sumie mamy operacje O (n * log n).
tj. w typowych operacjach partycjonowania log n, a każda partycja wykonuje operacje O (n).
Część log n
pochodzi z faktu, że jest to (co najmniej idealnie) przełamanie wejścia w połowie w każdej iteracji. Zaczynając od N pozycji, a rozbijanie ich o połowę za każdym razem oznacza, że przechodzisz do 1 pozycji po logach (N), w którym to momencie nie możesz dalej go dzielić. Na przykład, zaczynając od, powiedzmy, 128 elementów, dzielisz się na grupy składające się z 64, 32, 16, 8, 4, 2, 1 elementów - 7 iteracji (i log (128) = 7).
Każda z tych iteracji przeszukuje całą tablicę, aby ją podzielić, więc kończy się operacjami O (log N), z których każda ma złożoność O (n), dla ogólnej złożoności O (n log n).
Aby być technicznie poprawnym, Big-O jest O (N). Wynika to z faktu, że wystarczająco zły wybór elementu partycji może podzielić tablicę na jeden element z jednej strony, a całą resztę tablicy na drugą. Jeśli dzieje się to przy każdej iteracji, to wymaga N iteracji, aby podzielić ją na części po jednym elemencie, więc otrzymasz operacje N, każda o złożoności O (N), dla O (N * N) ogólnie.
W prawdziwej implementacji zwykle zatrzymuje się przed tym, ale to jest najdalej można przejść.
Cóż, nie zawsze jest to n (log n). Jest to czas wykonania, gdy wybrany jest mniej więcej pośrodku. W najgorszym wypadku, jeśli wybierzesz najmniejszy lub największy element jako oś obrotu, wówczas będzie to O (n^2).
Aby wizualizować "n log n", można założyć, że oś obrotu jest elementem najbliższym średniej wszystkich elementów w tablicy do posortowania. To podzieliłoby tablicę na 2 części o mniej więcej tej samej długości. W obu przypadkach stosuje się procedurę quicksort.
Tak jak w każdym kroku, w którym zmniejszono o połowę długość tablicy, zrobisz to dla log n (podstawa 2) razy, aż osiągniesz długość = 1, czyli posortowaną tablicę 1 elementu.
Masz rację, ale nie mieszaj średniej i mediany. Mediana pozwala dzielić na dwie części o tej samej długości (+ -1). – kvetis
W rzeczywistości trzeba znaleźć położenie wszystkich elementów N (przestawny), ale maksymalna liczba porównań to logN dla każdego elementu (pierwszy to N, drugi węzeł N/2,3rd N/4. .wartość przestawna jest medianą)
- 1. Czy log (n!) = Θ (n · log (n))?
- 2. Dlaczego sortowanie jest ciągiem O (n log n)?
- 3. Big Oh for (n log n)
- 4. Jak obliczyć n log n = c
- 5. Jak wizualizujesz różnicę między O (log n) i O (n log n)?
- 6. Czy istnieje skrótowe oznaczenie O (n log n)?
- 7. Asymptotic złożoność T (n) = T (n-1) + 1/n
- 8. Przestrzeganie zachowania kwadratowego za pomocą quicksort - O (n^2)
- 9. Łatwo: Rozwiąż T (n) = T (n-1) + n metodą iteracji
- 10. n ** n ** n heurystyki w Pythonie
- 11. Scala: przesuwne (N, N) kontra zgrupowane (N)
- 12. Jak ustawić "% n" na "\ n"
- 13. SQL n-to-n pasujące do wielu wartości
- 14. Dlaczego ten ciąg formatu scanf nie działa? "% [^ \ n] \ n"
- 15. Dlaczego TreeSet Iteracja O (n) zamiast O (n * logn)?
- 16. Wyjaśnij ten algorytm O (n log n) dla problemu rzucania kota/jaja
- 17. echo "-n" nie drukuje -n?
- 18. Wymiana „\ r \ n” o „\ n”
- 19. Empiryczna złożoność mojej implementacji "sortowania bibliotek" nie wydaje się pasować do niczego podobnego do O (n log n)
- 20. Biblioteka drzewna n-n C++
- 21. Rozwiąż: T (n) = T (n/2) + n/2 + 1
- 22. Notacja Java Big O 3 zagnieżdżonych pętli log (n)
- 23. Dlaczego te czasy transpozycji macierzy są tak intuicyjne?
- 24. Podzielić listę elementów n * n na n list z n elementami na każdej liście
- 25. javascript, zamień \ n na \ r \ n
- 26. Architektura N-warstwowa a architektura N-warstwowa
- 27. Big-O złożoność c^n + n * (logn)^2 + (10 * N)^c
- 28. Permptacje próbkowania [1,2,3, ..., N] dla dużego N
- 29. N-Tuple opcji opcji N-Tuple
- 30. Generowanie ścieżek na siatce n * n
Dziękuję za to. Przyjęta tu odpowiedź jedynie skorygowała to, co OP (i I) już znali (n operacji wykonano log n razy), ale pominęło tylko ważną część: dlaczego jest zrobione log n razy? Ta odpowiedź jest miłym i prostym wyjaśnieniem, skąd pochodzi log. –
jest bardzo jasne, dzięki odpowiedź. – huseyin
to jest najlepsze wytłumaczenie – huseyin