[#39863] forループの速度 — Masahiro Sato <msato@...>

15 messages 2004/07/20

[#39868] イテレータとfor文 — OOTANI TAKASHI <otn@...5.so-net.ne.jp>

大谷と申します。

31 messages 2004/07/20
[#39886] Re: イテレータとfor文 — Tietew <tietew-ml-ruby-list@...> 2004/07/21

[ruby-list:39835] Re: (要素がString, Fixnum 以外の)配列の集合演算

From: Hiroshi Takagi <gollum@...>
Date: 2004-07-06 13:54:15 UTC
List: ruby-list #39835
高木です。


On Tue, 6 Jul 2004 19:54:37 +0900
卜部昌平 <s-urabe@par.odn.ne.jp> wrote:

> だからといってHashの方が高速とは一概に言えないあたりがO記法の難しいところなわけで、以下のような実験をすると、実用的な状況では配列そのもの 
> の方が速いのではないかと.... 何十個もインスタンス変数があるようなのは稀だと思いますし。

実際に業務で作成していたクラスもインスタンス変数は 8個でした。
(20個程度にはなるものも出てくるかも...)

4000程度のobject の配列(集合)を二つ作って、
集合演算をいろいろとやってみましたが、
たしかにこの程度では、Array で実装した方が少し早い結果が出ました。

> require 'benchmark'
> 
> (1..32).each do |i|
>    foo = Foo.new(i)
>    bar = Foo.new(i)
>    t1  = Benchmark.realtime { 2048.times { foo.eql1(bar) } }
>    t2  = Benchmark.realtime { 2048.times { foo.eql2(bar) } }
>    printf("%2d %s faster\n", i, t1>t2 ? "array":" hash")
>    STDOUT.flush
> end

Benchmark の使い方がとても参考になりました。
ありがとうございました。

最初のreply をいただいて、動的プログラムに走ろうとしてたんですが、
1.8 の機能を使うとevalぁずにすんだのがなんだかうれしい :-)

-- 
Hiroshi Takagi <gollum@hi-net.zaq.ne.jp>



In This Thread

Prev Next