Diskuze: Řadící algoritmus
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
vypada hezky, akorat podle me cokoli, co je rychljsi jak O(n log n), coz je
quick sort, si to vynahrazuje silenyma pametovima narokama (viz tady tento
algoritmus)
takze pozor na pamet
Žádný algoritmus založený na porovnávání prvků nemůže být asymptoticky rychlejší než O(n log n). Counting sort ovšem není založený na porovnávání a jako další algoritmy tak může dosahovat až lineární složitosti. Není pravidlem, že by k tomu bylo potřeba extrémní paměti.
tak zrovna u toho Counting sortu je ta pametova narocnost silena viz radek
kodu:
// vytvorime pole do ktereho budeme pocitat
int[] counts = new int[max - min + 1];
coz podle me znamena ze kdyz budu mit pole o 3 prvcich (500 000 000, 1,2) tak
na serazeni techto 3 cisel potrebuje algoritmus cca 2GB
nvm jak moc korektne je provedena ta implementace na tech strankach, ale to uz bych radsi pouzil RadixSort (http://www.alg.webzdarma.cz/…5/radix.html) s O(k*N) a pametovou slozitosti O(k+N).
Proto se také counting sort používá pouze v případě, že abs(min-max) << n.
Ten Radix nevypadá špatně, ale jak říkám ten Counting Sort využívám při řazení více prvků v C# a zatím paměťové problémy nebyly a rychlost parádní.
Pokud hodnoty v poli jsou třeba 0 - 2500 a máš tam 2 000 000 záznamů,
tak je to s paměťí v klidu a rychlost je 0.1s
Zobrazeno 7 zpráv z 7.