[#39464] Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
25 messages
2004/04/01
[#39608] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案
— pegacorn@...
2004/05/02
遅い反応&File.fnmatchは使った事ない&ruby-devの方では
[#39609] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案
— pegacorn@...
2004/05/02
File.fnmatch(と Dir.glob)をちょっと使ってみたのですが、
[#39610] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/05/02
山本です。
[#39611] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案
— matz@... (Yukihiro Matsumoto)
2004/05/02
まつもと ゆきひろです
[#39613] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案
— pegacorn@...
2004/05/02
From: matz@ruby-lang.org (Yukihiro Matsumoto)
[#39616] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案
— matz@... (Yukihiro Matsumoto)
2004/05/02
まつもと ゆきひろです
[#39620] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案
— pegacorn@...
2004/05/03
From: matz@ruby-lang.org (Yukihiro Matsumoto)
[#39621] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案
— matz@... (Yukihiro Matsumoto)
2004/05/03
まつもと ゆきひろです
[#39622] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案
— pegacorn@...
2004/05/03
From: matz@ruby-lang.org (Yukihiro Matsumoto)
[#39623] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案
— matz@... (Yukihiro Matsumoto)
2004/05/03
まつもと ゆきひろです
[#39624] Re: Re [ruby-dev:23297] 大文字・小文字の区別がDOSISHかどうかで変わる、パス名マッチ関数の提案
— pegacorn@...
2004/05/03
From: matz@ruby-lang.org (Yukihiro Matsumoto)
[#39485] RAA trouble and maintenance — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
5 messages
2004/04/04
[#39513] リファレンスマニュアルを使うには? — "yokoyama" <yokoyama@...0038.net>
yokoyamaともうします。
4 messages
2004/04/08
[#39542] open-uri takes wrong value for Host with proxy — Atsushi SHICHI <ats7@...>
しちと申します。
5 messages
2004/04/12
[#39550] NEW trial (RC?) version of Ruby/Tk — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
10 messages
2004/04/14
[#39566] Re: int/int in Ruby2? — gldwssr@...
I am making elliptic curve crypto.
1 message
2004/04/15
[#39570] RC version of the next Ruby/Tk — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
5 messages
2004/04/18
[#39576] [ANN] nadoka 0.1.0 — SASADA Koichi <ko1@...>
ささだです。
6 messages
2004/04/20
[#39578] [ANN] Algorithm-Diff 0.1 released — MoonWolf <moonwolf@...>
GPLではないdiffライブラリとしてAlgorithm-DiffというのをRAAにリリースしました。
8 messages
2004/04/21
[#39579] Re: 気象庁の... Re: uriってどう使うんでしょうか — Hideyuki Oya <h_oya@...>
oyaです。
10 messages
2004/04/22
[#39588] ruby-ver? 配列のランダム化 — shintani kiyonori <k_shin@...>
毎度、初歩的な質問で申し訳ありません。新谷と申します。
11 messages
2004/04/25
[#39590] Re: ruby-ver? 配列のランダム化
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/25
山本です。
[ruby-list:39600] Re: ruby-ver?配列のランダム化
From:
"H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date:
2004-04-26 12:44:05 UTC
List:
ruby-list #39600
山本です。
Shin-ichiro HARA <sinara@blade.nagaokaut.ac.jp> wrote:
(2004/04/26 18:06)
>これはやはり sort を使うこと自体が、コスト高であるのが気に
>なります。
slice! は平均して「要素数 / 2」の要素を毎回ずらす必要があるので、
O(n * log(n)) のオーダで要素を交換するだけの sort のほうが速いんじゃないか、
と思っていました。(でも sort_by は一時配列を使うので、そうでもないですね)
300.times { Array.new(100).randomize! } だと
user system total real
0.290000 0.000000 0.290000 ( 0.290000) # slice!
0.621000 0.000000 0.621000 ( 0.621000) # sort_by
0.641000 0.000000 0.641000 ( 0.651000) # 原さんの一様アルゴリズム
で確かに slice! が一番速いです。(原さんのアルゴリズムより速いのは意外でした)
でも 10.times { Array.new(3000).randomize! } ぐらいになると
0.761000 0.000000 0.761000 ( 0.761000) # slice!
0.901000 0.000000 0.901000 ( 0.901000) # sort_by
0.631000 0.000000 0.631000 ( 0.631000) # 原さんの一様アルゴリズム
で、3.times { Array.new(10000).randomize! } だと
user system total real
2.083000 0.000000 2.083000 ( 2.083000) # slice!
0.981000 0.000000 0.981000 ( 0.981000) # sort_by
0.631000 0.000000 0.631000 ( 0.631000) # 原さんの一様アルゴリズム
となって逆転してきます。でも逆にいうと、ここまで大きくないと slice! には
勝てないようです。原さんの確率一様なアルゴリズムは、速度的に安定してますね。
>さらに、randomize の精度が sort のアルゴリズム依存であって、
>例えば stable な sort であるとすると、順序が変わらない確率
>が若干高いです。いくら確率を対象としているといって、アルゴ
>リズムが確率的なのは気持ち悪いです。(気持ち悪くない人もい
>るかも。)
確かにそうかもしれません・・・でも、rand 実数バージョンならこの問題はもう少し
緩和される気もします。(同じ実数が頻繁に生成されない限り)
>In [ruby-list:39593]
>
>> class Array
>> def randomize!
>> length.times do |i1|
>> i2 = rand(length)
>> t = self[i1]
>> self[i1] = self[i2]
>> self[i2] = t
>> end
>> end
>>
>> def randomize
>> result = self.dup
>> result.randomize!
>> result
>> end
>> end
>
>こちらは、アルゴリズムとしてまずいのでは?手で計算する
>と [1, 2, 3] をシャッフルして 2 が先頭に来る確率は 10/27
>みたい。もちろん 1/3 であるべきですよね。
>#そもそも手計算で正答する確率がかなり低いのですが(^^;
>
> def randomize!
> (length-1).downto(0) do |i1|
> i2 = rand(i1+1)
> t = self[i1]
> self[i1] = self[i2]
> self[i2] = t
> end
> end
>
>だったらいいかな。
ですね (^^; 適当にかき混ぜることしか考えてなくて、確率的な一様性は
頭にありませんでした。原さんのアルゴリズムだと、順列がひとつずつ、
一様に生成されることが期待できますね。
>一番美しいのは r = rand(nの階乗) を一発だけ計算して、後で
>ゴソゴソするアルゴリズムだと思うんですが、r を配列に「デ
>コード」するコストが大きくてあまり速くならなそう。
面白そうですね。r をビット演算するイメージでしょうか。
気が向いたら組んでみるかもしれません。