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

41
フレッシュマンセミナー 国島丈生 知能メディア工学研究室

Transcript of 20080702フレッシュマンセミナー

フレッシュマンセミナー

国島丈生 知能メディア工学研究室

経 歴

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)

• ケーニヒスベルクの橋、もしくはハノイの塔(解に至る経過も含めて)

• 今日の講義の感想