-
Data: 2012-11-24 16:43:30
Temat: Re: Potyczki
Od: bartekltg <b...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu 2012-11-24 16:25, PK pisze:
> On 2012-11-24, bartekltg <b...@g...com> wrote:
>> Niedawno był to całkiem niezły watek o sortowaniu.
>> Sortowania pozycyjne tez były omówione;)
>
> Wiem. W nim również zwróciłem slawkowi uwagę, że nie rozumie sortowania,
> a potem przestałem się udzielać, bo po prostu żal mi było czasu. Nie
> mniej widzę, że Wasza dyskusja (trwająca chyba kilka tygodni) była
> dla niego zupełnie bezowocna.
Hmm, dyskusja była chyba głownie w około fira.
Zresztą, nie pamiętam dokładnie.
>> Ale posortować beż użycia > na elementach sortowanych się da;)
>> Pewnych specyficznych elementów, jak liczby naturalne.
>
> Można zastąpić relację ">" obliczeniem pewnych f(a,b) i g(a,b), ale
> wyniki tych funkcji trzeba przyrównać do zera.
> Poza tym operacja "=" jest zazwyczaj wolniejsza niż ">".
Ale czasem złożonością jednak przebija. Posortowanie
miliarda bajtów będzie szybsze 'sortowaniem przez zliczanie'
niz qsortem. Tylko jak często mamy taką potrzebę;-)
Odkopałem test, który robiłem w tamtej dyskusji.
Wygląda, że i inty lecą szybciej. Pod warunkiem,
że tablica jest dostatecznie duża.
A, to nizej to kod chyba niepoprawiony, sortowanie
nie jest stabilne. Trzeba gdzieś zamienić kierunek pętli.
pzdr
bartekltg
***
Przetestowane, porównane z std::sort
Na przedziale n 10^5 - 10^7 przewaga 2 do 3.5 raza
szybsze. Co ciekawe, przewaga pozycyjnego od pewnego
momentu maleje.
void pozycyjne(unsigned int * tab, int n)
{
const int shift = 16;
const int K = 1<<shift;
int * h = new int [K];
unsigned int * temp = new unsigned int [n];
for (int j=0;j<K;j++) //zerowanie
h[j]=0;
for (int j=0;j<n;j++)//zliczanie wystąpień
h[(unsigned short)(tab[j])]++;
for (int j=1;j<K;j++) //akumulacja/zmiana liczby wystąpień
h[j]+=h[j-1]; //na indeksy
for (int j=0;j<n;j++)//kopiowanie
{
temp[--h[(unsigned short)tab[j]]]=tab[j];
}
///////////faza druga
for (int j=0;j<K;j++) //zerowanie
h[j]=0;
for (int j=0;j<n;j++)//zliczanie wystąpień
h[(unsigned short)(temp[j]>>shift)]++;
for (int j=1;j<K;j++) //akumulacja/zmiana liczby wystąpień
h[j]+=h[j-1]; //na indeksy
for (int j=n-1;j>=0;j--)//kopiowanie
{
tab[--h[(unsigned short)temp[j]>>shift]]=temp[j];
}
delete[]temp;
delete[]h;
}
*****
pzdr
bartekltg
Następne wpisy z tego wątku
- 24.11.12 16:51 e...@g...com
- 24.11.12 20:38 Stachu 'Dozzie' K.
- 24.11.12 21:18 PK
- 24.11.12 21:19 Stachu 'Dozzie' K.
- 24.11.12 21:35 PK
- 24.11.12 21:44 Stachu 'Dozzie' K.
- 25.11.12 13:15 Roman W
- 25.11.12 13:35 bartekltg
- 25.11.12 14:57 Jacek
- 25.11.12 18:08 PK
- 25.11.12 18:10 PK
- 25.11.12 20:27 Roman W
- 25.11.12 21:07 bartekltg
- 26.11.12 07:23 Jacek
- 26.11.12 10:36 Roman W
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-11-21 Re: Dla mr. J.F`a, Trybuna i Wiesiaczka którzy "troszczą" się o państwowe i u których 0 pragmatyzmu
- 2024-11-21 Re: Dla mr. J.F`a, Trybuna i Wiesiaczka którzy "troszczą" się o państwowe i u których 0 pragmatyzmu
- 2024-11-21 Re: Dla mr. J.F`a, Trybuna i Wiesiaczka którzy "troszczą" się o państwowe i u których 0 pragmatyzmu
- 2024-11-20 "betamaxy" i inne voip-y dzisiaj
- 2024-11-21 Strach się bać
- 2024-11-21 Koniec smrodów
- 2024-11-20 Krematorium
- 2024-11-20 Taki tam szkolny problem...
- 2024-11-20 LIR2032 a ML2032
- 2024-11-20 SmartWatch Multimetr bezprzewodowy
- 2024-11-21 Środa Wielkopolska => Konsultant SAP <=
- 2024-11-21 Łódź => Spedytor Międzynarodowy <=
- 2024-11-21 Wrocław => Inżynier bezpieczeństwa aplikacji <=
- 2024-11-21 Kraków => Lead Java EE Developer <=
- 2024-11-21 Karlino => Konsultant wewnętrzny SAP (FI/CO) <=