離散数学 I 第 10回再帰
荒木 徹
電子情報理工学科
2018年度
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 1 / 24
前回の演習
チェス盤の敷き詰め問題
縦横が 2n × 2nのチェス盤から,任意に一つの正方形を取り除いて得られるものを,欠損チェス盤 Bnとする.このとき,どんな Bnも何枚かの B1
で敷き詰めることができることを証明せよ.
証明.nに関する帰納法で証明する.n = 1のとき.明らかに B1は B1で敷き詰めることができる.
n = k のときに,任意の Bk が B1で敷き詰めることができると仮定する.
任意の Bk+1を考える.Bk+1は 2k+1 × 2k+1の欠損チェス盤である.こ
れを図のように 2k × 2k の大きさに 4分割し,これらを A,B,C ,Dと呼ぶことにする.
Bk+1で欠けている正方形は Aにあると仮定しても一般性を失わない1
1注:もし欠けている正方形が他の領域にあったとしても,同じ方針で証明ができる.
そこで無駄な場合分けを避けるために使われれる決まり文句.荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 2 / 24
帰納法の仮定により,Aは B1で敷き詰めることができる.
また,B の左下,C の右上,D の左上を欠いたチェス盤を考える.それぞれは,また帰納法の仮定により B1で敷き詰めることができる.
最後に,B,C ,D で欠けた部分は,1枚の B1で敷き詰めることができる.
以上より,Bk+1は B1で敷き詰めることができる.
Figure: 欠損チェス盤 B1 と Bk+1.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 3 / 24
課題 2:フィボナッチ数
任意の正整数 nに対して,n∑
i=1
Fi = Fn+2 − 1であることを証明せよ.
証明.nに関する帰納法で証明する.n = 1のとき.(左辺)= F1 = 1.(右辺)= F3 − 1 = 2− 1 = 1.したがって n = 1のとき成り立つ.k ≥ 1に対して,
∑ki=1 Fi = Fk+2 − 1であると仮定する.
このとき,∑k+1
i=1 Fi = Fk+3 − 1であることを示す.
k+1∑i=1
Fi = Fk+1 +k∑
i=1
Fi
= Fk+1 + Fk+2 − 1
= Fk+3 − 1.
したがって帰納法により成り立つことが証明できた.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 4 / 24
The Tower of Hanoi
以下のルールに従って,すべての円盤を右端の杭に移動せよ.
最初は,すべての円盤が小さいものが上になるように積み重ねられ
ている.
円盤を一回に一枚ずつどれかの杭に移動させることができる.
ただし、小さな円盤の上に大きな円盤を乗せることはできない.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 5 / 24
小さな例題
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 6 / 24
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 7 / 24
完成までのステップ数
ディスクが 1枚のとき 1ステップ
ディスクが 2枚のとき 3ステップ
ディスクが 3枚のとき 7ステップ
ハノイの塔
ディスクが n枚あるときの,完成までの最小のステップ数を求めよ.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 8 / 24
ハノイの塔の解法を考える
ハノイの塔の解くためには
1 まず上の n − 1枚の小さいディスクを 2番めの杭に移す
2 一番大きなディスクを右端に移す
3 2番めの杭にある n − 1枚のディスクを 3番めの杭に移す
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 9 / 24
再帰的に考える
大事な考え方
「n − 1枚のハノイの塔」が解ければ,n枚のハノイの塔も解ける.
なお「1枚のハノイの塔」は簡単に解ける.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 10 / 24
Tn:n枚のディスクを移す最小ステップ数
Example:T1 = 1,T2 = 3,T3 = 7.
前のスライドから分かること
Tn ≤ 2Tn−1 + 1.
このように動かせば解ける
ちょっと考えると分かること
Tn ≥ 2Tn−1 + 1.
一番大きなディスクを動かすためには,上の n− 1枚をどこか 1本の杭に移さなければならない
一番大きなディスクは,少なくとも 1回は動かさなければならない
その後に,一番大きなディスクの上に,上の n− 1枚を動かさなければならない.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 11 / 24
ハノイの塔の最小ステップ数
再帰式
1 T1 = 1,
2 n ≥ 2に対して Tn = 2Tn−1 + 1.
最小ステップ数
任意の n ≥ 1に対して,Tn = 2n − 1.
nに関する帰納法で証明する.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 12 / 24
平面上の直線によってできる領域
問題
平面上に n本の直線を書いたとき,直線で囲まれる半平面の領域の数 Lnは,最大でいくつか?
Example:小さな値の nで考える.
Ln =???
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 13 / 24
再帰的に考える
n本目の直線を考える
直線がすでにある領域を横切ると,その領域は 2つに分割される
よって,その横切った領域の数だけ,新しい領域が増える.
n本目の直線は,すでにある直線と n − 1回まで交差できる.
したがって,横切れる領域の数は n個まで.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 14 / 24
領域の数
前のスライドから分かること
Ln ≤ Ln−1 + n.
多くても n個しか領域を増やせない
しかし
どの 2本の直線も平行でなく
どの 3本の直線も 1点で交わらない
ようにすれば,n番目の直線は他の n − 1本と交差する.
領域の数の最大数
1 L1 = 2,
2 n ≥ 2に対して,Ln = Ln−1 + n.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 15 / 24
関数を再帰的に定義する
例題:次の関数は何を意味する?
関数 f : N+ × N+ → N+を次のように定義する.
f (m, n) =
{m m < nのとき
f (m − n, n) m ≥ nのとき
例題:次の関数は何を意味する?
関数 g : N+ × N+ → N+を次のように定義する.
g(m, n) =
{0 m < nのとき
1 + g(m − n, n) m ≥ nのとき
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 16 / 24
集合を再帰的に定義する
例題:次の集合 Eは何を意味する?
1 0 ∈ Eである.2 k ∈ Eならば,k + 2 ∈ Eである.3 上の2つの条件を適用して得られるものだけが,Eの元である.
例題:次の集合 S は何を意味する?
1 5 ∈ S である.
2 x ∈ S かつ y ∈ S ならば,x + y ∈ S である.
3 上の3つの条件を適用して得られるものだけが,S の元である.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 17 / 24
文字列とは
文字列:コンピュータサイエンスにおいて最も重要な概念の一つ
アルファベット
使用する文字の集合をアルファベットという.この講義では Σで表す.
文字列(string)
Σの要素を有限個並べてできる列 x = x1x2 . . . xnを,Σ上の文字列(または語)という.
空語(文字がない文字列)を λで表す.
文字列の連接(concatenation)
Σをアルファベットとし,x と y をΣ∗上の文字列とする.x と y の連接とは,x の後に y をつなげてできる文字列 x · y である.任意の x ∈ Σに対して,x · λ = λ · x = x と定義する.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 18 / 24
文字列の再帰的な定義
文字列(38ページ,55ページ)
Σを文字の集合とする(これをアルファベットと呼ぶ).Σ上の文字列とは,次を満たすものである.
1 λは Σ上の文字列である.λを空語という.
2 s が Σ上の文字列であり,かつ x ∈ Σならば,x · s は Σ上の文字列である.
Σ上のすべての文字列の集合を Σ∗で表す.
例.Σ = {a, b}とする.Σ∗の要素は
λ
a, b
aa, ab, ba, bb
aaa, aab, aba, abb, baa, bab, bba, bbb
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 19 / 24
文字列の長さ:再帰的な定義
文字列の長さ
文字列 s ∈ Σ∗の長さ |s|を,次のように定義する.1 |λ| = 0
2 s ∈ Σ∗かつ x ∈ Σならば,|x · s| = 1 + |s|.
|aba| = 1 + |ba|= 1 + (1 + |a|)= 1 + (1 + (1 + |λ|))= 1 + (1 + (1 + 0))
= 3
関数の再帰的定義
これは,関数 | · | : Σ∗ → Nを再帰的に定義している.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 20 / 24
カッコの対応がとれている括弧列
例題
Σ = {(, )}とする.左右のカッコがきちんと対応している括弧列の集合 Pを定義しなさい.
“(()())”や “((()(())))”は対応がとれている括弧列.したがって(()()), ((()(()))) ∈ P.
“(((((()”は対応がとれていない括弧列.したがって (((((() ̸∈ P
“)()()(”や “())(()”も対応がとれていない括弧列.
コンパイラ
プログラミング言語のコンパイラをイメージしてみよう.カッコが多す
ぎたり足りなかったりすると,コンパイラがエラーを出して教えてくれ
ているはず.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 21 / 24
考え方
Σ = {(, )}とする再帰的定義の基底:λ ∈ P とする
s ̸= λの場合を考えると,最初の文字は ‘(’ のはず.
先頭の ‘(’と対応する ‘)’の位置は,次の 2通りのいずれかのはず.
全体の括弧列の最後にある.つまり括弧列 s が対応がとれていて,かつ全体が (s)の形をしている.全体の括弧列の中間にある.つまり対応がとれた括弧列 s1, s2があって,かつ全体が (s1)s2 の形をしている.つまり,全体が対応がとれた二つの括弧列の連接になっている.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 22 / 24
括弧列の再帰的な定義
対応がとれた括弧列の再帰的定義
Σ = {(, )}とする.括弧列の集合 P を次のように定義する.
1 λ ∈ P
2 s ∈ P ならば,(s) ∈ P である.
3 s1, s2 ∈ P ならば,s1 · s2 ∈ P である.
(()())() = (()()) · ()= ([()()]) · ([λ])= ([() · ()]) · ([λ])= ([([λ]) · ([λ])]) · ([λ])
→ (関連)テキスト 58ページ例 2.6,60ページ問 2.14
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 23 / 24
今日の演習
課題 1
任意の n ≥ 1に対して,Ln = (n2 + n + 2)/2であることを証明せよ.
課題 2:関数の再帰的な定義
関数 pを,整数 n, k,ただし n ≥ k,に対して,p(n, k) = n(n − 1) . . . (n − k + 1)とする.関数を pを再帰的に定義せよ.
課題 3:回文
回文(上から読んでも下から読んでも同じになる文字列)を定義せよ.
ママが私にしたわがまま (ママガワタシニシタワガママ)
数学解くガウス(スウガクトクガウス)
ガウス(1777~1855)はドイツの天才数学者.離散数学(整数論)について大きな業績を残した.
荒木 徹 (電子情報理工学科) 離散数学 I 第 10 回 2018 年度 24 / 24
Top Related