47
フレッシュマンセミナー 国島丈生([email protected]2009-06-17

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

Embed Size (px)

Citation preview

Page 1: 20090616 フレッシュマンセミナー

フレッシュマンセミナー国島丈生([email protected]

2009-06-17

Page 2: 20090616 フレッシュマンセミナー

経歴

1985-1994 1994-1997 1997-2009

Page 3: 20090616 フレッシュマンセミナー

担当講義

情報通信工学実験1B(2年)

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

コンパイラ(3年)

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

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

Page 4: 20090616 フレッシュマンセミナー

ソフトに興味あり

データベース

テキスト処理、文書(XML)処理

プログラミング言語

Web技術

オートマトン理論

Page 5: 20090616 フレッシュマンセミナー

KUNISHI ON BOOKS

Page 6: 20090616 フレッシュマンセミナー

KUNISHI ON THE WEB

Page 7: 20090616 フレッシュマンセミナー

今日の内容

高校・大学時代の体験談

高校数学から情報科学へ

そしてプログラミングへ

Page 8: 20090616 フレッシュマンセミナー

高校・大学時代の 体験談

Page 9: 20090616 フレッシュマンセミナー

高校時代は

コンピュータとは無縁

数学が好き

物理・化学は… (>_<)

英語や国語の方が得意だったかも

Page 10: 20090616 フレッシュマンセミナー

パソコンは高嶺の花 NEC PC-9801VX01 (1987年)

CPU 8MHz

HDDなし(FDのみ)

Windows なし

353,000円(今だと50万円以上?)

Page 11: 20090616 フレッシュマンセミナー

関数電卓?

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

メモリ2~16KB

ディスクなし

BASICのプログラムが動いた

Page 12: 20090616 フレッシュマンセミナー

INTERNET 黎明期

1984 東大、東工大、慶応大

1988 大学・企業の研究所間

1992以降 個人へ普及

1990年代 携帯電話登場

Page 13: 20090616 フレッシュマンセミナー

大学選びは安直…

数学を生かしたい→当時の京大では選択肢3つ

理学部数学科:就職に困るらしい…

工学部数理工学科, 工学部情報工学科

パンフを読んでも違いが分からん!!→偏差値で情報工学科を選択

コンピュータはあまり意識せず

Page 14: 20090616 フレッシュマンセミナー

1985年 京都大学工学部情報工学科入学

Page 15: 20090616 フレッシュマンセミナー

誤 算

Page 16: 20090616 フレッシュマンセミナー

誤算その1

物理が結構必要だった…

Page 17: 20090616 フレッシュマンセミナー

誤算その2

大学の数学は難しかった…

Page 18: 20090616 フレッシュマンセミナー

誤算その3

専門では微積分はあまり使わなかった

「独特」の理論

ブール代数etc.

パズルに近い

Page 19: 20090616 フレッシュマンセミナー

結果オーライ?

もともとパズルは好き

数学よりプログラムの方が合っていたらしい

Page 20: 20090616 フレッシュマンセミナー

卒論でやったこと

C, C++で1,500行程度のプログラミング

Page 21: 20090616 フレッシュマンセミナー

念のため

プログラミングの達人では決してない

同期にももっと凄いのがいた

皆さんの中の凄腕プログラマのほうが実力は私より上のはず

Page 22: 20090616 フレッシュマンセミナー

高校数学から 情報工学へ

Page 23: 20090616 フレッシュマンセミナー

情報工学の二面性

ハードウェアを作る

ソフトウェアを作る

物理 連続系の数学

離散系の数学

Page 24: 20090616 フレッシュマンセミナー

連続系 VS 離散系

連続した数 (実数)

連続しない数 (整数, 0/1 etc.)

微分・積分

集合 剰余系 場合の数 数列

数学的帰納法

物理現象

情報数学

Page 25: 20090616 フレッシュマンセミナー

情報科学への橋渡し

Page 26: 20090616 フレッシュマンセミナー

ケーニヒスベルクの橋

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

関連:グラフ理論

Page 27: 20090616 フレッシュマンセミナー

ハノイの塔

台の上に3本の棒A, B, Cがあり、Aに n 枚の円盤がはまっている。円盤は下ほど半径が大きい。次のルールを満たしながら、円盤をすべてBに移すのに必要な手数を n で表せ。

一度に一枚の円盤しか移動できない

途中で円盤の大小を逆にしてはいけない

関連:再帰

Page 28: 20090616 フレッシュマンセミナー

そして プログラミングへ

Page 29: 20090616 フレッシュマンセミナー

誰だって難しい

Page 30: 20090616 フレッシュマンセミナー

まず敵(味方?)を知る

コンピュータは

複雑な処理は苦手

単純な処理の繰り返しが得意

中間結果をたくさん覚えても平気

Page 31: 20090616 フレッシュマンセミナー

例:定積分

人間は不定積分から計算

⇤ 1

0

x2dx =�13x3

⇥1

0

=13

Page 32: 20090616 フレッシュマンセミナー

例:定積分

コンピュータは不定積分のような式変形は苦手

区分求積法

n = 1000 で 0.3338335

⌃ 1

0

x2dx ⇥n⇧

k=1

⇤�k

n

⇥2

· 1n

⌅=

1n3

n⇧

k=1

k2

Page 33: 20090616 フレッシュマンセミナー

プログラムの例

S = 0;for (k = 1; k <= n; k ++) { S = S + k * k;}S = S / (n * n * n);

⌃ 1

0

x2dx ⇥n⇧

k=1

⇤�k

n

⇥2

· 1n

⌅=

1n3

n⇧

k=1

k2

Page 34: 20090616 フレッシュマンセミナー

フィボナッチ数列

F0 = 1, F1 = 1, Fn+2 = Fn+1 + Fn

1, 1, 2, 3, 5, 8, 13, 21, 34, …だが一般項は複雑

Fn =1⇥5

⇤�1 +

⇥5

2

⇥n

+

�1 −

⇥5

2

⇥n⌅

Page 35: 20090616 フレッシュマンセミナー

プログラム=漸化式

int F(int n) {

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

return F(n-1)+F(n-2); }

}

F0 = 1, F1 = 1, Fn+2 = Fn+1 + Fn

Page 36: 20090616 フレッシュマンセミナー

法則を見つける

今日は日曜日です。100日後は何曜日?

1日後は月、2日後は火、…100日後は火

Page 37: 20090616 フレッシュマンセミナー

法則を見つけよ

今日は日曜日。1億日後は何曜日?

とても数えられません

7の倍数日後はいつも日曜日。 1億÷7 = 14285714 あまり 2。∴火曜日

Page 38: 20090616 フレッシュマンセミナー

法則を見つけよ

今日は日曜日。10100日後は何曜日?

10100なんて計算できない

10100を7で割った余りも計算できない

10nを7で割った余りを、n=1, 2, …で計算してみよう

Page 39: 20090616 フレッシュマンセミナー

すると

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 ∴木曜日

Page 40: 20090616 フレッシュマンセミナー

プログラムにすると

void nannyoubi(int n) { if (n%6 == 0) { printf(“月曜日¥n”); } else if (n%6 == 1) { printf(“水曜日¥n”); } else if (n%6 ==2) { /* 以下省略 */ }

Page 41: 20090616 フレッシュマンセミナー

経験に基づく プログラミング学習の

アドバイス

Page 42: 20090616 フレッシュマンセミナー

プログラミング学習は

語学学習に似ている

Page 43: 20090616 フレッシュマンセミナー

人の真似は大事

インプットがなければアウトプットはできない

まずは他人のコードの真似から

人のコードを読んで引出しを増やせ

Page 44: 20090616 フレッシュマンセミナー

Cと相性が悪くても

世の中には無数にプログラミング言語がある

プログラミングの根は共通

一つ言語をマスターすれば、他の言語に応用が利く

Page 45: 20090616 フレッシュマンセミナー

本を読もう

経験に基づく仮説

国語力のある人はプログラミング能力も高い

プログラム=(プログラミング言語という)言語で書かれた文章

文章に触れる機会を増やしてください(ジャンルは問いません)

Page 46: 20090616 フレッシュマンセミナー

諸君の健闘を祈る

Page 47: 20090616 フレッシュマンセミナー

レポート課題

以下の2点についてA4用紙1枚程度にまとめ、6/23(火)17:00までに提出せよ。(提出場所:2610室)

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

今日の講義の感想