跳到主要内容

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

Author

水月, 祭音Myyura, zephyr

Description

入力データサイズ nn に対して計算時間 T(n)T(n) を考える。 以下の再帰方程式 (1)~(3) それぞれについて T(n)T(n) の計算量を nn の式で表せ。 必要に応じて O()O() などのランダウ記法を用いてもよい。 ただし、T(0)=1T(0) = 1 とし、x\lfloor x \rfloorxx を超えない最大の整数を表す。

(1) T(n)=T(n1)+2nT(n) = T(n-1) + 2n

(2) T(n)=T(n/3)+1T(n) = T(\lfloor n/3 \rfloor) + 1

(3) T(n)=2T(n/2)+n+1T(n) = 2T(\lfloor n/2 \rfloor) + n + 1

以下の (4) の命題は成り立つか?最初に真偽を述べ、それが正しいことを証明せよ。

(4) T(n)O(2n)T(n) \in O(2^n)T(n)O(en)T(n) \in O(e^n) は同値である。

以下の (5) の再帰方程式が成り立つとき、T(n)T(n) の計算量を nn の式で表せ。ただし、aa は正の定数である。

(5) T(n)=aT(n/2)+nlog2nT(n) = aT(\lfloor n/2 \rfloor) + \lfloor n \log_2 n \rfloor


Let T(n)T(n) be the computation time in terms of the input size nn. For each of the recurrences (1)-(3) shown below, write the complexity of T(n)T(n) in terms of nn. You may use Landau notations such as O()O() if need be. Assume that T(0)=1T(0) = 1. Note that x\lfloor x \rfloor is the maximum integer that is not larger than xx.

(1) T(n)=T(n1)+2nT(n) = T(n - 1) + 2n (2) T(n)=T(n/3)+1T(n) = T(\lfloor n/3 \rfloor) + 1 (3) T(n)=2T(n/2)+n+1T(n) = 2T(\lfloor n/2 \rfloor) + n + 1

Does the following proposition (4) hold true? State true or false first and prove it.

(4) T(n)O(2n)T(n) \in O(2^n) if and only if T(n)O(en)T(n) \in O(e^n).

Given the following recurrence (5), write the complexity of T(n)T(n) in terms of nn. aa is a positive constant.

(5) T(n)=aT(n/2)+nlog2nT(n) = aT(\lfloor n/2 \rfloor) + \lfloor n \log_2 n \rfloor


T(n)T(n) 为输入大小 nn 的计算时间。对于下列递推关系(1)-(3),写出 T(n)T(n) 关于 nn 的复杂度。若有必要,可以使用朗道符号如 O()O()。假设 T(0)=1T(0) = 1。注意,x\lfloor x \rfloor 是小于等于 xx 的最大整数。

(1) T(n)=T(n1)+2nT(n) = T(n - 1) + 2n (2) T(n)=T(n/3)+1T(n) = T(\lfloor n/3 \rfloor) + 1 (3) T(n)=2T(n/2)+n+1T(n) = 2T(\lfloor n/2 \rfloor) + n + 1

以下命题(4)是否成立?首先陈述真伪并证明。

(4) T(n)O(2n)T(n) \in O(2^n) 当且仅当 T(n)O(en)T(n) \in O(e^n)

给定下列递推关系(5),写出 T(n)T(n) 关于 nn 的复杂度。aa 是一个正常数。

(5) T(n)=aT(n/2)+nlog2nT(n) = aT(\lfloor n/2 \rfloor) + \lfloor n \log_2 n \rfloor

题目描述

T(n)T(n) 为输入规模 nn 对应的运行时间,规定 T(0)=1T(0)=1,且 x\lfloor x\rfloor 表示不超过 xx 的最大整数。可按需使用大 OO 等 Landau 记号。

  1. 分别求下列递推的 T(n)T(n) 复杂度:
    (1)T(n)=T(n1)+2n,(2)T(n)=T(n/3)+1,(3)T(n)=2T(n/2)+n+1.\begin{aligned} \text{(1)}\quad&T(n)=T(n-1)+2n,\\ \text{(2)}\quad&T(n)=T(\lfloor n/3\rfloor)+1,\\ \text{(3)}\quad&T(n)=2T(\lfloor n/2\rfloor)+n+1. \end{aligned}
  2. 先判断下列命题真伪,再证明:
    T(n)O(2n)T(n)O(en).T(n)\in O(2^n)\quad\Longleftrightarrow\quad T(n)\in O(e^n).
  3. 对正常数 aa,求递推
    T(n)=aT(n/2)+nlog2nT(n)=aT(\lfloor n/2\rfloor)+\lfloor n\log_2n\rfloor
    的复杂度;应根据 aa 与分治临界值的关系处理必要的不同情形。

考点

  • 递推关系求解:用求和、递归展开和递归树分别处理逐一递减、按三分之一缩小及二分支递推。
  • 主定理:比较 aT(n/2)aT(n/2) 中的子问题总贡献与 nlognn\log n 的非递归工作,按参数 aa 给出分段渐近界。
  • 指数复杂度类比较:严格区分底数为 2 与 ee 的指数增长率,通过定义判断两个大 OO 集合是否等价。

Kai

Written by 水月.

(1)

T(n)=T(n1)+2n=2n+2(n1)+2(n2)++2=O(n2)\begin{aligned} T(n) &= T(n-1) + 2n \\ &=2n + 2(n-1) + 2(n-2) + \cdots + 2 \\ &= O(n^2) \end{aligned}

(2)

T(n)=T(n/3)+1=O(logn)\begin{aligned} T(n) &= T(\lfloor n/3 \rfloor) + 1 = O(\log n) \end{aligned}

(3)

Note that

T(n)n=T(n/2)n/2+1+1n\frac{T(n)}{n} = \frac{T(\lfloor n/2 \rfloor)}{n/2} + 1 + \frac{1}{n}

hence

T(2k)2k=T(1)+k+O(1)\frac{T(2^k)}{2^k} = T(1) + k + O(1)
T(2k)Θ(k2k)\therefore T(2^k) \in \Theta(k2^k)

that is

T(n)O(nlogn)T(n) \in O(n \log n)

(4)

The statement is False.

Counter example: T(n)=2.5nT(n) = 2.5^n.

(5)

See Generic form of Master Theorem

T(n)=O(nlog2n)if a<2T(n)=O(nlog22n)if a=2T(n)=O(nlog2a)if a>2\begin{aligned} &T(n) = O(n \log_2 n) &\text{if } a < 2 \\ &T(n) = O(n \log_2^2 n) &\text{if } a = 2 \\ &T(n) = O(n^{\log_2 a}) &\text{if } a > 2 \end{aligned}

Kai

Written by zephyr.

解题思路

这道题目主要涉及递归方程的复杂度分析和渐进符号的性质。我们需要运用主定理、迭代法等技巧来解决递归方程,并理解大 O 符号的性质来证明命题。对于最后一个问题,我们需要根据递归方程的形式来判断使用哪种方法求解。

1. T(n)=T(n1)+2nT(n) = T(n - 1) + 2n

To solve this recurrence, we can use the iteration method:

T(n)=T(n1)+2nT(n) = T(n-1) + 2n

=[T(n2)+2(n1)]+2n= [T(n-2) + 2(n-1)] + 2n

=[T(n3)+2(n2)]+2(n1)+2n= [T(n-3) + 2(n-2)] + 2(n-1) + 2n

== \cdots

=T(0)+2[1+2++(n1)+n]= T(0) + 2[1 + 2 + \cdots + (n-1) + n]

=1+2[n(n+1)2]= 1 + 2[\frac{n(n+1)}{2}]

=1+n(n+1)= 1 + n(n+1)

=n2+n+1= n^2 + n + 1

Therefore, T(n)=O(n2)T(n) = O(n^2).

2. T(n)=T(n/3)+1T(n) = T(\lfloor n/3 \rfloor) + 1

This recurrence fits the form of the Master Theorem with a=1a=1, b=3b=3, and f(n)=1f(n) = 1.

Since f(n)=O(nlog31ϵ)f(n) = O(n^{\log_3 1 - \epsilon}) for ϵ>0\epsilon > 0, we are in case 1 of the Master Theorem.

Therefore, T(n)=Θ(nlog31)=Θ(logn)T(n) = \Theta(n^{\log_3 1}) = \Theta(\log n).

3. T(n)=2T(n/2)+n+1T(n) = 2T(\lfloor n/2 \rfloor) + n + 1

This recurrence also fits the form of the Master Theorem with a=2a=2, b=2b=2, and f(n)=n+1f(n) = n + 1.

Since f(n)=Θ(nlog22)=Θ(n)f(n) = \Theta(n^{\log_2 2}) = \Theta(n), we are in case 2 of the Master Theorem.

Therefore, T(n)=Θ(nlogn)T(n) = \Theta(n \log n).

4. T(n)O(2n)T(n) \in O(2^n) if and only if T(n)O(en)T(n) \in O(e^n)

This proposition is false. Let's examine both directions:

Part 1: If T(n)O(2n)T(n) \in O(2^n), then T(n)O(en)T(n) \in O(e^n)

This direction is true.

Proof: Assume T(n)O(2n)T(n) \in O(2^n). By definition, c>0\exists c > 0 and n0>0n_0 > 0 such that T(n)c2nT(n) \leq c2^n for all nn0n \geq n_0.

We know that 2n=(eln2)n=enln22^n = (e^{\ln 2})^n = e^{n\ln 2}.

Since ln2<1\ln 2 < 1, we have enln2<ene^{n\ln 2} < e^n for all n>0n > 0.

Therefore, T(n)c2n=cenln2<cenT(n) \leq c2^n = ce^{n\ln 2} < ce^n for all nn0n \geq n_0.

This means T(n)O(en)T(n) \in O(e^n).

Part 2: If T(n)O(en)T(n) \in O(e^n), then T(n)O(2n)T(n) \in O(2^n)

This direction is false.

Consider the function T(n)=enO(en)T(n) = e^n \in O(e^n).

limnen2n=limn(e2)n=\lim_{n \to \infty} \frac{e^n}{2^n} = \lim_{n \to \infty} (\frac{e}{2})^n = \infty

This means that for any constant cc, there will always be some nn where en>c2ne^n > c2^n.

Therefore, the statement "if T(n)O(en)T(n) \in O(e^n), then T(n)O(2n)T(n) \in O(2^n)" is false.

Conclusion

The original proposition is false because while O(2n)O(en)O(2^n) \subset O(e^n), the reverse inclusion does not hold. There are functions in O(en)O(e^n) that grow faster than any function in O(2n)O(2^n).

A correct statement would be: If T(n)O(2n)T(n) \in O(2^n), then T(n)O(en)T(n) \in O(e^n), but the converse is not necessarily true.

5. T(n)=aT(n/2)+nlog2nT(n) = aT(\lfloor n/2 \rfloor) + \lfloor n \log_2 n \rfloor

Let's analyze this recurrence for different cases of aa. We'll ignore the floor functions for the asymptotic analysis as they don't affect the overall complexity.

Case 1: a<2a < 2

In this case, we can use a variant of the Master Theorem. We have:

T(n)=aT(n/2)+nlognT(n) = aT(n/2) + n\log n

Here, f(n)=nlognf(n) = n\log n. We need to compare nlog2an^{\log_2 a} with f(n)=nlognf(n) = n\log n.

Since a<2a < 2, we have nlog2a<nn^{\log_2 a} < n. Therefore, f(n)=nlognf(n) = n\log n is asymptotically larger.

Thus, T(n)=Θ(nlogn)T(n) = \Theta(n\log n) when a<2a < 2.

Case 2: a=2a = 2

When a=2a = 2, we have:

T(n)=2T(n/2)+nlognT(n) = 2T(n/2) + n\log n

This case doesn't fit directly into the Master Theorem. Let's solve it by substitution:

T(n)=2T(n/2)+nlognT(n) = 2T(n/2) + n\log n =2[2T(n/4)+(n/2)log(n/2)]+nlogn= 2[2T(n/4) + (n/2)\log(n/2)] + n\log n =4T(n/4)+nlog(n/2)+nlogn= 4T(n/4) + n\log(n/2) + n\log n =4T(n/4)+nlogn+nlognn= 4T(n/4) + n\log n + n\log n - n =4T(n/4)+2nlognn= 4T(n/4) + 2n\log n - n

Continuing this process, we get:

T(n)=nT(1)+nlogni=1logn2ni=1logn1T(n) = nT(1) + n\log n \sum_{i=1}^{\log n} 2 - n\sum_{i=1}^{\log n} 1 =nT(1)+2nlog2nnlogn= nT(1) + 2n\log^2 n - n\log n

Therefore, when a=2a = 2, T(n)=Θ(nlog2n)T(n) = \Theta(n\log^2 n).

Case 3: 2<a<42 < a < 4

In this case, we again compare nlog2an^{\log_2 a} with nlognn\log n.

Since 2<a<42 < a < 4, we have 1<log2a<21 < \log_2 a < 2.

This means n<nlog2a<n2n < n^{\log_2 a} < n^2, but nlognn\log n is asymptotically smaller than nlog2an^{\log_2 a}.

Therefore, when 2<a<42 < a < 4, T(n)=Θ(nlog2a)T(n) = \Theta(n^{\log_2 a}).

Case 4: a4a \geq 4

When a4a \geq 4, we have log2a2\log_2 a \geq 2.

In this case, nlog2an2n^{\log_2 a} \geq n^2, which is asymptotically larger than nlognn\log n.

Therefore, when a4a \geq 4, T(n)=Θ(nlog2a)T(n) = \Theta(n^{\log_2 a}).

Summary

  • For 0<a<20 < a < 2: T(n)=Θ(nlogn)T(n) = \Theta(n\log n)
  • For a=2a = 2: T(n)=Θ(nlog2n)T(n) = \Theta(n\log^2 n)
  • For a2a \geq 2: T(n)=Θ(nlog2a)T(n) = \Theta(n^{\log_2 a})

Knowledge

难点思路

第 4 小题的证明和第 5 小题的复杂度分析较为困难。对于第 4 小题,关键是理解指数函数的性质和大 O 符号的定义。对于第 5 小题,由于不能直接应用主定理,需要通过猜测和归纳证明的方法来解决。

解题技巧和信息

  1. 对于简单的递归方程,可以尝试使用迭代法直接求解。
  2. 对于符合形式的递归方程,优先考虑使用主定理。
  3. 当递归方程不能直接应用主定理时,可以尝试猜测复杂度并使用归纳法证明。
  4. 在处理渐进符号时,要注意指数函数、对数函数等的性质。

常见算法复杂度排序(从低到高):

O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(2n)<O(n!)O(1) < O(\log n) < O(n) < O(n \log n) < O(n^2) < O(2^n) < O(n!)

重点词汇

  • recurrence relation 递归关系
  • Master Theorem 主定理
  • iteration method 迭代法
  • induction proof 归纳证明
  • asymptotic notation 渐进符号
  • floor function 下取整函数

参考资料

  1. Introduction to Algorithms (CLRS), Chapter 4: Divide-and-Conquer
  2. Algorithm Design (Kleinberg & Tardos), Chapter 5: Divide and Conquer
  3. The Art of Computer Programming (Knuth), Volume 1: Fundamental Algorithms, Section 1.2.11: Asymptotic Representations