• 検索結果がありません。

Microsoft PowerPoint - IntroAlgDs-13-4.pptx

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - IntroAlgDs-13-4.pptx"

Copied!
13
0
0

読み込み中.... (全文を見る)

全文

(1)

アルゴリズムとデータ構造入門-4 2013年10月29日 大学院情報学研究科知能情報学専攻 知能メディア講座 音声メディア分野 http://winnie.kuis.kyoto-u.ac.jp/~okuno/Lecture/13/IntroAlgDs/ okuno@i.kyoto-u.ac.jp,okuno@nue.org TAの居室は総合研究7号館4階418号室奥乃研 (M1) 奥乃研・音楽情報処理G (M1) 奥乃研・ロボット聴覚G (M1) 奥乃研・ロボット聴覚G 13

1.1 The Elements of Programming

1-1-7 Example: Square Roots by Newton's Method

1-1-8 Procedures as Black-Box Abstractions 1.2 Procedures and the Processes They Generate

1.2.1 Linear Recursion and Iteration 1.2.2 Tree Recursion

1.2.3 Growth of Order 1.2.4 Exponentiation

(define (sqrt-iter guess x) (if (good-enough? guess x)

guess

(sqrt-iter (improve guess x) x) )) (define (improve guess x)

(average guess (/ x guess)) ) (define (average x y)

(/ (+ x y) 2) )

(define (good-enough? guess x)

(< (abs (- (square guess) x)) 0.001) (define (sqrt x) (sqrt-iter 1.0 x))

7

is the

such that

and

(2)

(sqrt 2.0) (sqrt-iter 1.0 2.0) (sqrt-iter 1.5 2.0) (sqrt-iter 1.416667 2.0) (sqrt-iter 1.414215 2.0) (sqrt-iter 1.414213 2.0)8

is the

such that

and

x y y2x y0

(define (improve guess x)

(average guess (/ x guess)) )

x

guess

x/guess

宮田君による 10 (define (sqrt x) (sqrt-iter 1.0 x) ) と定義すれば, (sqrt 9) (sqrt (+ 100 37)) (sqrt (+ (sqrt 2) (sqrt 3))) (sqrt (sqrt 1000))11

sqrt

sqrt-iter

good-enough

square

abs

improve

average

Sqrtの手続き分解

外部から

は隠蔽

手続き抽象化

(3)

12

Square の定義

1.内部実装(implementation)の隠蔽

(define (square x) (* x x))

(define (square x)

(exp (double (log x))) )

(define (double x) (+ x x))

2.局所名(local names)の隠蔽

(define (square x) (* x x))

(define (square y) (* y y))

x e x ln 2 2 13

(define (sqrt-iter guess x) (if (good-enough? guess x)

guess

(sqrt-iter (improve guess x) x) )) (define (good-enough? guess x)

(< (abs (- (square guess) x)) 0.001)

bound

(束縛)

(define (good-enough? v target)

(< (abs (- (square v) target)) 0.001)

• 束縛変数:仮パラメータは手続きで束縛

• 自由変数:束縛・captureされていない

• 有効範囲(scope)変数の束縛されている式の範囲

15

(define (sqrt x)

(define (improve guess x) (average guess (/ x guess)) ) (define (good-enough? guess x)

(< (abs (- (square guess) x)) 0.001) ) (define (sqrt-iter guess x)

(if (good-enough? guess x) guess

(sqrt-iter (improve guess x) x) )) (sqrt-iter 1.0 x) )

静的有効範囲(lexical scoping)

(4)

ハノイの塔を解こう.

1.

一度には1枚の円盤し

か動かせない.

2.

小さい円盤の上には大

きな円盤は置けない.

16 Javaプログラムのデモ http://winnie.kuis.kyoto-u.ac.jp/~okuno/Lecture/13/IntroAlgDs/ 17

(define (move-tower size from to extra) (cond ((= size 0) #true)

(else

(move-tower (- size 1) from extra to) (print-move from to)

(move-tower (- size 1) extra to from)) ))

(define (print-move from to) (newline)

(display “move top disk from “) (display from)

(display “ to “) (display to) )

(define (solve-tower-of-hanoi size from to) (move-tower size from to (- 6 from to)) )

18 (define (ack m n) (cond ((= m 0) (+ n 1)) ((= n 0) (ack (- m 1) 1)) (else (ack (- m 1) (ack m (- n 1)) )))) (ack 0 2) (ack 1 2) (ack 2 2) (ack 3 2) Ackermann関数は線形再帰ではない! 1, if 0 ( , ) ( 1,1), if 0 ( 1, ( , 1)), otherwise n m Ack m n Ack m n Ack m Ack m n        

(5)

20 (define (tarai x y z) (if (<= x y) y (tarai (tarai (1- x) y z) (tarai (1- y) z x) (tarai (1- z) x y) ))) (tak 10 0 0) ( , , ) tarai x y z  if otherwise xy , (( ( 1, , ), ( 1, , ), ( 1, , )), y

tarai tarai x y z tarai y z x tarai z x y

     21 練習問題 • (ack 0 2)(ack 1 2)(ack 2 2)(ack 3 2) 計算過程を書くこと. 以下随意課題 1. (ack 0 n) ≡ n+1 (理由も) 2. (ack 1 n) ≡ ? (理由も) 3. (ack 2 n) ≡ ? (理由も) 4. (ack 3 n) ≡ ? (理由も) 5. (ack 4 n) ≡ ? (理由も) 23 1. 1ドルの両替の方法は何通り?

2. 50セント (half dollar),25セント (quarter),10セ ント (dime), 5セント(nickel), 1セント(penny)

(6)

24 • 使える硬貨をある順番で並べておくと • n種類の硬貨で金額aの両替の場合の数は 1. 先頭の種類を除いたすべての硬貨を使って金額 aを両替する場合の数 + 2. 先頭の種類の硬貨(額面d)とすると,a-dの額をn種の硬貨を使って両替する場合の数 3. 初期値:a=0の時1,a<0の時かn=0の時0

分割統治法

(divide-and-conquor)

26

(define (count-change amount) (cc amount 5) )

(define (cc amount kinds-of-coins) (cond ((= amount 0) 1)

((or (< amount 0) (= kinds-of-coins 0)) 0) (else (+ (cc amount (- kinds-of-coins 1)) (cc (- amount (first-denomination kinds-of-coins )) kinds-of-coins )))))

(define (first-denomination kinds-of-coins) (cond ((= kinds-of-coins 1) 1) ((= kinds-of-coins 2) 5) ((= kinds-of-coins 3) 10) ((= kinds-of-coins 4) 25) ((= kinds-of-coins 5) 50) )) 27 (define (adder x y c) (define (carry x y c)

(if (or (and (= x 1) (= y 1)) (and (= y 1) (= c 1)) (and (= c 1) (= x 1)) ) 1 0 ))

(define (sum x y c) (xor x y c) )

(cons (sum x y c) (carry x y c)) ) (define (xor x y z) (if (= x 0) (if (= y 0) z (if (= z 0) 1 0)) (if (= y 0) (if (= z 0) 1 0) z) ))

x

y

c

i (carry, 桁上げ)

c

i+1

s

+

(7)

28

What is this instrument?

タイガー計算機 http://www.tiger-inc.co.jp/temawashi/temawashi.html 30

For all n > n

0

R(n)

(f(n))

上下限

R(n)

(f(n))

上限

R(n)

(f(n))

下限

R

(

n

)

k

f

(

n

)

)

(

)

(

n

k

f

n

R

)

(

)

(

)

(

2 1

f

n

R

n

k

f

n

k

R(n)

は、ステップ数あるいはスペース量

31 • (1) : constant growth(n): linear growth(bn): exponential growth

(log n): logarithmic growth

(nm): power law growth

-5 0 5 10 15 20 25 0 1 2 3 4 5 下記はどの曲線? 1. y = x 2. y = x2 3. y = log x 4. y = x log x A B C D

(8)

32 • ウサギのつがい (二羽)の数 • 内部反射回数 1 2 3 4 5 6 (a)は13個の時計回り (b)は8個の反時計回り 34 (define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2)) ))))



otherwise

,

2

1

1

if

0

if

,

1

,

0

)

fib(n

)

fib(n

n

n

fib(n)

(9)

35

(define (fib-i n)

(define (iter a b count) (if (= count 0) b (iter (+ a b) a (- count 1)) )) (iter 1 0 n) ) n i i i i i

b

n

fib

a

b

b

a

a

 

)

(

1 1

0

1

0 0

b

a

where

• Fibonacci数の漸化式 • ビネの公式 • 帰納法で証明せよ. 1. n = 0, 1 を検証 2. kのとき成立を仮定し,k+1で成立を示す

0

0

F

F

1

1

F

n2

F

n

F

n1









 





 

n n n

F

2

5

1

2

5

1

5

1

黄金比(Golden Ratio)

Fibonacci数の漸化式

1. 線形差分方程式の解法

1) 特性方程式を作成・解を求める. 2) その根をαβとすると元の差分方程式の解は と表せる。 ただし, C, D は定数 3) 初期値等から、定数項の値を求める

2.

母関数(

generating function)の解法

0

0

F

F

1

1

Fn2 FnFn1 n n n C D F    

(10)

• 漸化式: , , • 一般的な解法 1. 方程式 の根をφψとすると 一般項は と表せる。 ただし、A, B は定数である。 2. 初期値等から、定数項の値を求める。 • 1. より , • 2. より 39 1 1 a a21 an2anan1 n n n a A B 0 1 2     n n n a a a 0 1 2 t  t 2 5 1   1 B A 1   a

n n

n a    5 1 1 B A 2 2 2     a 2 5 1   • フィボナッチ数列: 0, 1, 1, 2, 3, 5, 8, … • 母関数 0 0 F F11 Fn2FnFn1         5 5 4 4 3 3 2 2 1 0 Fx Fx Fx Fx Fx F y 2 2 2 4 3 3 2 2 1 0 2 5 3 4 2 3 1 2 0 3 2 3 2 1 2 0 1 0 6 5 5 4 4 3 3 2 2 1 0 1 ) 1 ( ) ( ) 1 ( ) ( ) ( ) ( x x x y y x x y x y x x x F x F x F x F x x x F x F x F x F x x y x F F x F F x F F F xy y x F x F x F x F x F x F xy                                                  右辺 左辺 • 部分分数への分解 • 両辺を比べて (α+β)=1, α β=-1 • これは の解 • 級数展開をすると • xn の係数はフィボナッチ数 F n             x x x x x     1 1 1 1 1 1 2

 

... ... 1 ... 1 1 3 3 3 2 2 2 2 2 2 2                    x x x y x x x x y                   0 1 2 t t ... 1 1 1 2 3 4 5 6x x x x x x x 2 2 1 ( ) 1 x x x x x x        

(11)

xn の係数はフィボナッチ数Fn • 一方,        n n n F 2 5 1 ,                           n n n F 2 5 1 2 5 1 5 1 43

木構造再帰

(define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2)) ))))44 (fib-i 6) (iter 1 0 6) (iter 1 1 5) (iter 2 1 4) (iter 3 2 3) (iter 5 3 2) (iter 8 5 1) (iter 13 8 0) 8

Linear iterative process

(線形反復プロセス)

(define (fib-i n) (define (iter a b count)

(if (= count 0) b

(iter (+ a b) a (- count 1) ))) (iter 1 0 n) )

(12)

45

C(n):n に対して fib の呼ばれる回数

C(0)=C(1)=1

n≧2 に対して C(n)=C(n-1)+C(n-2)+1

C(2)=3, C(3)=5, C(4)=9, C(5)=15, …

一般に、

C(k) > 2

k/2

C(n) を求める

1. F(n)=C(n)+1 とおくと

2. F(n)=F(n-1)+F(n-2) for n≧2

3. F(0)=2, F(1)=2

n≧2 に対して C(n)=C(n-1)+C(n-2)+1F(n)=C(n)+1 とおくとF(n)=F(n-1)+F(n-2) for n≧2F(0)=2, F(1)=2

さあ、解いてみてください。

50

1.反復型と繰返型のフィボナッチ数

のプログラムを書きなさい.

2.本日の講義の感想を31文字でま

とめなさい.

(13)

51 1. Fibonacci数の再帰型と繰り返し型手続きについて,ファイルを 作成せよ.1個のファイルに(fib.scm) 2. 2種類のFibonacci数の手続きを実行し,fib(10),fib(20), fib(30) の出力結果を求めよ. 3. 2種類のFibonacci数の手続きを使ったfib(n) 実行時に fib が呼ばれる回数を,それぞれ解析的に求めよ. 4. 説明と出力結果, 及び3について,レポートをlatexで作成し, pdf で提出すること. 5. 教科書 1-3-2 ~ 1-3-4 を読み,①想定質問,②想定質問 の解答,③その説明を記述. 4の課題の後ろに書くこと. 6. プログラムファイルとレポートのpdf を SICP-4@zeus.kuis.kyoto-u.ac.jpに送付 • 友達に教えてもらったら,その人の名前を明記すること.Web は出展を明記.(otherwise 回答は減点)

参照

関連したドキュメント

BRAdmin Professional 4 を Microsoft Azure に接続するには、Microsoft Azure のサブスクリプションと Microsoft Azure Storage アカウントが必要です。.. BRAdmin Professional

First three eigenfaces : 3 個で 90 %ぐらいの 累積寄与率になる.

問題はとても簡単ですが、分からない 4人います。なお、呼び方は「~先生」.. 出席について =

本節では本研究で実際にスレッドのトレースを行うた めに用いた Linux ftrace 及び ftrace を利用する Android Systrace について説明する.. 2.1

READ UNCOMMITTED 発生する 発生する 発生する 発生する 指定してもREAD COMMITEDで動作 READ COMMITTED 発生しない 発生する 発生する 発生する デフォルト.

(※)Microsoft Edge については、2020 年 1 月 15 日以降に Microsoft 社が提供しているメジャーバージョンが 79 以降の Microsoft Edge を対象としています。2020 年 1

ダウンロードしたファイルを 解凍して自動作成ツール (StartPro2018.exe) を起動します。.

個別の事情等もあり提出を断念したケースがある。また、提案書を提出はしたものの、ニ