On 04/20/16 06:01, Warren Block wrote:
On Tue, 19 Apr 2016, Aleksander Alekseev wrote:
Why Wikipedia, specifically?  There are a lot of places that describe
quicksort.  How about just

   Note: This implementation of qsort() is designed to avoid the
   worst-case complexity of N**2 that is often seen with standard
   versions.
I would say that this statement is just false. Worst-case complexity is
still N**2. How about something like:

"""
This implementation of qsort() has worst case complexity of N**2.
However measures were taken that make it very unlikely that for some
random input N**2 swaps will be made. It's still possible to generate
such an input on purpose though. See code below for more details.
"""
Okay:

   The quicksort algorithm worst-case is O(N**2), but this implementation
   has been designed to avoid that for most real data.
Hi,

There is something which I don't understand. Why is quicksort falling back to insertion sort which is an O(N**2) algorithm, when there exist a O(log(N)*log(N)*N) algorithms, which I propose as a solution to the "bad" characteristics of qsort.
The replacement algorithm I propose does not allocate working memory and 
it does not recurse and it does not use a significant amount of stack 
space. Maybe some number theorists want to have a look? I cannot seem to 
find it anywhere public.
See here:
https://reviews.freebsd.org/D5241

Local test results w/D5241 running statically in userspace:

Data set size log2(N)   qsort w/insert sort     qsort w/hpsort  mergesort       
data set
10      1.28    1.12    1.34    random0
11      2.42    2.43    2.83    random0
12      5.21    5.2     6.1     random0
                                
10      1.26    1.14    1.44    random1
11      2.46    2.46    3.05    random1
12      5.28    5.29    6.56    random1
                                
10      10.01   5.1     0.2     bad0
11      39.12   12.11   0.33    bad0
12      156.54  28.42   0.58    bad0
New algorithm is in the middle column. Times are in seconds.

Bad0 data set:
http://calmerthanyouare.org/2014/06/11/algorithmic-complexity-attacks-and-libc-qsort.html
--HPS
_______________________________________________
freebsd-current@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to