Hatena::Groupsubtech

#生存戦略 、それは

-> 06 { 09 / 27 }

ruby で schwartzian 変換

18:37 | はてなブックマーク -  ruby で schwartzian 変換 - #生存戦略 、それは

ああそっか、記述見かけないと思ったらクイックソートだから必要ないの、か?

require 'benchmark/runner'
require 'digest/sha1'

class SortBench < Benchmark::Runner
  def setup
    @ary = (1..10000).to_a.map{|i| i.to_s}
  end
  def normal
    @ary.sort_by {|i| Digest::SHA1.hexdigest(i) }
  end
  def schwartzian
    @ary.map {|i| [i, Digest::SHA1.hexdigest(i)] }.sort_by {|i| i.last}.map {|i| i.first}
  end
end

SortBench.run 10

結果

                 user     system      total        real
schwartzian  0.840000   1.330000   2.170000 (  2.168033)
normal       0.720000   0.870000   1.590000 (  1.589423)

しゅなんとか変換かますと遅い。

ElimElim2006/09/27 14:42先生それディレクトリしか出ません!

secondlifesecondlife2006/09/27 14:48別の人にもつっこまれた!心の目で見るんだよ!!!

mohrimohri2006/09/27 15:14echo *

spiritloosespiritloose2006/09/27 15:28YahooのAPIもPHPのシリアライズ形式でだしてますよね。
http://neta.ywcafe.net/000544.html

secondlifesecondlife2006/09/27 15:36なるほど。そこそこ知られた手法なんですね。
所詮データのアウトプット直前の構造は高速に取得できるでしょうから、アウトプット形式が様々な物に対応していて柔軟な方がよさそうですね。

spiritloosespiritloose2006/09/27 15:52>パラグラフ定義シンタックス
'paragraphs'ってオプションがあるみたいですよ!
:h paragraphs
デフォルトは"IPLPPPQPP LIpplpipbp"だそうで。なんのこっちゃ・・・・
調べていじればできそうですね。

secondlifesecondlife2006/09/27 16:03ああ以前チャレンジして挫折したことを今思い出したので、あとはよろしくお願いいたします!!!

MarathonMarathon2006/09/27 18:37先生!もしかしてその人ls -alとか使いたいんだけど使い方が分からなくて連打してたんじゃ・・・

secondlifesecondlife2006/09/27 18:49ls を 0.1 秒間に三回打つと裏ファイルシステムが見れるという都市伝説を信じていた頃があったんですよ!ちなみに ll を打つことでやり直しが可能(USO)

walf443walf4432006/09/28 12:06>ああそっか、記述見かけないと思ったらクイックソートだから必要ないの、か?
Enumerable#sort_byのマニュアルに載ってますが、sort_byは
map {|i| i.hoge }.sort {|a,b| a <=> b }.map {|i| i.hoge }
とほぼ同じ意味ですので(少し早い)後者のコードはあまり意味がないようです。

明示的にschwartzian transformを行なう際は、sort_byでやるよりはsortを使った方が余分な動作がない分早いのではないかと思われます。ただ基本的にはsort_by {|i| .. }で十分のようです。
http://www.ruby-lang.org/ja/man/?cmd=view;name=Enumerable

secondlifesecondlife2006/09/28 12:09なるほど、補足 thx!

parasporospaparasporospa2006/09/29 13:45>パラグラフ
'paragraphs'はviからある古いオプションで、nroffのマクロを指定することしかできないようです。
http://d.hatena.ne.jp/parasporospa/20060722/1153564681

secondlifesecondlife2006/09/29 14:22どもども、ありがとうございます。