[#6954] Why isn't Perl highly orthogonal? — Terrence Brannon <brannon@...>

27 messages 2000/12/09

[#7022] Re: Ruby in the US — Kevin Smith <kevinbsmith@...>

> Is it possible for the US to develop corporate

36 messages 2000/12/11
[#7633] Re: Ruby in the US — Dave Thomas <Dave@...> 2000/12/19

tonys@myspleenklug.on.ca (tony summerfelt) writes:

[#7636] Re: Ruby in the US — "Joseph McDonald" <joe@...> 2000/12/19

[#7704] Re: Ruby in the US — Jilani Khaldi <jilanik@...> 2000/12/19

> > first candidates would be mysql and postgressql because source is

[#7705] Code sample for improvement — Stephen White <steve@...> 2000/12/19

During an idle chat with someone on IRC, they presented some fairly

[#7750] Re: Code sample for improvement — "Guy N. Hurst" <gnhurst@...> 2000/12/20

Stephen White wrote:

[#7751] Re: Code sample for improvement — David Alan Black <dblack@...> 2000/12/20

Hello --

[#7755] Re: Code sample for improvement — "Guy N. Hurst" <gnhurst@...> 2000/12/20

David Alan Black wrote:

[#7758] Re: Code sample for improvement — Stephen White <steve@...> 2000/12/20

On Wed, 20 Dec 2000, Guy N. Hurst wrote:

[#7759] Next amusing problem: talking integers (was Re: Code sample for improvement) — David Alan Black <dblack@...> 2000/12/20

On Wed, 20 Dec 2000, Stephen White wrote:

[#7212] New User Survey: we need your opinions — Dave Thomas <Dave@...>

16 messages 2000/12/14

[#7330] A Java Developer's Wish List for Ruby — "Richard A.Schulman" <RichardASchulman@...>

I see Ruby as having a very bright future as a language to

22 messages 2000/12/15

[#7354] Ruby performance question — Eric Crampton <EricCrampton@...>

I'm parsing simple text lines which look like this:

21 messages 2000/12/15
[#7361] Re: Ruby performance question — Dave Thomas <Dave@...> 2000/12/15

Eric Crampton <EricCrampton@worldnet.att.net> writes:

[#7367] Re: Ruby performance question — David Alan Black <dblack@...> 2000/12/16

On Sat, 16 Dec 2000, Dave Thomas wrote:

[#7371] Re: Ruby performance question — "Joseph McDonald" <joe@...> 2000/12/16

[#7366] GUIs for Rubies — "Conrad Schneiker" <schneik@...>

Thought I'd switch the subject line to the subject at hand.

22 messages 2000/12/16

[#7416] Re: Ruby IDE (again) — Kevin Smith <kevins14@...>

>> >> I would contribute to this project, if it

17 messages 2000/12/16
[#7422] Re: Ruby IDE (again) — Holden Glova <dsafari@...> 2000/12/16

-----BEGIN PGP SIGNED MESSAGE-----

[#7582] New to Ruby — takaoueda@...

I have just started learning Ruby with the book of Thomas and Hunt. The

24 messages 2000/12/18

[#7604] Any corrections for Programming Ruby — Dave Thomas <Dave@...>

12 messages 2000/12/18

[#7737] strange border-case Numeric errors — "Brian F. Feldman" <green@...>

I haven't had a good enough chance to familiarize myself with the code in

19 messages 2000/12/20

[#7801] Is Ruby part of any standard GNU Linux distributions? — "Pete McBreen, McBreen.Consulting" <mcbreenp@...>

Anybody know what it would take to get Ruby into the standard GNU Linux

15 messages 2000/12/20

[#7938] Re: defined? problem? — Kevin Smith <sent@...>

matz@zetabits.com (Yukihiro Matsumoto) wrote:

26 messages 2000/12/22
[#7943] Re: defined? problem? — Dave Thomas <Dave@...> 2000/12/22

Kevin Smith <sent@qualitycode.com> writes:

[#7950] Re: defined? problem? — Stephen White <steve@...> 2000/12/22

On Fri, 22 Dec 2000, Dave Thomas wrote:

[#7951] Re: defined? problem? — David Alan Black <dblack@...> 2000/12/22

On Fri, 22 Dec 2000, Stephen White wrote:

[#7954] Re: defined? problem? — Dave Thomas <Dave@...> 2000/12/22

David Alan Black <dblack@candle.superlink.net> writes:

[#7975] Re: defined? problem? — David Alan Black <dblack@...> 2000/12/22

Hello --

[#7971] Hash access method — Ted Meng <ted_meng@...>

Hi,

20 messages 2000/12/22

[#8030] Re: Basic hash question — ts <decoux@...>

>>>>> "B" == Ben Tilly <ben_tilly@hotmail.com> writes:

15 messages 2000/12/24
[#8033] Re: Basic hash question — "David A. Black" <dblack@...> 2000/12/24

On Sun, 24 Dec 2000, ts wrote:

[#8178] Inexplicable core dump — "Nathaniel Talbott" <ntalbott@...>

I have some code that looks like this:

12 messages 2000/12/28

[#8196] My first impression of Ruby. Lack of overloading? (long) — jmichel@... (Jean Michel)

Hello,

23 messages 2000/12/28

[#8198] Re: Ruby cron scheduler for NT available — "Conrad Schneiker" <schneik@...>

John Small wrote:

14 messages 2000/12/28

[#8287] Re: speedup of anagram finder — "SHULTZ,BARRY (HP-Israel,ex1)" <barry_shultz@...>

> -----Original Message-----

12 messages 2000/12/29

[ruby-talk:8167] Re: speedup of anagram finder

From: "Joseph McDonald" <joe@...>
Date: 2000-12-28 11:08:24 UTC
List: ruby-talk #8167
Yup.  Sorry about posting inaccurate benchmarks.
Here is the whole test:

#!/usr/local/bin/ruby

require "benchmark"

def fa7(words, out = STDOUT)
  anagrams = {}
  keys = {}
  word, key = nil
  total = 0
  
  for word in words do
    word.chomp!
    word.downcase!
    key = []
    word.each_byte {|s| key.push(s)}
    key.sort!
    if anagrams[key]
      anagrams[key] << word
      keys[key] = 1
    else
      anagrams[key] = [ word ]
    end
  end
  for key in keys.keys
    out.puts anagrams[key].join(' ')
    total = total + 1 
  end
 # puts "total: #{total}"
end


def fa6(words, out = STDOUT)
  anagrams = {}
  keys = {}
  word, key = nil
  total = 0
  
  for word in words do
    word.chomp!
    word.downcase!
    key = word.split('')
    key.sort!
    key = key.join
    if anagrams[key]
      anagrams[key] << word
      keys[key] = 1
    else
      anagrams[key] = [ word ]
    end
  end
  for key in keys.keys
    out.puts anagrams[key].join(' ')
    total += 1
  end
#  puts "total: #{total}"
end


WORDS = STDIN.read
#fa7(words);

Benchmark::bm(16) do |job| 
  GC.start
  job.report("keys") {fa6(WORDS, open('/dev/null', 'w'))} 
  GC.start
  job.report("each_byte") {fa7(WORDS, open('/dev/null', 'w'))}
  GC.start
  job.report("keys") {fa6(WORDS, open('/dev/null', 'w'))} 
  GC.start
  job.report("each_byte") {fa7(WORDS, open('/dev/null', 'w'))}
  GC.start
  job.report("keys") {fa6(WORDS, open('/dev/null', 'w'))} 
  GC.start
  job.report("each_byte") {fa7(WORDS, open('/dev/null', 'w'))}
end

and the output:
 head -20000 /usr/share/dict/words | ./anagrams2.rb
                      user     system      total        real
keys              5.109375   0.062500   5.171875 (  5.226218)
each_byte         1.835938   0.023438   1.859375 (  1.888366)
keys              3.367188   0.000000   3.367188 (  3.421602)
each_byte         1.835938   0.000000   1.835938 (  1.908974)
keys              3.343750   0.007812   3.351562 (  3.444110)
each_byte         1.820312   0.015625   1.835938 (  1.846535)        

Here's one strange thing... notice that each_byte didn't get
*hit* on it's first run.  Now, if I switch the top 2 tests
I get:

 head -20000 /usr/share/dict/words | ./anagrams2.rb
                      user     system      total        real
each_byte         2.531250   0.054688   2.585938 (  2.673936)
keys              4.312500   0.000000   4.312500 (  4.380338)
keys              3.414062   0.000000   3.414062 (  3.477650)
each_byte         1.812500   0.023438   1.835938 (  1.868376)
keys              3.375000   0.015625   3.390625 (  3.473766)
each_byte         1.843750   0.000000   1.843750 (  1.868625)      

each_byte got bytten ;-)  but so did keys on it's first run.

Well, I'll defintly be throwing out first runs from now on unless
Gotoken says he's found a work-around or I find out what I'm
doing wrong.

thanks,
-joe


> -----Original Message-----
> From: ts [mailto:decoux@moulon.inra.fr]
> Sent: Thursday, December 28, 2000 2:53 AM
> To: ruby-talk ML
> Cc: ruby-talk@netlab.co.jp
> Subject: [ruby-talk:8164] Re: speedup of anagram finder
> 
> 
> >>>>> "J" == Joseph McDonald <joe@vpop.net> writes:
> 
> J> % head -20000 /usr/share/dict/words | ./anagrams2.rb
> J>                       user     system      total        real
> J> keys              5.148438   0.023438   5.171875 (  5.219981)
> J> each_byte         1.835938   0.015625   1.851562 (  1.862386)    
> 
>  I was very surprised by this result, so I've asked Joseph 
> McDonald to send
> me, in a private email, its test.
> 
>  If you take its source and run multiple times "keys" and "each_byte",
> you'll see something like this :
> 
> pigeon% head -20000 words | /usr/bin/ruby anagrams2.rb
>                       user     system      total        real
> keys              3.900000   0.020000   3.920000 (  3.922335)
> each_byte         1.600000   0.000000   1.600000 (  1.599187)
> keys              2.550000   0.000000   2.550000 (  2.550042)
> each_byte         1.600000   0.000000   1.600000 (  1.597049)
> keys              2.550000   0.000000   2.550000 (  2.550949)
> each_byte         1.590000   0.000000   1.590000 (  1.595726)
> pigeon% 
> 
>  See the unusual result 3.900000 for the first run of "keys" (I think that
>  it's the result of the allocation of memory, after ruby can 
> re-use the memory
>  previously allocated)
> 
>  Be carefull with benchmark, especially for the first result.
> 
>  Someone can send me a script where it's possible to see a difference
>  *significative* between an #each and a #for ?
> 
> 
> 
> 
> Guy Decoux
> 

In This Thread