On Friday, 16 May 2014 at 15:20:04 UTC, bearophile wrote:
Artur Skawina:

Ugh. So how does it perform wrt the D version that I wrote for
you last time? [1]

I have done a benchmark with the various version (the first 3 are the ones on the Rosettacode site, and the #4 is yours):

lzw1: 0.39
lzw2: 0.17
lzw3: 0.21
lzw4: 0.17

I think your comment was about an older version of the first entry, that is non meant to be fast, just short and simple.

I think the second version is enough. Do you agree?

The third version should be more efficient but for such small files it's slower than the second.

Bye,
bearophile

Arguably, your code allocates a lot.

To speed it up, arguably, you could store a global immutable string containing characters 0 to char.max + 1.

This way, when you build your dictionary (each time you enter compress), you at least don't have to allocate the string, but rather, slice your global immutable. Ditto for the lines "w = [ch];", which allocates, you could instead do "w = gAllChars[ch .. ch + 1]". (or "dict[b] = [b]" etc...)

Well, just a quick idea...

I'll give it a shot (next week).

Reply via email to