• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

QuickSort - złożoność obliczeniowa

Hosting forpsi easy 1 pln
0 głosów
309 wizyt
pytanie zadane 24 października 2021 w Algorytmy przez Zio Nowicjusz (180 p.)
W jaki sposób złożoność obliczeniowa algorytmu QuickSort jest zależna od wyboru elementu dzielącego x oraz od struktury sortowanego ciągu liczb?

2 odpowiedzi

+1 głos
odpowiedź 25 października 2021 przez Jakub 0 Pasjonat (23,120 p.)
edycja 25 października 2021 przez Jakub 0

Sortowanie szybkie w średnim przypadku ma złożoność O(n log n), a w najgorszym O(n ^ 2). To z jakim przypadkiem mamy do czynienia zależy od elementu osiowego.

Powiedzmy, że kiedy jako element osiowy wybierzesz jakieś X, to znajdziesz blisko połowę wartości mniejszych od X i połowę większych (i tak dla każdego wywołania rekursywnego, aż do przypadku podstawowego). Wtedy dla każdego poziomu musisz przejść przez n elementów, by je ustawić po odpowiedniej stornie osi. Następne wywołanie otrzyma listę o długości n/2 (bo elementy listy rozdzieliły się po połowie wokół osi) itd... Mnożysz O(n) * O(log n) i wychodzi O(n log n).

A co gdybyś po wybraniu osi X miał pecha, bo po lewej stronie znalazła by się tylko jedna liczba, a po prawej wszystkie pozostałe? Przykładem może być następujący ciąg przy założeniu, że zawsze jako oś bierzesz lewą skrajną wartość:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 ... 1000

Liczba elementów po prawej stronie osi dla następnego wywołania rekurencyjnego nie będzie już o połowę mniejsza, ale mniejsza o zaledwie jeden skrajny element. To ponownie każdy poziom rekurencji przetwarza n liczb. Ponieważ z kolejnymi wywołaniami ciąg jest o zaledwie jeden element krótszy, będziesz miał wysokość stosu wywołań również równą n (a już nie optymistycznie log n). Ponownie mnożysz O(n) * O(n) i otrzymujesz O(n ^ 2).

By tego uniknąć, jako oś należy wybrać losową wartość z sortowanego ciągu.

0 głosów
odpowiedź 25 października 2021 przez Wiciorny Ekspert (262,670 p.)

Przypadek pesymistyczny występuje wtedy, gdy klucz osiowy za każdym razem znajdzie się na brzegu tabeli. Wówczas przy każdym kolejnym wywołaniu liczba elementów do posortowania jest tylko o 1 mniejsza, zatem funkcja zostanie wywołana n razy. Pesymistyczna złożoność czasowa wynosi zatem O(n2).

- to jest dokładnie co kolega powiedział 

Nalezy pamiętać że Wybór klucza osiowego może być dowolny, jednak powinien być jak najszybszy. W praktyce często stosuje się po prostu wybór pierwszego elementu.
Bo to znacznie obniża efektywność 

Podobne pytania

0 głosów
1 odpowiedź 151 wizyt
pytanie zadane 2 listopada 2022 w Algorytmy przez Fsqwer Nowicjusz (120 p.)
0 głosów
1 odpowiedź 322 wizyt
pytanie zadane 1 listopada 2020 w Algorytmy przez niezalogowany
0 głosów
2 odpowiedzi 353 wizyt
pytanie zadane 5 grudnia 2019 w Algorytmy przez progNewbie Obywatel (1,130 p.)

92,089 zapytań

140,748 odpowiedzi

317,711 komentarzy

61,408 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia w koszyku, uzyskując rabat aż -50% (jeszcze tylko dziś 30.11 z okazji Black Week, a potem będzie to 30%) na bilety w wersji "Standard"! Więcej informacji na temat akademii znajdziecie tutaj. Dziękujemy Sekurakowi za tak fajną zniżkę dla Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 15% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...