跳到主要内容

東京大学 新領域創成科学研究科 メディカル情報生命専攻 2024年8月実施 問題7

Author

zephyr-zdz

Description

Let nn be a positive integer. Let f(n)f(n) and g(n)g(n) denote functions that represent computation time for solving a problem of size nn. To provide an asymptotic upper bound on f(n)f(n), we define:

O(g(n))={f(n)  |  There exist positive constants c0 and n0 such thatf(n)c0g(n) for all nn0}O(g(n)) = \left\{ f(n) \;\middle|\; \begin{array}{l} \text{There exist positive constants } c_0 \text{ and } n_0 \text{ such that} \\ f(n) \le c_0 g(n) \text{ for all } n \ge n_0 \end{array} \right\}

Let c (1)c\ (\ge 1) be a constant number. Prove that the following statements are true:

(1) If f(n)=2n+n2f(n) = 2^n + n^2, then f(n)O(2n)f(n) \in O(2^n).

(2) If f(n)=n32nf(n) = n^3 2^n, then f(n)O(22n)f(n) \in O(2^{2n}).

(3) If f(1)=cf(1) = c and f(n)=2f(n1)+cn (n>1)f(n) = 2f(n-1) + cn \ (n > 1), then f(n)O(22n)f(n) \in O(2^{2n}).

(4) If f(1)=cf(1) = c and f(n)=2f(n/2)+cn (n>1)f(n) = 2f(\lfloor n/2 \rfloor) + cn \ (n > 1), where x\lfloor x \rfloor denotes the largest integer that is equal to or smaller than real number xx, then f(n)O(nlogn)f(n) \in O(n \log n).

题目描述

nn 为正整数,f(n)f(n)g(n)g(n) 表示求解规模为 nn 的问题所需的计算时间。为给出 f(n)f(n) 的渐近上界,定义

O(g(n))={f(n)  |  存在正常数 c0,n0, 使得对一切 nn0 有 f(n)c0g(n)}O(g(n)) = \left\{ f(n) \;\middle|\; \begin{array}{l} \text{存在正常数 } c_0, n_0, \text{ 使得} \\ \text{对一切 } n \ge n_0 \text{ 有 } f(n) \le c_0 g(n) \end{array} \right\}

c (1)c\ (\ge 1) 为常数,证明下列命题成立:

  1. f(n)=2n+n2f(n) = 2^n + n^2,则 f(n)O(2n)f(n) \in O(2^n)
  2. f(n)=n32nf(n) = n^3 2^n,则 f(n)O(22n)f(n) \in O(2^{2n})
  3. f(1)=cf(1) = cf(n)=2f(n1)+cn (n>1)f(n) = 2f(n-1) + cn\ (n > 1),则 f(n)O(22n)f(n) \in O(2^{2n})
  4. f(1)=cf(1) = cf(n)=2f(n/2)+cn (n>1)f(n) = 2f(\lfloor n/2 \rfloor) + cn\ (n > 1),其中 x\lfloor x \rfloor 表示不超过实数 xx 的最大整数,则 f(n)O(nlogn)f(n) \in O(n \log n)

各小问都要求按定义给出 c0c_0n0n_0(或等价的推导),而非仅指出量级。

Kai

Overview

All four parts ask for the same thing: exhibit explicit constants c0c_0 and n0n_0 witnessing the definition of O()O(\cdot) given above, rather than merely naming the growth rate. Parts (1) and (2) reduce to a single polynomial-versus-exponential lemma — n22nn^2 \le 2^n for n4n \ge 4, and n32nn^3 \le 2^n for n10n \ge 10 — each proved by induction, after which the required bound is immediate. Parts (3) and (4) are recurrences. In (3) the argument decreases by one, so the recurrence can be solved exactly; the closed form turns out to be Θ(2n)\Theta(2^n), comfortably below the requested 22n2^{2n}. In (4) the argument is halved, which is the classic divide-and-conquer recurrence of merge sort; the floor is handled by strong induction combined with the monotonicity of t(1+log2t)t\,(1 + \log_2 t), which lets n/2\lfloor n/2 \rfloor be relaxed to n/2n/2 without breaking the bound. Throughout, recall that OO states only an upper bound, so a loose but correct estimate is a complete answer.

四个小问要求的其实是同一件事:按上面给出的 O()O(\cdot) 定义,明确给出常数 c0c_0n0n_0,而不是仅仅指出增长量级。(1) 和 (2) 都归结为一个「多项式 vs 指数」的引理——n4n \ge 4n22nn^2 \le 2^nn10n \ge 10n32nn^3 \le 2^n——各用归纳法证明后,所需上界立即得到。(3) 和 (4) 是递推式:(3) 中自变量每次减 11,可直接求出精确闭式解,其量级为 Θ(2n)\Theta(2^n),远低于题目要求的 22n2^{2n};(4) 中自变量每次减半,即归并排序那类分治递推,取整符号用强归纳法配合 t(1+log2t)t\,(1 + \log_2 t) 的单调性处理,从而可把 n/2\lfloor n/2 \rfloor 放大为 n/2n/2 而不破坏上界。始终要记得 OO 只声明上界,因此偏松但正确的估计就是完整答案。

(1)

First we prove the lemma that n22nn^2 \le 2^n for n4n \ge 4, by mathematical induction.

Base case: For n=4n = 4 we have n2=16n^2 = 16 and 2n=162^n = 16, so 161616 \le 16 holds.

Inductive step: Assume n22nn^2 \le 2^n for some n4n \ge 4. For n3n \ge 3,

n2(2n+1)=(n1)22222=2>0n^2 - (2n + 1) = (n-1)^2 - 2 \ge 2^2 - 2 = 2 > 0

so 2n+1<n22n + 1 < n^2. Hence

(n+1)2=n2+2n+1<2n222n=2n+1(n+1)^2 = n^2 + 2n + 1 < 2n^2 \le 2 \cdot 2^n = 2^{n+1}

which establishes the claim for n+1n+1. Therefore n22nn^2 \le 2^n for all n4n \ge 4.

By this lemma, for n4n \ge 4,

f(n)=2n+n22n+2n=22nf(n) = 2^n + n^2 \le 2^n + 2^n = 2 \cdot 2^n

Taking c0=2c_0 = 2 and n0=4n_0 = 4 satisfies the definition, so f(n)O(2n)f(n) \in O(2^n).

先用数学归纳法证明引理:当 n4n \ge 4n22nn^2 \le 2^n

基例: n=4n = 4n2=16n^2 = 162n=162^n = 16,故 161616 \le 16 成立。

归纳步: 设某个 n4n \ge 4 满足 n22nn^2 \le 2^n。当 n3n \ge 3

n2(2n+1)=(n1)22222=2>0n^2 - (2n + 1) = (n-1)^2 - 2 \ge 2^2 - 2 = 2 > 0

2n+1<n22n + 1 < n^2。于是

(n+1)2=n2+2n+1<2n222n=2n+1(n+1)^2 = n^2 + 2n + 1 < 2n^2 \le 2 \cdot 2^n = 2^{n+1}

n+1n+1 也成立。故对一切 n4n \ge 4n22nn^2 \le 2^n

由该引理,当 n4n \ge 4f(n)=2n+n22n+2n=22nf(n) = 2^n + n^2 \le 2^n + 2^n = 2 \cdot 2^n。取 c0=2c_0 = 2n0=4n_0 = 4 即满足定义,故 f(n)O(2n)f(n) \in O(2^n)

(2)

We prove the lemma that n32nn^3 \le 2^n for n10n \ge 10, by mathematical induction.

Base case: For n=10n = 10, n3=10001024=210n^3 = 1000 \le 1024 = 2^{10}.

Inductive step: Assume n32nn^3 \le 2^n for some n10n \ge 10. Since n10n \ge 10 implies 1+1n11101 + \frac{1}{n} \le \frac{11}{10},

(n+1)3=n3(1+1n)3n3(1110)3=1.331n3<2n322n=2n+1(n+1)^3 = n^3 \left(1 + \frac{1}{n}\right)^3 \le n^3 \left(\frac{11}{10}\right)^3 = 1.331\, n^3 < 2 n^3 \le 2 \cdot 2^n = 2^{n+1}

which establishes the claim for n+1n+1. Therefore n32nn^3 \le 2^n for all n10n \ge 10.

By this lemma, for n10n \ge 10,

f(n)=n32n2n2n=22nf(n) = n^3 2^n \le 2^n \cdot 2^n = 2^{2n}

Taking c0=1c_0 = 1 and n0=10n_0 = 10 satisfies the definition, so f(n)O(22n)f(n) \in O(2^{2n}).

用数学归纳法证明引理:当 n10n \ge 10n32nn^3 \le 2^n

基例: n=10n = 10n3=10001024=210n^3 = 1000 \le 1024 = 2^{10}

归纳步: 设某个 n10n \ge 10 满足 n32nn^3 \le 2^n。由 n10n \ge 101+1n11101 + \frac{1}{n} \le \frac{11}{10},故

(n+1)3=n3(1+1n)3n3(1110)3=1.331n3<2n322n=2n+1(n+1)^3 = n^3 \left(1 + \frac{1}{n}\right)^3 \le n^3 \left(\frac{11}{10}\right)^3 = 1.331\, n^3 < 2 n^3 \le 2 \cdot 2^n = 2^{n+1}

n+1n+1 也成立。故对一切 n10n \ge 10n32nn^3 \le 2^n

由该引理,当 n10n \ge 10f(n)=n32n2n2n=22nf(n) = n^3 2^n \le 2^n \cdot 2^n = 2^{2n}。取 c0=1c_0 = 1n0=10n_0 = 10 即满足定义,故 f(n)O(22n)f(n) \in O(2^{2n})

(3)

We first solve the recurrence in closed form. The claim is

f(n)=c(2n+1n2)(n1)f(n) = c\left(2^{n+1} - n - 2\right) \qquad (n \ge 1)

which we prove by mathematical induction.

Base case: For n=1n = 1, c(2212)=c(43)=c=f(1)c(2^2 - 1 - 2) = c(4 - 3) = c = f(1).

Inductive step: Assume f(n1)=c(2n(n1)2)=c(2nn1)f(n-1) = c(2^n - (n-1) - 2) = c(2^n - n - 1) for some n11n - 1 \ge 1. Then

f(n)=2f(n1)+cn=2c(2nn1)+cn=c(2n+12n2+n)=c(2n+1n2)\begin{aligned} f(n) &= 2f(n-1) + cn \\ &= 2c\left(2^n - n - 1\right) + cn \\ &= c\left(2^{n+1} - 2n - 2 + n\right) \\ &= c\left(2^{n+1} - n - 2\right) \end{aligned}

so the claim holds for nn.

Since n+2>0n + 2 > 0 for n1n \ge 1,

f(n)=c(2n+1n2)<c2n+1=2c2n2c22nf(n) = c\left(2^{n+1} - n - 2\right) < c \cdot 2^{n+1} = 2c \cdot 2^n \le 2c \cdot 2^{2n}

where the last inequality uses 2n22n2^n \le 2^{2n} for n0n \ge 0. Taking c0=2cc_0 = 2c and n0=1n_0 = 1 satisfies the definition, so f(n)O(22n)f(n) \in O(2^{2n}).

Note that this f(n)f(n) is in fact in O(2n)O(2^n); the bound O(22n)O(2^{2n}) asked for here is a loose one.

先求递推式的闭式解。断言

f(n)=c(2n+1n2)(n1)f(n) = c\left(2^{n+1} - n - 2\right) \qquad (n \ge 1)

用数学归纳法证明。

基例: n=1n = 1c(2212)=c(43)=c=f(1)c(2^2 - 1 - 2) = c(4 - 3) = c = f(1)

归纳步: 设某个 n11n - 1 \ge 1 满足 f(n1)=c(2nn1)f(n-1) = c(2^n - n - 1),则

f(n)=2f(n1)+cn=2c(2nn1)+cn=c(2n+12n2+n)=c(2n+1n2)\begin{aligned} f(n) &= 2f(n-1) + cn \\ &= 2c\left(2^n - n - 1\right) + cn \\ &= c\left(2^{n+1} - 2n - 2 + n\right) \\ &= c\left(2^{n+1} - n - 2\right) \end{aligned}

nn 也成立。

由于 n1n \ge 1n+2>0n + 2 > 0,有

f(n)=c(2n+1n2)<c2n+1=2c2n2c22nf(n) = c\left(2^{n+1} - n - 2\right) < c \cdot 2^{n+1} = 2c \cdot 2^n \le 2c \cdot 2^{2n}

最后一个不等号用到 n0n \ge 02n22n2^n \le 2^{2n}。取 c0=2cc_0 = 2cn0=1n_0 = 1 即满足定义,故 f(n)O(22n)f(n) \in O(2^{2n})

注:该 f(n)f(n) 实际上属于 O(2n)O(2^n),本题要求的 O(22n)O(2^{2n}) 是一个较松的上界。

(4)

Throughout, log\log denotes the base-22 logarithm log2\log_2 (a change of base only alters the value by a constant factor, which does not affect the claim O(nlogn)O(n \log n)).

Claim: for every n1n \ge 1,

f(n)cn(1+log2n)f(n) \le c\, n \left(1 + \log_2 n\right)

We prove this by strong induction on nn.

Base case: For n=1n = 1, f(1)=cf(1) = c and the right-hand side is c1(1+0)=cc \cdot 1 \cdot (1 + 0) = c, so the claim holds.

Inductive step: Let n2n \ge 2 and assume the claim holds for all kk with 1k<n1 \le k < n. Put m=n/2m = \lfloor n/2 \rfloor. Since n2n \ge 2 we have 1mn/2<n1 \le m \le n/2 < n, so the induction hypothesis applies to mm.

Let h(t)=t(1+log2t)h(t) = t(1 + \log_2 t). For t1t \ge 1,

h(t)=1+log2t+1ln2>0h'(t) = 1 + \log_2 t + \frac{1}{\ln 2} > 0

so hh is increasing. From mn/2m \le n/2 and n/21n/2 \ge 1 we get h(m)h(n/2)h(m) \le h(n/2). Therefore

f(n)=2f(m)+cn2ch(m)+cn2ch(n/2)+cn=2cn2(1+log2n1)+cn=cnlog2n+cn=cn(1+log2n)\begin{aligned} f(n) &= 2f(m) + cn \\ &\le 2c\, h(m) + cn \\ &\le 2c\, h(n/2) + cn \\ &= 2c \cdot \frac{n}{2}\left(1 + \log_2 n - 1\right) + cn \\ &= c\, n \log_2 n + cn \\ &= c\, n \left(1 + \log_2 n\right) \end{aligned}

so the claim holds for nn.

Moreover, for n2n \ge 2 we have 1log2n1 \le \log_2 n, hence

f(n)cn(1+log2n)cn(log2n+log2n)=2cnlog2nf(n) \le c\, n \left(1 + \log_2 n\right) \le c\, n \left(\log_2 n + \log_2 n\right) = 2c\, n \log_2 n

Taking c0=2cc_0 = 2c and n0=2n_0 = 2 satisfies the definition, so f(n)O(nlogn)f(n) \in O(n \log n).

以下 log\log 均指以 22 为底的对数 log2\log_2(换底只相差常数倍,不影响 O(nlogn)O(n \log n) 这一结论)。

断言:对一切 n1n \ge 1

f(n)cn(1+log2n)f(n) \le c\, n \left(1 + \log_2 n\right)

nn 作强归纳法。

基例: n=1n = 1f(1)=cf(1) = c,右端为 c1(1+0)=cc \cdot 1 \cdot (1 + 0) = c,成立。

归纳步:n2n \ge 2,且断言对一切 1k<n1 \le k < n 成立。令 m=n/2m = \lfloor n/2 \rfloor。由 n2n \ge 21mn/2<n1 \le m \le n/2 < n,故归纳假设可用于 mm

h(t)=t(1+log2t)h(t) = t(1 + \log_2 t),当 t1t \ge 1

h(t)=1+log2t+1ln2>0h'(t) = 1 + \log_2 t + \frac{1}{\ln 2} > 0

hh 单调递增。由 mn/2m \le n/2n/21n/2 \ge 1h(m)h(n/2)h(m) \le h(n/2)。于是

f(n)=2f(m)+cn2ch(m)+cn2ch(n/2)+cn=2cn2(1+log2n1)+cn=cnlog2n+cn=cn(1+log2n)\begin{aligned} f(n) &= 2f(m) + cn \\ &\le 2c\, h(m) + cn \\ &\le 2c\, h(n/2) + cn \\ &= 2c \cdot \frac{n}{2}\left(1 + \log_2 n - 1\right) + cn \\ &= c\, n \log_2 n + cn \\ &= c\, n \left(1 + \log_2 n\right) \end{aligned}

nn 也成立。

又当 n2n \ge 21log2n1 \le \log_2 n,故

f(n)cn(1+log2n)cn(log2n+log2n)=2cnlog2nf(n) \le c\, n \left(1 + \log_2 n\right) \le c\, n \left(\log_2 n + \log_2 n\right) = 2c\, n \log_2 n

c0=2cc_0 = 2cn0=2n_0 = 2 即满足定义,故 f(n)O(nlogn)f(n) \in O(n \log n)