照明器具の中の虫 (2011/09/05)


NTP

せっかくネットワークにつながってるんだから、 時計もネットワークで合わせた方がいいかな、と思って、 ntpdate というのをインストールして週に一回実行するようにした。

すげぇよく時間あってる。週に一回だとやりすぎかもしれん。月に一回に減らすかな。 だいたい、5分とかずれてなきゃいいよ。サーバは古巣の nict にしました。

編集距離

よく「文字列の編集距離」といわれる、 レーベンシュタイン距離(wikipedia)を わしも書いてみました。

Class String
  def leven(str, cost=1)
    if self.length == 0 or str.length == 0
      self.length + str.length
    else
      if self[-1] == str[-1]
	xcst = 0
      else
	xcst = cost
      end
      [self[0..-2].leven(str, cost)+1, self.leven(str[0..-2], cost)+1, self[0..-2].leven(str[0..-2], cost) + xcst].min
    end
  end
end

距離の定義が解りやすいように、書いてみました。 しかし、上のコードはクッソ遅いです。全く使いものになりません。 空間計算量も時間計算量も指数関数的に増えるからです。 一回計算したところを別の枝からまた計算してるせいです。

本当は比較する文字列の長さの積が時間(および空間)計算量の upper bound になります。 場合によってはもっと削れるらしい。 そのへんは上のリンク先の wikipedia に詳しく書いてあります。 アルゴリズムが正しいという証明も載ってました(めんどくさくて読んでません)。

この実装はデフォルトで削除、挿入、置換、いずれも距離1で計算しますが(置換の距離だけオプション引数で指定できます)、 たとえばスペルミスみたいのを見ようと思ったら、どれも同じく距離1というのはおかしいですよね。 なぜなら、間違いやすい文字とそうでないものがあるからです。 キーボードの上の距離とかを使うと良いのかもしれません。 ネット上にどれくらい間違いがあるかを、編集距離1から2ぐらいまでで調べて遷移テーブルを 構築する、というのも今日的に思えますがどうでしょうか。

距離が近くて、かつ、よく出て来る単語は点数が高くなるので そういうのは「もしかして」の候補に相応しいわけで、 そういう使い方をするものらしいです。

2011/08/31

なかのさんに1TBのハードディスクをもらったので、外部ドライブとして使ってみる。

単体ドライブをUSBストレージとして使うための箱がソフマップで2k円ぐらいで売っていると takuo さんにきいて、それを使う事にする。 箱に入れて電源をつないでデータケーブルを繋ぐだけだ。 費用は、商品が2k円に送料が500円だった。

/dev/sdb に繋がったので、 てきとうにボリューム名を決めて ext4 でフォーマットしてみる。 マウントしてみると、普通に見れる。あたりまえか。

cdrom に焼いてたデジカメのデータを全部こっちに移しました。 快適に閲覧できて、 これは非常に具合が良いです。 ファイルマネージャの窓にプレビューが全部あっというまに表示されます。 しかも、今あるデータ全部移しても数パーセントにしかなりません。

デジカメ使い始めてまだ4年ほどだが、4年まえのデータを今みるとかなり懐かしい。

それにしても外付ハードドライブなんて、なんかいにしへのパソコンみたいです。 PC-9801 とか エプソンの互換機とかそういうのを思い出しました。 当時のインタフェースはナマの scsi で、 サイズは数十メガバイトでした。 研究室の sony の NEWS とかにも外付ドライブがあったような気もする。 プリンタは apple のレーザライタで vi で手で書いた(直した) postscript を lpr にパイプごしに投げると印刷してくれた。 そういう時代でした。 私はビンボーだったので私物のパソコンに HDD がついたのはもっと後の事です。

1TBのストレージというと、わしが東大でバイトしてたころは ラック半分ぐらい占領するようなレイドシステムが、 光ファイバで繋がる謎のインタフェースを装備しているというもので、 ひと揃えで何百万もしましたが。 ほんの10年まえの話です。 それが今じゃ「余ってるから持って帰りますか?」 と言われて友達に貰うような存在です。

2011/09/05

夏休みの虫の数という記事に 蛍光灯に入って来る虫の寸法と数の分布の話がある。 こまめに分類して数えているのが面白い。 小さいやつを顕微鏡的に拡大したのも欲しかった気もする。

寸法と数の分布を手元で調べてみます。

2cm以上     1 匹

 1cm $(C"& 2cm   1 匹

 0.5cm $(C"& 1cm  15 匹

 1mm $(C"& 5mm   59 匹

 0.5mm $(C"& 1mm  393 匹

 0.5mm 未満   654 匹

     合計 1123 匹

長さ1123の Array に上記寸法を詰めていきます。

yuji@dedepo:~%irb1.9.1 
irb(main):001:0> a=Array.new(1, 2.0)
=> [2.0]
(中略)
irb(main):009:0> a=a+Array.new(654, 0.05)

累積分布(ランク=サイズ)を両対数でプロットしてみます。

巾分布みたいですね。巾の値を計算してみましょう。

irb(main):015:0> a.mle_power
=> 2.43612191911718

累積分布関数の巾は\(\mu = -2.4\)ぐらい? でしょうか。 では、5cmぐらいのカブトムシとかクワガタが照明器具に入るには、照明器具に何匹ぐらい虫が必要でしょうか。

考え方はこうです。グラフでは縦軸 0.001 横軸2cmのところでプロットが終ってますが、それを横軸5cmのところまで伸ばすと 縦軸はどこまでいくでしょうか?

2cm以上の虫に比べて5cm以上の虫の数は \((5/2)^\mu = 0.11\) 倍しか居ませんから、 グラフは右下にのびて、おおかたx軸にとどくぐらいまで来るわけです。 この確率で期待値が1匹に届くには 9倍の数の虫が入ればいい、 ということになります。つまり1万匹ぐらい? あるいは9年待ってればクワガタが照明器具に入るわけです。

もっとも普通の照明器具には、そもそもカブトムシなどが入る隙間は無いようにも思えますし、 1万匹も虫が入ると光が照明器具から出て来なくなって、あまり虫には魅力がなくなるかもしれません。 あと、5cm というサイズから私はカブトムシとか言ってますが、 統計が語るのは虫のサイズだけで、種類については何も言ってませんね。うひひ。


記事リストへ