83 名前:ぺるにゃん [02/04/28 20:10 ID:gfGqCBjT] sort のお話ですにゃ。 今の Perl は、巨大な配列を sort すると、効率が悪くなります;; @sorted = sort(@array); @array の要素数が増えるにしたがって、処理時間が爆発します。 これは Perl の sort() 関数が、効率の悪いアルゴリズムを 使っているせいでしょうか? かんたんな実験により、配列の要素数 を N とすると、perl の sort() 時の 比較回数はおよそ N * log N 回のオーダーという結果がでました。これは、 配列が 100 万要素だったとしても、たかだか N の20倍程度の比較回数にすぎません。 おそらくは最高レベルの効率です。私はこれに文句をつけることはできません。 では、sort() 自体は実用じゅうぶん速いのに、 なぜ上の1行は爆発的に遅くなるのでしょうか?試しにこう書いてみました。 sort(@array); これは@array が100万要素を超えていても、じゅうぶん高速でした。 (当然、ボイドコンテキストなので、結果は捨てられるので、意味はありません) ということは、巨大な配列の「複製」のために、ものすごく時間を 取られているということです。それはありうることです。 ソート結果を直接 @array に代入してしまう関数があれば、 これは解決できると思います。そういう sort関数を希望ですにゃ。 ( 私は ruby 使いじゃないのですが、 ruby には、「破壊的 sort」が用意されているらしいんですねぇ・・・ さすがにゃ)