このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。
一筆書きが得意 | スポーツ観戦では勝ち負けにこだわる | |
学籍番号 | 氏名 | (番号欄) |
, の値を覚えている | 運がいいとか流れはあると思う |
班で各自の名前を元に下記の通りハフマン符号を作成すること (Excel やプログラミング言語など各自使いやすいツールを使用して良い)
班員の名前をそれぞれローマ字で表し、班員全員の名前のアルファベッ トの頻度を計算する。
SAKAMOTO NAOSHIだけなら次のようになる
S | A | K | M | O | T | N | H | I | Total |
---|---|---|---|---|---|---|---|---|---|
2 | 3 | 1 | 1 | 3 | 1 | 1 | 1 | 1 | 14 |
文字 | S | A | K | M | O | T | N | H | I | Total |
---|---|---|---|---|---|---|---|---|---|---|
頻度 | 2 | 3 | 1 | 1 | 3 | 1 | 1 | 1 | 1 | 14 |
確率 | 0.14 | 0.21 | 0.07 | 0.07 | 0.21 | 0.07 | 0.07 | 0.07 | 0.07 | 1(0.98) |
0.14 |
S |
0.21 |
A |
0.07 |
K |
自分の名前をディジタル符号化する。 以下のそれぞれのフォーマットで、自分の名前をディジタル符号にすること。 なお、それぞれの符号において、ローマ字表記などの英字、ひらがな、漢字 表記など、表記法を別々に選んで良い。 (モールス符号、ASCIIはローマ字、Shift_JIS, UTF-8 は漢字など)。 基本は0,1で表すこととするが、煩瑣な場合は16進法の記法も許す。
以下の事項について、班で取りまとめよ。
来週の火曜日の夕方までに <[email protected]>宛に ハフマン符号と文字符号と考察課題を取りまとめて一通のレポートを作成し、 メールすること。
情報とはどのようなものでしょうか? 知ると有用な情報とは、知らないうちは不確定な事柄です。 これは、確率論の事象に対応します。 つまり、例えば、サイコロを振ったときに出た目は、予めわからないため、 サイコロの出た目は情報になります。 これは、明日の天気、事故の状況など、予めわからないものすべてに当ては まります。
サイコロの目は6通りあります。 したがって、目の情報はまずは6個あります。 しかし、それ以外にも考えられます。 例えば、「偶数の目が出た」というのも、予めはわからないので、これも情 報になります。この情報を得ると、出た目が1,3,5 ではないことが分かるの で、知る前よりは知った後の方が不確定度が減っています。 知る前は6パターンのうちのどれかだったのが、2,4,6 の3パターンのどれか になっています。 つまり、情報を知れば知るほど、事象の各確率が上がることになります。 すべての情報を知るとは、その事象がおきている確率が1になることを意味 します。
サイコロの目に関して、「偶数の目」と「4以上」は共に有用で、それぞれ は事象が半分に絞れますが、合わせると4か6と2個の事象に絞れます。 これは情報量を考えるとき、それぞれの情報は合わせることができるが、純 粋に半分ずつと考えることはできません。 情報量は事象の確率の対数の符号を反転させたものと定義されます。 つまり、確率 の事象 の情報 量 は で定義されます。 単位は log の底が 2 の時 bit で表します。
「サイコロの目が偶数」であるという情報量は 1bit です。 「サイコロの目が4以上」も情報量は 1bit です。 「サイコロの目が6」という情報量は次のように計算します。
例えば、256文字が等確率で出現する場合、各文字の情報量は以下のように 8bit になります。
得られる情報量の期待値をエントロピーや平均情報量と言いま す。 n 個の各事象 が起きうる確率分布である時、エントロピー は以 下のようになります。
例えば、A,B が試合をして、どちらが勝つかわからない場合、つまり勝率 0.5 の場合の勝敗の持つ情報量のエントロピーは以下の計算により 1bit に なります。
一方、A,B が試合をして、Aが 9割方勝つと分かっている場合、つまりAの勝率 0.9 の場合の勝敗の持つ情報量のエントロピーは以下の計算により 0.5bit を下回ります。 つまり、勝敗を知る価値が半減以下ということになります。
要素間の接続関係のみに着目することがあります。 その時、要素のことを頂点(vertex)やノード(node)、 接続関係のことを辺(edge)などと呼び、 頂点と辺のみの関係を示すものをグラフと呼びます。
グラフは数学の対象になっており、小学校でも一筆書きや対角線の本数など で触れられています。 アルゴリズムを考えるときによく使われるので、プログラミングを覚える上で重要な数学の範囲になっています。
しばしば、特定の形状のグラフに対する良いアルゴリズムが考えられます。 最も重要なグラフとして木構造があります。 これは、根という一つの頂点から複数の頂点へ枝分かれしていくのですが、合 流をしないものです。 その中でも特に、枝分かれが一回に高々2本までのを二分木といいます。 根の反対側の終点(枝分かれしない頂点)を葉と言います。 接続している頂点同士で根に近い方を親、遠い方を 子と言います。 頂点から頂点への辺の列を道(path)と言います。
文字列を符号化する時、すべての文字に対して同じ長さの符号を対応させるの ではなく、出現頻度の多い文字に短い符号を割り当て、出現頻度の少ない文字 に長い符号を割り当てると、平均符号長を短くできます。 特に、符号長を出現頻度の情報量とすると、平均符号長が文字のエントロピー とできるため、最適な符号になります。
デビッド・ハフマンが1952年に開発したハフマン符号は、エントロピーに対 して最適な符号が得られます。 これは次のアルゴリズムにより得られます。
このアルゴリズムは JPEGなどの情報圧縮にも使用されます。
日本語に使われている文字は一般には10万文字以上だと言われています。 しかも、中学校までで学校で習う範囲で考えても、日本独自の文化である漢文の返 り点など、今でも一般的なワープロで書くことが困難な表記がまだまだあり ます。
文字表記にも優先すべき文字とそうでない文字があり、 JIS規格では優先順位で第一水準、第二水準、第三水準、第四水準が定めら れています。 現在はコンピュータにおいて、第二水準までは必ず使用でき、第四水準まで も使用できます。 但し、第四水準まででも11,233文字までしか収録できてなく、地名や人名な どで収録できていない文字もあります。 例えば「わたなべ」という姓名には「渡辺」の他にも「渡邉」「渡邊」など もあり、第四水準でも複数ありますが、使われている表記すべてが収録され ているわけではありません。
通信に使う文字表記にはいくつかの規格があります。 歴史的に電気通信で広く使われたものとして「モールス符号」があります。 これは、文字を単音と長音の二種類の音の組み合わせで表現するものです。 Aは「・ー」Bは「・ー・ー」などと表します。 近年まで、無線技師の試験の必須項目でもありましたが、現在は試験項目か らも外されるようになってきて、廃れていく状況です。
コンピュータでは当初は数字だけが計算できればよかったのと、メモリーが 当初は高額だったので、10進数が扱えるように4bit(24=16)や、 数字(10)、英字(26 or 26✕2)に必要な6bit(26=64), 7bit(27=128)の文字コードが使われました。 大昔は大文字しか使えないコンピュータもあった名残で、今のWindowsパソ コンでもファイル名で大文字と小文字を区別しないで使えるようになってい たりします。
7bit の文字コードで今でも最も重要なのは ASCII コードです。 これには、数字、英大文字、英小文字が含まれています。
コンピュータはアメリカで発展し、また、当初メモリーが高価だったことも あり、 20世紀では、主にコンピュータで使用できる文字は英字+一言語でした。 コンピュータで使用する情報の単位として1Byteが 8bitになっていった過程で、文字コード表の前半の128個がASCII、残りの 128個に一言語を割り当てる文字コードが使われました。 ISO-8859 はその規格で、ISO-8859-1 は西ヨーロッパ言語の文字拡張がされ ていました。 JIS X 0201はカタカナを埋めていました。
ISO-2022 は7bitの可変長の文字コード体型で、しかも ASCII と共存できる ようになっていました。 ISO-2022-JP は複数バイト で漢字も表現できるようになっていました。 ただ、これを実現するために、文字コードの中に制御文字が必要なため、文 字列の途中から見たとき、特定のバイトが漢字コードなのか ASCIIコードな のかの判定ができませんでした。 ただ、電子メールは古くから7bitで運用されていたのと、ISO-2022 は広く世 界の言葉を含んでいたので、過去においては電子メール用の国際文字コード として使われていました。
マイクロソフトは、8bitコードの後半は2byteの文字コードとするMS漢字コー ドを考案し、JIS第二水準までの文字を表現できるようにしました。 これは、SJISなどという名前で広まり、1997年に正式にShift_JISとして規 格化されました。 Windowsや 組込系などの小さなシステムでの漢字表記などでは、今でも使用されていま す。
「英字+一言語」という枠組みから抜けて、 国際的な枠組みですべての文字を包括するために、UNICODE が定められまし た。 これは、多バイト文字ですが、用途により表現法がいくつか定められました。
現在では多くのOSでUNICODEが使用されている。