32
アルゴリズム入門 第1回 ~ガイダンス、数の計算~ 情報理工学系研究科 創造情報学専攻 中山 英樹 1

アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

アルゴリズム入門第1回

~ガイダンス、数の計算~

情報理工学系研究科創造情報学専攻

中山 英樹1

Page 2: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

教員について

中山 英樹大学院情報理工学系研究科 創造情報学専攻

専門: コンピュータビジョン、自然言語処理、人工知能、機械学習

講義情報(スケジュール、資料など)http://www.nlab.ci.i.u-tokyo.ac.jp/~nakayama/lectures.html 「中山英樹 東京大学」で google ITC-LMSからもリンク張ってます

2

Page 3: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

教科書 情報科学入門 Rubyを使って学ぶ 増原英彦 他著

正誤表http://lecture.ecc.u-tokyo.ac.jp/johzu/joho-kagaku/text/

3

Page 4: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

情報科学とは何かLawrence Livermore National Laboratory

「計算」と「情報」の科学的基礎 様々な分野に現われる「情報」を扱うための科学

cf. 数学は様々な分野の「数理」を、物理は「物質」を扱うための科学

• 生物の理解: 個体→細胞→化学反応→情報の流れ• ロボット工学: 機械→制御→ソフトウェア

科目「情報」の土台部分 情報系の学科で学ぶことの入り口

Christian Blouin 2006 (c

National Research Council of Canada

(C) Honda Motor Co., Ltd.

Page 5: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

情報教育の重点化 イギリス

2014年9月からプログラミング初等教育に正式科目として導入

フィンランド 2016年より小学校の科目として導入

米国 オバマ大統領:「全ての米国人にプログラミングを学んで欲しい」

https://www.youtube.com/watch?v=6XvmhE1J9PY

日本 (2014/6/24) 成長戦略: 「義務教育段階からのIT教育」

5

Page 6: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

講義の目的

前半:プログラミング コンピュータに「計算(=情報処理)」をさせる手段

後半:情報科学の基礎概念 特に、「アルゴリズム」と呼ばれる領域を中心に プログラミングそのものは主目的でない

前提知識 夏学期「情報」

6

Page 7: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

プログラミング言語 Ruby

比較的、新しい言語で、初学者のしきいが低い

選択に深い意味はない 米国の大学だったら Python だったかも

日本発で世界的に使われている言語(これ大事) 開発者の多くが日本人である(これ大事)

7

Page 8: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

8

アルゴリズム 問題の解き方

有限時間で答が出ることが保証されているもの

一つの問題に複数のアルゴリズム アルゴリズムによって計算時間が劇的に違う

異なる問題に同じアルゴリズム 本質的に同じ構造の問題なら、使いまわしができる

?

Page 9: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

9

異なる問題、同じアルゴリズム

日米間には沢山のネットワーク経路がある 各経路には帯域幅がある 日米間全体の最大

帯域幅は? 注: 単純な和でない

3

41

3

53

21

Page 10: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

10

異なる問題、同じアルゴリズム

生産割当問題 車種別の必要台数 工場別の生産台数の上限 どの工場でどの

車種を作れるか

30 40 20 30

50 X

40 X

30 X X

?

Page 11: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

成績評価

共通試験50%:平常点50%

平常点 毎週出題の課題(毎回講義時間の後半は課題の時間) 半分終わったところで多めの課題(11/10の予定) ちゃんと授業に出ていれば単位はとれます

優は3割 相対評価

11

Page 12: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

毎週の課題 自分で手を動かして考えることが大事(テストではない)

友達と相談したり、TAに質問してもよい ただし、コピペはダメ(全員0点にします)

出席は別途、講義時間中に毎回とります 課題がどうしてもできなかった場合の救済 ただし、出席のみで課題を提出しないのはダメ。考えてみたところま

でを書いて出してください

自信のある人向けに、+αの課題を出すことがあります 提出は任意ですが、提出があった場合は加点します 難しいけど授業で扱った範囲の知識で解ける(はず)

12

Page 13: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

ITC-LMS

ITC-LMSの利用登録ウェブブラウザ(Safariなど)からhttps://itc-lms.ecc.u-tokyo.ac.jp/「アルゴリズム入門(金1)中山英樹」を選択する

出席、課題の提出 アンケート(無記名):質問、感想

Page 14: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

コンピュータとの対話 ターミナルの起動 ⇒ irbの起動 ⇒ 数式の入力

cm12345$ irb 改行irb(main):001:0> 1+1 改行=> 2irb(main):002:0> コントロールDcm12345$

今回は、指示されるまで、irbを使いながら…

ターミナルのプロンプト

irbのプロンプト

irbの返答

入力は赤で示す。改行はReturn,

Enter とも。

もう1つ「ターミナル」のウインドウを

開く

Page 15: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

数式の計算 ― 電卓がわり

irb(main):003:0> 7 – 2=> 5irb(main):004:0> 7 * 2=> 14irb(main):005:0> 7 / 2=> 3irb(main):006:0> 7 % 2=> 1irb(main):007:0> 7 ** 2=> 49 7を2で割った余り

7の2乗

irb(main):009:0> 7 - 2 * 3=> 1irb(main):010:0> (7 - 2) * 3=> 15irb(main):012:0> 7.0 / 2=> 3.5irb(main):013:0> 7 / 2.0=> 3.5

以下、改行は省略

Page 16: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

整数と浮動小数点数

Ruby (他の言語も)は区別する

整数と整数の演算は答も整数

整数と「小数」の演算は答も「小数」

3 は整数 3.0 は「小数」

16

Page 17: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

さまざまなエラーirb(main):001:0> 3/0ZeroDivisionError: divided by 0

from (irb):1:in `/'from (irb):1

irb(main):002:0> 7 - 2 3SyntaxError: compile error(irb):2: syntax error, unexpected tINTEGER, expecting

$endfrom (irb):2

irb(main):003:0> (7 -irb(main):004:1* 2) * 3)SyntaxError: compile error(irb):4: syntax error, unexpected ')', expecting $end

from (irb):4irb(main):005:0>

式の途中で改行するとプロンプトが異なる

Page 18: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

わけがわからなくなったら

ともかく コントロール C を押す irb はトップレベルに戻る

Page 19: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

クイズ: 17 - 17/3*3 の値は?

1: 0.02: 03: 24: 15.11111111111115: 16

irbを使わずに答えよう!

Page 20: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

数学関数

irb(main):003:0> include(Math)=> Objectirb(main):004:0> sqrt(2)=> 1.4142135623731irb(main):005:0> cos(3.141592/3)=> 0.50000018867511

数学関数を使う準備irbを起動し直すたびに必要

Page 21: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

変数 ― 値に名前を付ける

irb(main):003:0> h=188.0=> 188.0irb(main):004:0> w=104.0=> 104.0

irb(main):006:0> w / (h / 100.0) ** 2=> 29.4250792213671

変数への値の代入

Page 22: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

↑キーで入力が復活!

変数を使うわけ 式の意味が理解しやすくなる

wweightbody_weight_in_pound

違う値で計算のやり直しができるirb(main):008:0> w=104.0-10=> 94.0irb(main):009:0> w / (h/100.0) ** 2=> 26.5957446808511

•小文字で始まること•アンダースコアは

小文字と考える

Page 23: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

関数の定義 ― BMIを求める関数irb(main):003:0> def bmi(height, weight)irb(main):004:1> weight / (height/100.0) ** 2irb(main):005:1> end=> nil

irb(main):007:0> bmi(188.0, 104.0)=> 29.4250792213671

irb(main):008:0> 1.1*bmi(174.0, 119.0 * 0.454)=> 19.6289470207425

スペースキーを押してインデントを入れるとよい(見やすくする)

Page 24: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

書き方になれる

数学なら… BMI 関数 f(h, w) = w / (h / 100)2

Ruby ならdef f(h, w)

w / (h / 100.0) ** 2end

こっちがベターdef bmi(height, weight)

weight / (height / 100.0) ** 2end

24

Page 25: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

練習

1. 平面上の 2 点 (x, y) と (u, v) の距離を求めるdistance(x,y,u,v).

2. f フィートi インチをセンチメートルに変換するfeet_to_cm(f,i). ただし、1 フィート = 12 インチ = 30.48 cm である。

Page 26: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

解答def distance(x, y, u, v)

sqrt((x-u)*(x-u) + (y-v)*(y-v))end # sqrt((x-u)**2+(y-v)**2)

def feet_to_cm(f, i)30.48*f + 30.48/12*I # (f + i/12.0)*30.48

end

Page 27: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

ファイルに保存した関数定義―ファイルからの読み込み

# BMI of a person with height (cm) and weight (kg)def bmi(height , weight )

weight / ( height / 100.0) ** 2end

irb(main):003:0> load("./bmi.rb")=> true

irb(main):005:0> bmi(188.0, 104.0)=> 29.4250792213671

bmi.rb

#以下行末までコメント

ホームディレクトリへ保存せよ!Emacsを使おう

一度irbを終了し再起動してから…

Page 28: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

新しくファイルを作る 「E」アイコンをクリック メニュー「File」→「Visit New File」 出てきたウィンドウに「bmi.rb」 (場所:ホームディレクト

リ) 関数定義を入力 メニュー「File」→「Save」 前に作ったファイルの編集 ファイルを「E」アイコンへドラッグ&ドロップ

速修Emacs

# BMI of a person with height (cm) and weight (kg)def bmi(height , weight )

weight / ( height /100.0) ** 2end

Page 29: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

課題の提出

ITC-LMSで提出すること

提出様式 問題ごとに、(学籍番号)q○.txt のように名前を付ける

(例. 12-345678q1.txt) Rubyプログラムファイルの場合は .rb 一つの問題で複数のファイルの提出が必要な場合、

(学籍番号)q○.zip のように一つのzipファイルにまとめて提出

〆切は次回の講義開始まで(10月6日 8:29)

29

Page 30: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

本日の課題(問題1) 東京大学と米 Stanford University の学部学生

(undergraduate student) の年間授業料 (tuition) を調べ、irbを使って金額の大小を比較せよ。(電卓として使えばよい)解答にあたっては、それぞれの金額(東大は日本円、Stanford 大は米ドル)を示し、また換算に用いた円ドル為替レートも示せ。さらに、換算のためにirb に入力したコマンドも示せ。プログラム(関数)になっている必要はない。

30

Page 31: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

本日の課題(問題2) 2次方程式 ax^2 + bx + c = 0 の解をひとつ計算する関

数 quadratic(a,b,c) を定義するプログラムを書け。ただし、aがゼロの場合や、解が存在しない場合は考えなくてよい。(x^2はxの二乗を意味する。)

31

Page 32: アルゴリズム入門nakayama/algo17/pdf/01.pdf · 2017-09-28 · コンピュータに「計算(=情報処理)」をさせる手段 . 後半:情報科学の基礎概念

注意

かけ算記号は省略できない a*c は ac とは書けない。”ac”という別の変数の意味に

なる。 2a という変数は定義できない(Rubyのルール)

include(Math)を忘れずに プログラムを実行する前に読み込んでおくことが必要

(irbを再起動すると忘れてしまう) あるいは、ファイルの先頭に書いておく

32