[Haskell-cafe] Substring replacements

Branimir Maksimovic bmaxa at hotmail.com
Wed Dec 21 02:18:43 EST 2005




>From: Bulat Ziganshin <bulatz at HotPOP.com>
>Reply-To: Bulat Ziganshin <bulatz at HotPOP.com>
>To: "Branimir Maksimovic" <bmaxa at hotmail.com>
>CC: haskell-cafe at haskell.org
>Subject: Re: [Haskell-cafe] Substring replacements
>Date: Tue, 20 Dec 2005 23:55:22 +0300
>
>Hello Branimir,
>
>Tuesday, December 20, 2005, 9:48:48 PM, you wrote:
>
>BM> I've finally performed test on amd64 and result is a same as on intel.
>BM> KMP always wins. So KMP is best suited for non indexed strings
>BM> and I guess should be used in library as prefered search/replace 
>method.
>BM> This test favors straightforward search.
>
>i'm 90% sure that straightforward method must be faster for one-time
>searches.

KMP is O(m) while straightforward is O(m*n).

your test may give better results with KMP algorithm just
>because you repeat the same search many times and it was automatically
>"run-time compiled" as described on the wiki page about KMP

My test favors straightforward, in any other case KMP wins by order of
magnitude.
I think that straightfoirward is better then KMP with optimisations
off is due more complex program.
>
>try to add
>
>{-# NOINLINE replace #-}
>
>to both programs and repeat comparision

These are tests:
No optimisations (no -O):
Intel hyperthreaded,windows
$ time ./KMP
Working:seasearch replace  able seaseasearch baker seasearch charlie
True
Done


real    0m34.766s
user    0m0.015s
sys     0m0.000s

bmaxa at MAXA ~/tutorial
$ time ./straightforward
Working:seasearch replace  able seaseasearch baker seasearch charlie
True
Done


real    0m14.719s
user    0m0.031s
sys     0m0.000s

AMD 64 bit:
[bmaxa at devel64 myhaskell]$ time ./KMP
Working:seasearch replace  able seaseasearch baker seasearch charlie
True
Done


real    1m58.066s
user    1m57.939s
sys     0m0.128s
[bmaxa at devel64 myhaskell]$ time ./straightforward
Working:seasearch replace  able seaseasearch baker seasearch charlie
True
Done


real    0m41.565s
user    0m41.527s
sys     0m0.040s

with optimisations (-O):

Intel hyperthreaded,windows
$ time ./KMP
Working:seasearch replace  able seaseasearch baker seasearch charlie
True
Done


real    0m8.625s
user    0m0.015s
sys     0m0.015s

bmaxa at MAXA ~/tutorial
$ time ./straightforward
Working:seasearch replace  able seaseasearch baker seasearch charlie
True
Done


real    0m11.735s
user    0m0.015s
sys     0m0.000s

AMD 64 bit, linux:
[bmaxa at devel64 myhaskell]$ time ./KMP
Working:seasearch replace  able seaseasearch baker seasearch charlie
True
Done


real    0m10.546s
user    0m10.529s
sys     0m0.016s
[bmaxa at devel64 myhaskell]$ time ./straightforward
Working:seasearch replace  able seaseasearch baker seasearch charlie
True
Done


real    0m11.796s
user    0m11.785s
sys     0m0.012s

Greetings, Bane.

_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar - get it now! 
http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/



More information about the Haskell-Cafe mailing list