情報科学への誘い

高校数学を学んできた諸君に
2006-06-14
国島丈生
自己紹介
• 知能メディア工学研究室(横田研究室)
助教授
• 情報通信工学演習I(1年次)・情報通信
工学実験B(2年次)
• 計算機言語I(2年次)
• コンパイラ・計算機言語II(3年次)
• 形式言語理論(修士1年次)
自己紹介
• 京都大学工学部情報工学科(今の情報学
部) (1989, M1991, D1994)
• 奈良先端科学技術大学院大学情報科学
研究科助手(1994~1997)
• 岡山県立大学助教授(1997~)
興味のある分野
• ソフトウェア技術
• 構造化文書(XML)処理技術
• データベース
• プログラミング言語
• WWW技術
今日の内容
• 高校数学から情報科学への橋渡し
• 自分の(大学時代の)経験をもとに
• 注意
• 私の経験が皆に役立つとは限らない
• 私≠皆さん、皆さんも全員違う人間
• 大学は(他の誰とも違う)自分を見
つけていく場
学科を選んだ理由
• 高校までコンピュータとは無縁
• 友達のコンピュータでゲームをした程
度
• 数学が好きだった
• 理学部数学科だと就職に困りそう
• {数理, 情報}工学科の偏差値の高い方を
選択
友達のコンピュータ
メモリ2~16KB
ディスクなし
どんな時代?
• 国産パソコン NEC PC-9801
• PC-9801VX01(1987年):CPU 8MHz,
HDDなし(FDのみ), 353,000円
• Windows なんぞ当然なし
• Sun3/60(4回生配属時に導入されたWS)
• CPU 20MHz, メモリ24MB
• 数百万円
ところが
いろいろと誤算があった
誤算その1
• 物理が結構必要だった…
• 電気回路・電子回路など
• 物理は得意ではなかったので数学を
誤算その2
• 一般教養の数学は難しかった
誤算その3
• 専門でも高校数学の延長(微分とか積
分とか)は出てこなかった
• どちらかというとパズルみたい
8クイーン問題 哲学者の食事問題
後悔した?
• そうでもない
• もともとパズルは好き
• 高校数学とは別物と考えれば、結構
おもしろい
• プログラムを書くのがおもしろい
未来は神のみぞ知る
• 研究者としては割と回り道をしている
• 有限オートマトン(B4~M2)
• データ工学、論理(D)
• HTML,WWW(助手)
• 関数型言語, Java, 形式言語(県立大)
• しかし
• すべてが今の興味の対象(XML)に関連
• 教訓:せめて興味を持ったものには打
ち込もう(後で何がいるか分からない)
今にして思えば
• 情報工学の二面性
• 計算機科学
• コンピュータの構成に関する学問
• 物理現象が関わってくる
• 情報科学
• コンピュータ上で問題を解く学問
• 計算手順、アルゴリズム
• 情報技術者には両方の素養が必要
今、そして昔
• 昔…情報技術者はオールマイティ
• ハードウェアからソフトウェアまで
• 学べる程度の範囲だった
• 今は?
• カバーする範囲がとてつもなく広く
深くなった→オールマイティになるの
は難しい
• 常識程度の知識はオールマイティであっ
てほしい
Software vs. Hardware
• 現代のコンピュータの構造
• CPUはメモリ(HDD)上のデータを
読み出し、計算し、結果をメモリ
(HDD)に書き込む
• プログラムの動作
• 変数の値を基に計算を行い、結果を
変数に格納
• 変数/アルゴリズム≒メモリ(HDD)/
CPU(フォン・ノイマン型計算機)
コンピュータは万能?
• プログラムが書ければええやん→否
• コンピュータでは時間がかかりすぎて
(事実上)解けない問題もある
• コンピュータがもっと速くなったら解
けるか?→Yesの場合もNoの場合もある
• いいプログラムを書くにはハードウェ
アもソフトウェアも知る必要がある
例
チェックボックス形式
の設定項目が30個あ
り、これらの組み合わ
せが正しく動作するか
検査したい。

1つの検査に1分かかる
として、どのくらいの
時間がかかるか。
答は
• 組み合わせの総数
• 230 = 10億7374万1824 回
• 1073741824 / (60 × 24 × 365) ≒ 2037 (年)
情報科学への橋渡し
• 結城浩「プログ
ラマの数学」
• ソフトバンク
社、2200円
情報科学の数学
• 離散の世界の数学
• 0/1の代数(ブール代数)
• 集合、剰余系、場合の数、数学的帰
納法、数列、etc.
• 苦手だったんですけど→情報科学の
視点から、これから理解していけば
OK
問題
• 今日は日曜日です。100日後は何曜日?
• 1日後は月、2日後は火、…100日後は
火
• 今日は日曜日。1億日後は何曜日?
• とても数えられません
• 7の倍数日後はいつも日曜日。1億÷7
= 14285714 あまり 2。∴火曜日
• 法則の発見により計算を削減
問題
• 今日は日曜日。10100日後は何曜日?
• 10100なんてとても計算できません。7
で割った余りも計算できません
• 10nを7で割った余りを、n=1, 2, …で計
算してみよう
すると
• 100%7=1, 101%7=3, 102%7=2, 103%7=6,
104%7=4, 105%7=5, 106%7=1, 107%7=3, …
• %:余りを求める演算子
• nが1増えると、周期6で同じ数が出てく
る(1, 3, 2, 6, 4, 5) 周期7ではない!!
• 100 % 6 = 4 ∴木曜日
• 法則の発見により再び計算を削減
プログラムにすると
void nannyoubi(int n)
{
if (n%6 == 0) {
printf(“月曜日¥n”);
} else if (n%6 == 1) {
printf(“水曜日¥n”);
} else if (n%6 ==2) {
/* 以下省略 */
}
法則がそのままプログラムになる
問題
生まれて2日経つと子を1匹産めるように
なり、それ以降は毎日子を1匹産むとい
う生き物がいる。
1日目に、生まれたての生き物を1匹も
らったとすると、11日目には全部で何匹
になっているか。
考え方
• n日目に生きている生き物は
• n-1日目までに生まれていた生き物
• n-2日目までに生まれていた生き物が
産んだ子供
• n日目の生き物の数をF(n)とすると
• F(n) = F(n-1) + F(n-2), F(1) = 1, F(2) = 1
• これに従って計算すると F(11) = 89
実は
• 有名な数列(フィ
ボナッチ数列)
• 一般項は複雑
• しかしプログラム
は漸化式そのもの
(再帰関数)
int F(int n)
{
if (n == 1 || n == 2) {
return 1;
} else {
return F(n-1)+F(n-2);
}
}
F(n) =
1
⇥
5
⇤�
1 +
⇥
5
2
⇥n
+
�
1 −
⇥
5
2
⇥n⌅
問題
川岸に、狼、山羊、キャベツをつれた人
がいる。川には船が一艘あるが、一度に
たかだか一つの荷物しか運べない。また、
狼と山羊(山羊とキャベツ)だけを川岸
に置いたまま人が離れると、狼(山羊)
が山羊(キャベツ)を食べてしまう。こ
のとき、すべての荷物を反対側の岸に運
ぶ最短手順を求めよ。
どうやって解こう?
• 最初は山羊を連れていくしかない
• ほかのものだと食べられてしまう
• 山羊を対岸に残し、人だけで戻ってく
るしかない
• 山羊を連れて帰ったら元に戻ってしま
う
• …
場合分け
• 最初にできることは
• 狼を連れて行く→山羊とキャベツ…×
• 山羊を連れて行く
• キャベツだけ連れて行く→狼と山
羊…×
• 人だけ渡る→狼と山羊、山羊とキャ
ベツ…×
• 場合分けを繰り返す
書き方を決める
• 人(P)、狼(W)、山羊(G)、キャベツ(C)
• 左岸にいるもの-右岸にいるもの
• 例:最初は PWGC-Φ
• Φ:何もいないことを表す
• 目標:PWGC-Φ から Φ-PWGC に至る
最短経路を示すこと
図にしてみると
PWGC-Φ WC-PG PWC-G
W-PGCC-PWG
WGP-CPGC-W
G-PWCPG-WCΦ-PWGC
G Φ
G Φ
G Φ
Φ
G
C
C
WW
G
GGG
W
WC
C
枝のラベル:
Pが対岸に運んだもの
結局
• 最短手順は2通り
• 最短手順以外の解が無数にある
• 実は
• 手順を示した図=有限オートマトン
• 情報科学の基本概念の一つ
• 文字列検索、論理設計など
• 関連科目:離散数学、コンパイラ、
形式言語理論(大学院)
それでもなお
学生:「先生、このプログラムの課題、
分からないんですけど」
私:「アルゴリズムは分かるの?」
学生:「それは何となく分かります」
私:「そんなら、そのままプログラムに
すればええやん」
学生:「どうやってプログラムにしたら
いいかが分からないんです」
Algorithm = Program?
• 否
• Algorithm + Data Structure = Program

(by N.Wirth)
• プログラムには両方重要
• アルゴリズム(計算手順)
• それに適したデータ構造(変数、配
列、構造体etc.)…高校数学やパズル
にはまったくなかった部分
鍵はデータ構造
• 計算の局面をどう表すか
• アルゴリズムの世界では…比較的自由
• 線形リスト、スタック、待ち行列、木、
二分木、配列、集合、…
• プログラムの世界では…単純、限定
• Cだと:変数、配列、構造体、…
• データ構造をいかに翻訳するかが鍵
• アルゴリズム⇔プログラムの翻訳はデー
タ構造の翻訳についてくる
諸君の健闘を祈る
レポート課題
• 以下の問題のうち1問以上を解いてレ
ポートにまとめよ。
• 6/20 (火) 17:00までに2610に提出
• 用紙はA4が望ましい
• なるべく自分が知らなかった問題をやっ
てみること
問題1:ハノイの塔
台の上に3本の棒A, B, Cがあり、Aにn枚の円盤が
はまっている。円盤は下ほど半径が大きい。次
のルールを満たしながら、円盤をすべてBに移
すのに必要な手数をnで表せ。
• 一度に一枚の円盤しか移動できない
• 途中で円盤の大小を逆にしてはいけない
問題2
天国と地獄の分かれ道に2人の人がい
る。彼らはチャーチルとヒットラーであ
るが、どちらがどちらかは分からない。
チャーチルは、質問には必ず本当のこと
を答える。ヒットラーは必ず本当と反対
のことを答える。1回だけ質問をして、天
国への道を見分ける方法を考えよ。
問題3
問題2の変形として次の状況を考える。
このとき2回の質問で天国への道を見分
ける方法を考えよ。
• 分かれ道にいるのはチャーチル、ヒッ
トラー、スターリン。
• スターリンは本当と嘘(本当と反対のこ
と)をランダムに言う。
問題4
図のようにかかっている7本の橋を、次の条件
を満たしながらすべて渡りたい。渡れるなら手
順を示し、渡れないなら証明を述べよ。
• それぞれの橋は一度しか渡れない。
• それぞれの土地は何度通ってもよく、どこか
ら開始しても、どこで終わってもよい。開始
点と終了点が違っていてもかまわない。
将来に向けて
• どの問題も関連する講義がある
• 問題1:計算機言語I、情報通信工学
実験B(再帰)
• 問題2・3:人工知能(論理)
• 問題4:離散数学(グラフ理論)

フレッシュマンセミナー20060614