春休みの予定

1.セキュリティスペシャリストの勉強
 次の試験での合格を目指す
いまは、教科書半分位読み終わったところ
2.Schemeの勉強
 http://www.geocities.jp/m_hiroi/func/scheme.html#abcscm
↑サイトを参考にさせてもらいながら、勉強中
 春休み中にSchemeでmicro Schemeを作る、くらいまでいけるといいな ぁ
3.TOEIC対策

グラフの一筆書き判定

ある連結グラフが一筆書き可能な場合の必要十分条件は、以下の条件のいずれか一方が成り立つことである(オイラー路参照)。
・すべての頂点の次数(頂点につながっている辺の数)が偶数 → 運筆が起点に戻る場合(閉路)
・次数が奇数である頂点の数が2で、残りの頂点の次数は全て偶数 → 運筆が起点に戻らない場合(閉路でない路)

http://ja.wikipedia.org/wiki/%E4%B8%80%E7%AD%86%E6%9B%B8%E3%81%8D

ちなみに、「全ての辺を通る」が「全ての頂点を通る」になると、ハミルトン路というらしい。

とにかく、グラフが一筆書き可能かどうかは、次数が奇数であるような頂点(奇点)の個数を数えれば良いということになる。
そこで、グラフの隣接行列表現が与えられたときに、その奇点の個数を数えるプログラムをPythonで書いてみた。
最初に書いたのが次のプログラム。

def check(G):
    ctr = 0
    for i in range(len(G)):
        if sum(ls[i]) % 2:
            ctr +=1
    return ctr

Pythonのmap関数を使えばもっと簡潔にできないかなー、と思って考えているうちに、結局一行になった。

sum(map(lambda x: sum(x)%2, G))

map超便利。

Prologで自動定理証明?

論理学の定理は、形式論的には、公理と推論規則から導かれるものだ。
たとえば、ヒルベルト流では、

A ⊃ (B ⊃ A)
(A ⊃ (B ⊃ C)) ⊃ ((A ⊃ B) ⊃ (A ⊃ C))
(¬A ⊃ ¬B) ⊃ (B ⊃ A)

という三つの公理と、次のMP(modus ponens)という一つの推論規則を用いる。
A と (A ⊃ B) が定理ならば、Bも定理である。

で、公理を事実、推論規則をルールとしてPrologに実装してやれば、自動的に定理を証明してくれるかな?と思ったのだが...

実装例

theorem( imp( P, imp(Q,P) ) ).
theorem(imp(imp( P, imp(Q,R) ),  imp( imp(P,Q), imp(P,R)))).
theorem(imp(imp(neg(P),neg(Q)),imp(Q,P))).
theorem(B):- theorem(A), theorem(imp(A,B)).

上記のような実装でたとえば
theorem(imp(a,a)) #A ⊃ A
のようなものは証明できた。
しかし、証明できない式もたくさんある。

ヒルベルト流でなにか定理を証明しようとするとき、機械的に行うのは難しい(もしかして無理?)のようだ。
なぜなら、A ⊃ (B ⊃ A)のような形をした論理式は無数に存在する。
定理の証明のために、うまく公理をつかうには、ひらめきが必要になってしまう。
自動定理証明のためには、導出原理などの工夫が必要なようだ。

音声信号の符号化

アナログデータである音声をどうやってデジタルデータに変換するか?
時間、大きさが連続 → 時間、大きさを離散化

  1. 標本化
  2. 量子化
  3. 符号化

という手順で変換が行われる。

  • 標本化

サンプリングとも言う
時間(横軸)に対する離散化。
アナログ信号を単位時間毎に区切って、標本値を取る。
標本化を行う周期のことを、サンプリング周波数という。

    • 標本化定理

アナログデータからデジタルデータに変換するとき、元データの周波数の二倍以上のサンプリング周波数を使用する必要がある。
(この定理の証明を理解するには、もっとちゃんとフーリエ変換を勉強しないと駄目だ…)

CDのサンプリング周波数は44100Hz, 電話のサンプリング周波数は8000Hz
これは、人間の可聴域が20~20000Hzであり、人間の話し声が300~3400Hzであることに対応しているらしい。

大きさ(縦軸)に対する離散化。
標本化によって得られた標本値を整数化する工程。

CDの量子化ビット数は16bit(65536段階)、電話の量子化ビット数は8bit(256段階)

  • 符号化

標本化と量子化によって得られた数値をディジタルデータとして割りつける工程。
符号化のアルゴリズムは色々ある。

  • PCM(Pulse Code Modulation)
  • ADPCM(Adaptive Differential Pulse Code Modulation)
  • CELP(Code Excited Linear Prediction)

参考
平成23年度 ネットワークスペシャリスト 合格教本 (情報処理技術者試験)
図解 最新 ネットワークの仕組みがわかる本
http://www.kyastem.co.jp/technical/ExplanationCodec.html

Prolog勉強中

Prologへの入門 (PrologとAI)

Prologへの入門 (PrologとAI)

現在、この教科書でPrologのお勉強中。

手続き型以外の言語にも手を出してみたいと思ったのがきっかけ。

今はカットの辺りで悪戦苦闘してます。

勉強したことを少しずつBlogで書いていければなと思ってます。