1/19 パターン認識(3),その他


前回までの補足


試験について


前回の感想,質問より

Q.
rubyで四捨五入するコマンドってありますか? 関数(int(x)の形)でint(3.1415)=3,int(2.000)=2,int(-sqrt(2))=-2という感じで使いたかったのですが、上手く出来ませんでした。
A.
いくつか方法があります.
irb(main):006:0> a=2.4
=> 2.4
irb(main):007:0> b=3.6
=> 3.6
irb(main):008:0> a.to_i
=> 2
irb(main):009:0> a.floor
=> 2
irb(main):010:0> a.ceil
=> 3
irb(main):011:0> a.round
=> 2
irb(main):012:0> b.to_i
=> 3
irb(main):013:0> b.floor
=> 3
irb(main):014:0> b.ceil
=> 4
irb(main):015:0> b.round
=> 4

Q.
一応答えは返ってくるのですが、大丈夫でしょうか?
A.
正しく動くかどうかのテストができる入力を考えることも重要なプログラミング能力の一つなので,頑張ってください.

今回の例では,教科書の例にある "ATAG"と"AAC"のアラインメント表を作成してみることで確かめることができます.

irb(main):002:0> align("ATAG","AAC")
=> [[0, -2, -4, -6], [-2, 2, 0, -2], [-4, 0, 1, -1], [-6, -2, 2, 0], [-8, -4, 0, 1]]

 
Q.
なぜこの計算で類似度が求まるのかが理解できなくて苦しい。
A.
「類似度」をどう定義するかは扱おうとする問題によります.DNA配列 の「類似度」に関しては, という性質を持つことが期待されますが,今回用いたような定義がこのような 性質を持っているので使われているということだと思います.
Q.
 「動的計画法」はなぜ「動的」なのですか?
A.
「"Dynamic Programming"の直訳だから」というのが一応の答えですが, "Dynamic Programming"はなぜ"Dynamic"なのかと返されるだけですね. 現在の視点から見ると "Dynamic Programming"は全然"Dynamic"でない(特に計算機 科学で使われる意味で)ので,不適切な命名だと思いますが,1953年頃に考案 されて以来,変えられないままこの名前が定着してしまっています.
Q.
tracebackでたどり戻るよりも最初の表を作るときに文字列も同時に作れるようなプログラムのほうが楽になるの かもしれないと思いました。
A.
鋭いですね.書き方に工夫はいりますが,その方法だとプログラム自体は 書きやすいと思います.ただ, ということがあって,教科書ではこの方法を扱っています.
Q.
計算早いですけど、2次元配列を記憶する分の容量がかかる気がします
A.
はい.たとえば,このようにして1000文字同士のアラインメントを求める と1001 * 1001 で約100万要素の2次元配列が必要になります.実際の問題では, 「類似度がある値よりも小さい場合はそのことだけが分かれば良くアラインメ ントを求める必要はない」といったもので十分なことが多く,その場合は表の メモリを節約するテクニックがあります.
Q.
最近、パソコンが重すぎて困っています。 ターミナルでcd Documentsと入力するだけでも10秒ほど止まってしまいます。 isrbを起動するだけでも5分くらいかかってしまいます。 Safariで文字を入力するときも同じように短時間フリーズします。 僕は何か悪いことをしたんでしょうか。
A.
悪いこと(出所の明らかでないプログラムをダウンロードして実行して, ウイルスに感染した等)をした記憶がないとしたら, などが考えられます.自分で解決できない場合は,講義の演習中にTAや田中に聞くか,自習中に相談員に聞いてみてください.
Q.
なみにこのプログラムに、全角文字の文字列を 入力してみたところ、どうやら、全角文字は、半角文字3つに相当するようですね。 2つだと思い込んでいたので意外でした。これは、UNIXのためでしょうか。Rubyのためでしょうか。
A.
教育用計算機システム上のiMacでは標準環境で日本語 をUTF-8という符号で表 されています.UTF-8では漢字は3バイト(1バイト = 8ビット)で表現されます. iMacに現在入っているRuby 1.8.7では文字列を「バイト」の列として扱っているようですが,Rubyの新しいバージョン1.9では文字列をバイトの列ではなく「文字」の 列として正しく扱えるようになっているようです.
ktanaka@dell:~$ irb1.9 
irb(main):001:0> s="あいう"
=> "あいう"
irb(main):002:0> s.length()
=> 3
 

前回の課題について

投票システム

vote.rbをダウンロードして,ホームディレクトリに保存してください.ドックからターミナルを起動して,
ruby vote.rb 選択肢番号
のように使います.

今日の練習,投票

関連リンク


教科書の補足


今日の課題