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

45
情報科学への誘い 高校数学を学んできた諸君に 2007-06-27 国島丈生(横田研究室)

Upload: takeo-kunishima

Post on 15-Feb-2017

15 views

Category:

Education


1 download

TRANSCRIPT

情報科学への誘い高校数学を学んできた諸君に

2007-06-27国島丈生(横田研究室)

自己紹介

• 京都大学工学部情報工学科(1985-1994)

• 今の情報学部• 奈良先端科学技術大学院大学(助手,

1994~1997)

• 岡山県立大学(助教授・准教授, 1997~)

自己紹介• 情報通信工学実験B(2年)

• プログラミング言語II(2年)

• コンパイラ(3年)

• プログラミング言語III(3年)

• 形式言語理論(修士1年)

興味のある分野

• ソフトウェア技術• 構造化文書(XML)処理技術、テキスト処理技術、データベース、プログラミング言語、WWW技術

• 最近、日本文学の研究者と交流あり

もっと知りたい人は

http://t.kunishi.googlepages.com/

からいろいろたどれます

今日の内容• 高校数学から情報科学への橋渡し• 自分の(大学時代の)経験をもとに

• 注意• 私の経験が皆に役立つとは限らない• 大学は(他の誰とも違う)自分を見つけていく場

高校時代は• 高校までコンピュータとは無縁• 友達のコンピュータでゲームをした程度

• パソコンは高嶺の花• インターネットなんて想像すらしなかった

どんな時代?• 国産パソコン NEC PC-9801

• PC-9801VX01(1987年):CPU 8MHz, HDDなし(FDのみ), 353,000円(今だと50万円以上?)

• Windows なんぞ当然なし

• Sun3/60(研究室にあったコンピュータ)

• CPU 20MHz, メモリ24MB, 数百万円

友達のコンピュータ

メモリ2~16KB

ディスクなし

ポケットコンピュータ(ポケコン)

なぜ情報を選んだ?• 数学が好きだった• 当時の京大には選択肢が3つ

• 理学部数学科…就職に困りそう

• {数理, 情報}工学科…区別がつかない→偏差値の高い方を選択

ところが

いろいろと誤算があった

誤算その1• 物理が結構必要だった…

• 物理は得意ではなかったので数学を生かそうと思ったはずなのに

今にして思えば

• 情報工学の二面性• 計算機科学:コンピュータの構成に関する学問…物理現象が関わる

• 情報科学:コンピュータ上で問題を解く学問…計算手順、アルゴリズム

• これらは互いに関連している

コンピュータは万能?

• プログラムが書ければええやん→否• コンピュータでは時間がかかりすぎて(事実上)解けない問題もある

• コンピュータがもっと速くなったら解けるか?→Yesの場合もNoの場合もある

例チェックボックス形式の設定項目が30個あり、これらの組み合わせが正しく動作するか検査したい。1つの検査に1分かかるとして、どのくらいの時間がかかるか。

答は• 組み合わせの総数• 230 = 10億7374万1824 回

• 1073741824 / (60 × 24 × 365) ≒ 2037 (年)

• 理論上は無限ではないから調べられるが、現実的には調べられない

誤算その2• 一般教養の数学は難しかった

誤算その3• 専門でも高校数学の延長(微分とか積分とか)は出てこなかった

• どちらかというとパズルみたい

8クイーン問題 哲学者の食事問題

後悔した?• もともとパズルは好き• 高校数学とは別物と考えれば、結構おもしろい

• プログラムを書くのがおもしろい

情報科学の数学• コンピュータという「0/1の土俵」の上で計算の手順を考えるための道具

• 離散の世界の数学• 0/1の代数(ブール代数)、集合、剰余系、場合の数、数学的帰納法、数列、etc.

情報科学への橋渡し

• 結城浩「プログラマの数学」(ソフトバンク社、2200円)

問題

• 今日は日曜日です。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, …

• %:余りを求める演算子

• 周期6で同じ数が出る(1, 3, 2, 6, 4, 5)

• 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) {/* 以下省略 */

}

法則がそのままプログラムになる

問題ウサギの対は生まれて1ヶ月経つと1対(2

匹 )の子供を産むようになり、それ以降は毎日子を1対産む。またこのウサギは決して死なない。

1対のウサギが最初にいたとして、1年後には何対のウサギがいることになるか。

考え方• nヶ月目のウサギの対は

• n-1ヶ月目までのウサギの対

• n-2ヶ月目までに生まれていたウサギが産んだ子供

• nヶ月目の対の数をF(n)とすると

• F(n) = F(n-1) + F(n-2), F(0) = 1, F(1) = 2

• これに従って計算すると F(12) = 377

実は

• 有名な数列(フィボナッチ数列)

• 一般項は複雑• しかしプログラムは漸化式そのもの

int F(int n){

if (n == 0) return 1; else if (n == 1) return 2;

else {return F(n-1)+F(n-2);

}}

F (n) =1⇥5

⇤�1 +

⇥5

2

⇥n

+

�1 −

⇥5

2

⇥n⌅

問題台の上に3本の棒A, B, Cがあり、Aにn枚の円盤がはまっている。円盤は下ほど半径が大きい。次のルールを満たしながら、円盤をすべてBに移すのに必要な手数を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

CWW

GGGG

WWC

C

枝のラベル:Pが対岸に運んだもの

結局• 最短手順は2通り• 最短手順以外の解が無数にある• 実は• 手順を示した図=有限オートマトン• 情報科学の基本概念の一つ• 文字列検索、論理設計など

問題

図の7つの橋を各1度ずつ通って元の場所に戻ってくることができるか。ただし、同じ橋を2度以上通ってはならない。(ケーニヒスベルクの橋)

考え方• 「この図が一筆書き可能か」と等しい…不可能(点に繋がっている線の数がどれも奇数だから)

• グラフ理論:電気回路、ネットワークなどとも関連

陸地→点橋→点と点を結ぶ線

よくある会話学生:「先生、このプログラムの課題、分からないんですけど」

私:「アルゴリズムは分かるの?」

学生:「それは何となく分かります」

私:「そんなら、そのままプログラムにすればええやん」

学生:「どうやってプログラムにしたらいいかが分からないんです」

Algorithm = Program?

• 否• Algorithm + Data Structure = Program

(by N. Wirth)

• プログラムには両方重要• アルゴリズム(計算手順)• それに適したデータ構造(変数、配列、構造体etc.)…高校数学やパズルにはまったくなかった部分

鍵はデータ構造• 計算の局面をどう表すか• アルゴリズムの世界では…比較的自由

• 線形リスト、スタック、待ち行列、木、二分木、配列、集合、…

• プログラムの世界では…単純、限定

• Cだと:変数、配列、構造体、…

• データ構造をいかに翻訳するかが鍵

腕の立つ人には

• ACMプログラミングコンテスト

• http://icpc.baylor.edu/icpc/

• 詳細を知りたい人は国島まで

諸君の健闘を祈る

問題天国と地獄の分かれ道に2人の人がいる。彼らはチャーチルとヒットラーであるが、どちらがどちらかは分からない。チャーチルは、質問には必ず本当のことを答える。ヒットラーは必ず本当と反対のことを答える。1回だけ質問をして、天国への道を見分ける方法を考えよ。

問題次の状況を考える。このとき2回の質問で天国への道を見分ける方法を考えよ。

• 分かれ道にいるのはチャーチル、ヒットラー、スターリン。

• スターリンは本当と嘘(本当と反対のこと)をランダムに言う。