せっかくネットワークにつながってるんだから、 時計もネットワークで合わせた方がいいかな、と思って、 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ぐらいまでで調べて遷移テーブルを 構築する、というのも今日的に思えますがどうでしょうか。
距離が近くて、かつ、よく出て来る単語は点数が高くなるので そういうのは「もしかして」の候補に相応しいわけで、 そういう使い方をするものらしいです。
なかのさんに1TBのハードディスクをもらったので、外部ドライブとして使ってみる。
単体ドライブをUSBストレージとして使うための箱がソフマップで2k円ぐらいで売っていると takuo さんにきいて、それを使う事にする。 箱に入れて電源をつないでデータケーブルを繋ぐだけだ。 費用は、商品が2k円に送料が500円だった。
/dev/sdb に繋がったので、 てきとうにボリューム名を決めて ext4 でフォーマットしてみる。 マウントしてみると、普通に見れる。あたりまえか。
cdrom に焼いてたデジカメのデータを全部こっちに移しました。 快適に閲覧できて、 これは非常に具合が良いです。 ファイルマネージャの窓にプレビューが全部あっというまに表示されます。 しかも、今あるデータ全部移しても数パーセントにしかなりません。
デジカメ使い始めてまだ4年ほどだが、4年まえのデータを今みるとかなり懐かしい。
それにしても外付ハードドライブなんて、なんかいにしへのパソコンみたいです。 PC-9801 とか エプソンの互換機とかそういうのを思い出しました。 当時のインタフェースはナマの scsi で、 サイズは数十メガバイトでした。 研究室の sony の NEWS とかにも外付ドライブがあったような気もする。 プリンタは apple のレーザライタで vi で手で書いた(直した) postscript を lpr にパイプごしに投げると印刷してくれた。 そういう時代でした。 私はビンボーだったので私物のパソコンに HDD がついたのはもっと後の事です。
1TBのストレージというと、わしが東大でバイトしてたころは ラック半分ぐらい占領するようなレイドシステムが、 光ファイバで繋がる謎のインタフェースを装備しているというもので、 ひと揃えで何百万もしましたが。 ほんの10年まえの話です。 それが今じゃ「余ってるから持って帰りますか?」 と言われて友達に貰うような存在です。
夏休みの虫の数という記事に 蛍光灯に入って来る虫の寸法と数の分布の話がある。 こまめに分類して数えているのが面白い。 小さいやつを顕微鏡的に拡大したのも欲しかった気もする。
寸法と数の分布を手元で調べてみます。
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 というサイズから私はカブトムシとか言ってますが、 統計が語るのは虫のサイズだけで、種類については何も言ってませんね。うひひ。