フレッシュマンセミナー
国島丈生 知能メディア工学研究室
経 歴
1985-1994 1994-1997 1997-2008
担 当 講 義情報通信工学実験1B(2年)
プログラミング言語Ⅱ(2年)
コンパイラ(3年)
プログラミング言語Ⅲ(3年)
形式言語理論(修士1年)
ソフトに興味ありデータベース
テキスト処理、文書(XML)処理
プログラミング言語
Web 2.0(ブログ、SNSなど)
オートマトン理論
今日の内容
高校・大学時代の体験談
高校数学から情報科学へ
そしてプログラミングへ
高校時代は
• コンピュータとは無縁
• 数学が好き
• 物理・化学は…
• 英語や国語の方が得意だったかも
大学選びは安直…
• 数学を生かしたい
• 理学部数学科…就職に困りそう
• 工学部 {数理, 情報}工学科…偏差値で情報工学科を選択
• コンピュータはあまり意識せず
パソコンは高嶺の花 NEC PC-9801VX01 (1987年)
CPU 8MHz
HDDなし(FDのみ)
Windows なし
353,000円(今だと50万円以上?)
関数電卓?ポケットコンピュータ(ポケコン)
メモリ2~16KB
ディスクなし
BASICのプログラムが動いた
Internet 黎明期1984 東大、東工大、慶応大
1988 大学・企業の研究所間
1992以降 個人へ普及
1985年 京都大学工学部情報工学科入学
数学を生かしてコンピュータの勉強を
誤算その1
物理が結構必要だった…
誤算その2
•微分や積分はあまり使わない
• 独自の理論
• ブール代数etc.
• パズルに近い
結果オーライ?
もともとパズルは好き
数学よりプログラムの方が合っていたらしい
大学の数学の講義は難しかったし…
卒論でやったこと
C, C++で1,500行程度のプログラミング
誤解しないように
• プログラミングの達人では決してない
• 同期にももっと凄いのがいた
• 皆さんの中の凄腕プログラマのほうが実力は私より上のはず
今にして思えば
• 情報工学の二面性
• コンピュータ上で問題を解く…計算手順、アルゴリズム
• コンピュータを作る・動かす…物理現象が関わる
情報工学の数学
• 「0/1の土俵」の上で計算の手順を考えるための道具=離散系の数学
• 集合、剰余系、場合の数、数学的帰納法、数列、etc. と近い
• 微分、積分は連続系の数学→やや遠い
ケーニヒスベルクの橋図の7つの橋を各1度ずつ通って元の場所に戻ってくることができるか。ただし、同じ橋を2度以上通ってはならない。(ケーニヒスベルクの橋)
関連:グラフ理論
ハノイの塔台の上に3本の棒A, B, Cがあり、Aに n 枚の円盤がはまっている。円盤は下ほど半径が大きい。次のルールを満たしながら、円盤をすべてBに移すのに必要な手数を n で表せ。
• 一度に一枚の円盤しか移動できない
• 途中で円盤の大小を逆にしてはいけない
関連:再帰
まず敵(味方?)を知る
• コンピュータは
• 複雑な処理は苦手
• 単純な処理の繰り返しが得意
• 中間結果をたくさん覚えても平気
例:定積分• 人間は不定積分から計算
例:定積分• コンピュータは不定積分のような式変
形は苦手
• 区分求積法
n = 1000 で 0.3338335
プログラムの例
S = 0;for (k = 1; k <= n; k ++) { S = S + k * k;}S = S / (n * n * n);
法則を見つけよ
• 今日は日曜日です。100日後は何曜日?
• 1日後は月、2日後は火、…100日後は火
法則を見つけよ
• 今日は日曜日。1億日後は何曜日?
• とても数えられません
• 7の倍数日後はいつも日曜日。1億÷7 = 14285714 あまり 2。∴火曜日
法則を見つけよ• 今日は日曜日。10100日後は何曜日?
• 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) { /* 以下省略 */ }
自分の経験から• まず真似から始めよ
• 人のコードを読んで引出しを増やせ
• 読むときは結果より過程を理解せよ
• 紙とエンピツ、重要
• 最初は細かく分けて、段々大きく
Cと相性が悪くても
• プログラミング言語が変わればアルゴリズムも変わる
• プログラミングの根は共通
• 一つ言語をマスターすれば、他の言語に応用が利く
レポート課題• 以下の2点についてA4用紙1枚程度に
まとめ、7/8(火)17:00までに提出せよ。(提出場所:2610)
• ケーニヒスベルクの橋、もしくはハノイの塔(解に至る経過も含めて)
• 今日の講義の感想