Kilka pytań

Znalazłem sposób, który poprawia (o ile przetestowałem) algorytm quicksort poza tym, co już zostało zrobione. Pracuję nad testowaniem, a potem chcę się o tym dowiedzieć. Byłbym jednak wdzięczny za pomoc w niektórych sprawach. Oto moje pytania. Przy okazji cały mój kod jest w C++.

  1. Jednym z sortów, które porównuję do mojego quicksortu, jest sortowanie std::z biblioteki standardowej C++. Wydaje się jednak, że jest niezwykle powolny. Jestem tylko sortowanie tablic intów i longów, ale wydaje się być około 8-10 razy wolniejsze niż zarówno mój quicksort jak i Standardowy quicksort Bentleya i Mcilroya (a może Sedgewicka). Czy ktoś ma jakieś pomysły, dlaczego jest tak wolno? Kod, którego używam do sortowania jest po prostu std:: sort(a, a+numelem); gdzie A jest tablicą longów lub intów, a numelem jest liczbą elementów w tablicy. Liczby są bardzo losowe i próbowałem różnych rozmiarów, a także różnych ilości powtarzających się elementów. I próbowałem również qsort, ale jest jeszcze gorzej, jak się spodziewałem. Edit: zignoruj to pierwsze pytanie - zostało rozwiązane.

  2. Chciałbym znaleźć więcej dobrych implementacji quicksort do porównania z moim quicksort. Do tej pory mam Bentleya-Mcilroya i porównałem również z pierwszą opublikowaną wersją dual-pivot quicksort Vladimira Jaroslavskiego. Ponadto planuję portowanie timsortu (który jest moim zdaniem sortowaniem scalającym) i zoptymalizowanego dual-pivot quicksort ze źródła jdk 7. Co? inne dobre wdrożenia quicksorts, o których wiesz? Jeśli nie są w C lub c++ to może być w porządku, ponieważ jestem całkiem dobry w portowaniu, ale wolałbym te C lub C++, jeśli wiesz o nich.

  3. Jak poleciłbyś, aby się dowiedzieć o moich dodatkach do quicksortu? Do tej pory mój quicksort wydaje się być znacznie szybszy niż wszystkie inne quicksorts, że testowałem go. Głównym źródłem jego szybkości jest to, że radzi sobie z powtarzającymi się elementami znacznie wydajniej niż inne metody, które znalazłem. To prawie całkowicie eliminuje najgorsze zachowanie przypadku bez dodawania dużo czasu na sprawdzanie powtarzających się elementów. Pisałem o tym na forum Java, ale nie dostałem odpowiedzi. Próbowałem też napisać do Jona Bentleya, ponieważ pracował z Vladimirem nad jego dual-pivot quicksort i nie otrzymał odpowiedzi (choć nie byłem tym strasznie zaskoczony). Czy powinienem napisać o tym artykuł i umieścić go na arxiv.org Czy powinienem pisać na niektórych forach? Czy są jakieś listy dyskusyjne, na które ja powinien pisać? Pracuję nad tym od jakiegoś czasu i moja metoda jest legalna. Mam pewne doświadczenie w publikowaniu badań, ponieważ jestem doktorantem z fizyki obliczeniowej. Czy powinienem podejść do kogoś z Wydziału Informatyki mojej uczelni? Przy okazji, opracowałem również inny quicksort dual-pivot, ale nie jest lepszy niż mój quicksort single-pivot (choć jest lepszy niż quicksort Dual-pivot Vladimira z niektórymi zestawami danych).

I naprawdę doceniam twoją pomoc. Chcę tylko dodać to, co mogę do świata komputerów. Nie interesuje mnie patentowanie tego czy innych absurdów.

Author: Justin Peel, 2010-01-20

2 answers

Jeśli masz zaufanie do swojej pracy, zdecydowanie spróbuj omówić to z kimś kompetentnym na swojej uczelni tak szybko, jak to możliwe. Nie wystarczy pokazać, że Twój kod działa szybciej niż inna procedura na twoim komputerze. Musisz matematycznie udowodnić, jaki zysk osiągnąłeś, jak twierdzisz, dzięki analizie algorytmu. Powiedziałbym, że pierwszą rzeczą do zrobienia jest upewnienie się, że oba algorytmy, które porównujesz, są zaimplementowane i skompilowane optymalnie - możesz po prostu oszukiwać sam tu jesteś. Prawdopodobieństwo, że osoba osiągnie tak wyraźną poprawę przy tak ważnej metodzie sortowania, nie mając już dokładnej wiedzy o jej przyjętych wariantach, wydaje się znikome. Jednak nie zniechęcaj mnie. I tak powinno być ciekawie. Czy zechciałby Pan zamieścić tu kod? ...Ponadto, ponieważ quicksort jest szczególnie podatny na najgorsze scenariusze, testy, które zdecydujesz się uruchomić, mogą mieć ogromny wpływ, podobnie jak wybór pivotów. Ogólnie, Powiedziałbym, że każdy zbiór danych z dużą liczbą równoważnych elementów lub taki, który jest już wysoko posortowany, nigdy nie jest dobrym wyborem dla quicksort - a istnieją już dobrze znane sposoby walki z tą sytuacją i lepsze alternatywne metody sortowania.

 11
Author: Eric Mickelsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-20 06:57:36

Jeśli naprawdę dokonałeś przełomu i masz matematykę, aby to udowodnić, powinieneś spróbować opublikować go w Journal of the ACM . To zdecydowanie jeden z bardziej prestiżowych czasopism z dziedziny informatyki.

Drugi najlepszy byłby jeden z IEEE journals , takich jak Transactions on Software Engineering.

 7
Author: R Samuel Klatchko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-20 06:59:55