🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.programming
5 messages
5 total messages Started by Borneq Sun, 24 Nov 2019 08:49
Quciksort a najmniejsza liczba odpytywań
#216533
Author: Borneq
Date: Sun, 24 Nov 2019 08:49
7 lines
1323 bytes
Pytanie z Algorytmów i struktur danych
Co się zdarzy, gdy funkcja oceniająca będzie dawała dziwne wyniki:
typu A<B , B<C, ale C<A ?
Czy w QuickSort zawsze pyta się minimalna ilość razy?
Ale z drugiej strony, może być początkowe posortowanie takie że 
QuickSort będzie miał złożoność kwadratową, czyli na pewno nie pyta 
minimalna ilość razy. Co wtedy? QuickSort się wykrzaczy? Jak się to objawi?
Quciksort a najmniejsza liczba odpytywań
#216534
Author: godek.maciek
Date: Sun, 24 Nov 2019 15:42
14 lines
2066 bytes
Dla prostoty weźmy Haskellową implementację (pseudo) quicksorta:

qsort [] = []
qsort (h:t) = (qsort [x|x<-t, x<h]) \
       ++[h]++(qsort [x|x<-t, x>=h])

Jeżeli tylko
x >= y <=> ~(x < y)
i jeżeli każde wywołanie x < y daje tę samą wartość, to lewa i prawa strona listy będzie każdorazowo malała przy kolejnych wywołaniach rekurencyjnych (bo są rozłączne, i wyciągamy z listy jeden element, h).
Dlatego brak przechodniości operatora < nie powinna mieć wpływu na to, czy algorytm się zakończy.

W prawdziwym quicksorcie jest lepiej, bo tam wywołujesz funkcję porównującą tylko raz na iterację dla każdego elementu, i przerzucasz elementy na lewo i prawo od pivota. Ale schemat rekursji jest dokładnie taki sam.

Rezultat będzie oczywiście niezdefiniowany, ale algorytm się zakończy.
Re: Quciksort a najmniejsza liczba odpytywań
#216536
Author: Tomasz Konstanty Maluszycki
Date: Sun, 24 Nov 2019 20:50
12 lines
1984 bytes
On Sunday, November 24, 2019 at 8:49:55 AM UTC, Borneq wrote:
> Pytanie z Algorytmów i struktur danych
> Co się zdarzy, gdy funkcja oceniająca będzie dawała dziwne wyniki:
> typu A<B , B<C, ale C<A ?
> Czy w QuickSort zawsze pyta się minimalna ilość razy?
> Ale z drugiej strony, może być początkowe posortowanie takie że 
> QuickSort będzie miał złożoność kwadratową, czyli na pewno nie pyta 
> minimalna ilość razy. Co wtedy? QuickSort się wykrzaczy? Jak się to objawi?

Objawi ci się to kwadratową złożonością algorytmu...
czyli dla tablicy 1000 elementów wykonasz milion porównań.
Mała ciekawostka: największym koszmarem quicksorta jest tablica częściowo posortowana.
Re: Quciksort a najmniejsza liczba odpytywań
#216537
Author: M.M.
Date: Mon, 25 Nov 2019 04:51
16 lines
2207 bytes
On Sunday, November 24, 2019 at 9:50:35 PM UTC+1, Tomasz Konstanty Maluszycki wrote:
> On Sunday, November 24, 2019 at 8:49:55 AM UTC, Borneq wrote:
> > Pytanie z Algorytmów i struktur danych
> > Co się zdarzy, gdy funkcja oceniająca będzie dawała dziwne wyniki:
> > typu A<B , B<C, ale C<A ?
> > Czy w QuickSort zawsze pyta się minimalna ilość razy?
> > Ale z drugiej strony, może być początkowe posortowanie takie że 
> > QuickSort będzie miał złożoność kwadratową, czyli na pewno nie pyta 
> > minimalna ilość razy. Co wtedy? QuickSort się wykrzaczy? Jak się to objawi?
> 
> [...]
> Mała ciekawostka: największym koszmarem quicksorta jest tablica częściowo 
> posortowana.

Trzeba wybierać losowo element 'podziału'.
Pozdrawiam
Re: Quciksort a najmniejsza liczba odpytywań
#216535
Author: Borneq
Date: Mon, 25 Nov 2019 15:23
8 lines
1662 bytes
W dniu 24.11.2019 o 16:42, godek.maciek@gmail.com pisze:
> Dlatego brak przechodniości operatora < nie powinna mieć wpływu na to, czy algorytm się zakończy.

A czy da się uzyskać infrmację, że w pewnym kroku porównanie było 
nieprzechodnie?
A co gdy mamy wiele elementów równych sobie, tak że mamy zawsze wybór z 
trzech a nie dwóch możliwości, gdyby były tak samo prawdopodobne, to 
zysk byłby log(3)/log(2)=1.58 raza.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads