trideni textoveho souboru
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Čtvrtek Červen 8 14:22:52 CEST 2000
On Thu, 8 Jun 2000, Michal Krause wrote:
> To bych nerekl. Zrovna vcera jsem pri testovani map v C++ zkousel
> zjistit pocet unikatnich IP adres v souboru (to je takovy muj oblibeny
> test) a 13 MB soubor (1 milion radku) se timto zpusobem prechroustal za
> 18 vterin. Kombinace sort | uniq na tom pracovala nekolik minut.
> Je pravda, ze pametove naroky meho programku byly vyrazne vyssi
V tom je ten hacek. Je-li objem dat N, pak hasovanim (s vhodnou
hasovaci funkci a tabulkou velikosti O(N)) to lze profiltrovat v case
O(N), ale v nejhorsim pripade to muze vest k O(N) vypadkum stranky
a to naprosto nahodne rozlozenym po adresovem prostoru. Sort sice
potrebuje cas O(N log N), coz je teoreticky pomalejsi, ale k datum
pristupuje temer dokonale sekvencne (je pouzit algoritmus merge sort).
Mezi rychlosti nahodneho a sekvencniho pristupu je takovy propastny
rozdil, ze to ten logaritmicky clen *muze* snadno smazat.
Dalsi faktor stojici za uvahu je, jestli se v dane situaci vubec vyplati
snazit se usetrit nekolik minut casu pocitace za cenu nekolika minut prace
nutne na napsani toho programu. :)
> (protoze v tom souboru bylo zhruba 10% polozek unikatnich).
Coz znamena, ze jste v pameti mel pouze desetinu toho souboru, tj. 100 000
polozek o celkove velikosti 1.3 MB (nezapoctena rezie, ktera nemusi byt
zanedbatelna)...tedy pokud jste to nenaprogramoval nejak uchylne (od te
doby, co jsem na vlastni oci videl trideni s kubickou slozitosti, se
nedivim nicemu :> ). Zkuste to jeste jednou na souboru, kde budou vsechny
polozky unikatni.
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."
Další informace o konferenci Linux