演習問題 1

演習問題 1
平成 27 年 4 月 6 日
問 1.1
6
函数の増大する速さを大まかに表す漸近記法を講義で扱った.正確に定義を述べ
ると,自然数を非負実数に移す函数 f ,g : N → R≥0 について,
(1)f (n) = O(g(n)) とは,或る c ∈ R≥0 が存在し,十 大きなすべての n ∈ N につい
て f (n) ≤ c · g(n) が成立つことをいう.
(2)f (n) = Ω(g(n)) とは,g(n) = O(f (n)) であることをいう.
(3)f (n) = Θ(g(n)) とは,f (n) = O(g(n)) かつ f (n) = Ω(g(n)) が成立つことをいう.
つまり f (n) = O(g(n)) は「f の値は定数倍を無視すれば概ね g 以下である」を表す.
逆に Ω は「…以上である」を表す. 利な書き方だが,
「存在」
「すべて」のやや混み入っ
た意味を式の中に隠しており,二つの物が等しいわけでもないのに等号を
うという聊か
怪しい記法であるから,誤解を与えぬよう注意して用いるべきである.本講義では式の右
辺でのみ(或いは「…の値は O(log n) である」のごとく の述語として) うことにする.
この記法を f (n) = n3 − O(n2 ) のごとく式の中に入れて
うこともある.これは或る
c ∈ R が存在し,十 大きなすべての n ∈ N で f (n) ≥ n3 − c · n2 という意味になる.つ
まり O が右辺になるように移項した n3 − f (n) = O(n2 ) として解釈すればよいのである.
次の各主張の成否を○か×かで答えよ(提出では理由は不要).
(イ)n2 = O(n)
(ロ)n2 = Ω(n)
(ハ)5n + 3 = O(n)
(ニ)25n+3 = O(2n )
(ホ)3n = O(2n)
(ヘ)3n = O(2n )
(ト)3n = 2O(n)
(チ)log2 n = Θ(log7 n)
以下 log は log2 を意味する.
(リ)log(n2 ) = O(log n)
(ヌ)(log n)2 = O(log n)
√
(ル)n(log n)2 = O(n n)
(ヲ)n! = O(10n )
1-1
問 1.2
2+2
(1)函数 f ,g ,h : N → R≥0 について,f (n) = O(g(n)) かつ g(n) = O(h(n))
ならば必ず f (n) = O(h(n)) が成立つといえるか.
(2)常に正の値をとる任意の函数 f ,g : N → R>0 について,f (n) = O(g(n)) または
f (n) = Ω(g(n)) の少くとも一方は必ず成立つといえるか.
くじ
問 1.3 正の定数 p < 1 を固定する.確率 p で当る籤を独立に l 回引くとき,当りの出る
1+4+2+4
回数 X の期待値は勿論 pl であるが,これよりも割合 δ > 0 だけ多めに当る確率を考えよ
う.つまり X ≥ pl(1 + δ) となる確率を f (l, δ) とする.このとき任意の δ > 0 について,
f (l, δ) = 2−Ω(l)
(◎)
が成立つ.このことを示そう.
(1)式 (◎) の意味を,漸近記法を
わずに述べよ.
(2)(1 + δ)X の期待値を求めよ.
(3)f (l, δ) · (1 + δ)pl(1+δ) は(2)の値以下である.何故か.
(4)(◎) を示せ.
問 1.4
3+7
与えられた(十進法で)n 桁の平方数 S の平方根を知るため,正整数 x0 ,x1 ,
…を
x0 = 10
⌈n/2⌉
xi+1
⌊ (
)⌋
1
S
=
xi +
2
xi
(i = 0, 1, . . .)
で順次求めることにする.但し ⌈·⌉ と ⌊·⌋ とはそれぞれ整数への切上げ,切捨てを表す.
(1)xi と正しい平方根との差 di = xi −
(2)xi =
√
√
S について,di+1 を di と S とで表せ.
√
S となる i が存在し,そのうち最小のものは O(log n) であることを示せ.
1-2
n
2
9 17 30 45 62 69 80
比
7 22 26 31 36 42 51 75
2
7
9 17 22 26
2n
図1
問 1.5
1+3+5
比
長さ n の既に整列された配列二つを併合して長さ 2n の配列にする.
与えられた配列の要素を小さい順に並べ替える(整列する)という問題について,
の回数が O(n log n) である算法を示す.
(1)長さ n の整数配列が二つあり,それぞれは既に昇順に整列されている.両者を並行
して先頭から読みながら比
することで,これら 2n 個の整数が昇順に整列された
新たな配列を作ることができる(図 1)が,このとき整数値の比
は最大で何回行
われるか.答のみでよい.
(2)併合整列(merge sort)は(1)を繰返し用いることで配列を整列する算法である.如
何にして用いるか述べ,この算法で長さ n の整数配列を整列するときに行われる整
数値の比
の最大回数 T (n) について次が成立つことを説明せよ.
T (2n) = 2T (n) + O(n)
(★)
(3)(★) を満す任意の非減少函数 T について T (n) = O(n log n) が成立つことを示せ.
注意 (3)では (★) の O 記法の正確な定義に照して正しく議論すること.
問 1.6 前問の併合整列が(漸近的に)最良(のものの一つ)であることを示そう.すなわ
3
ち与えられた n 個の相異なる整数 a1 ,
…,an を,二つの整数の比 のみを用いて整列した
いとき,必要な比
二整数の比
の回数 k の下界を求めよう.空欄を埋めよ.
により a1 ,…,an の大小関係を決定する手順は,二 木を根から ること
で表される.葉以外の各節点には n 以下の正整数の組 (i, j) が指定されており,二つの子
に向う枝にはそれぞれ「ai < aj のとき」「ai > aj のとき」と書かれている.葉に至った
ときには a1 ,…,an の大小関係がわかっている.
この手順に従ったときに行う比
さが k の二
木に葉は高々
イ
の回数の最大値 k は,すなわち木の深さである.深
枚である.一方 n 個の相異なる整数の大小関係は
1-3
ロ
通りあり得るから,葉は少くとも
これらより
イ
≥
ロ
ロ
枚ある.
.スターリングの 式
n!
lim √
=1
n→∞
2πn (n/e)n
により k = Ω(
問 1.7 或る
7
ハ
) とわかる.
共施設があり,利用したい団体は開始・終了時刻を決めて申込む.希望者
は多いが一度に利用できるのは一団体だから,施設では時間が重ならないよう申込の一部
を選んで受入れ,残りは断らざるを得ない.さて,今この施設には来季の の申込書 n 枚
が届いており,このうちなるべく多数を受入れたい.
講義では,まず申込書を終了時間の早い順に並べ替えてから,それを先頭から順に見て,
受入可能な申込を貪慾に選べばよいと述べた.何故これで最大数の申込を受入れることに
なるか,証明せよ.
1-4