東京大学 新領域創成科学研究科 メディカル情報生命専攻 2014年8月実施 問題7
Author
zephyr , 祭音Myyura
Description
When we analyze the worst time complexity of an algorithm, it is worth observing how the computation time T ( n ) T(n) T ( n ) increases as n n n ( 1 < n ) (1 < n) ( 1 < n ) , the size of input data, increases. The Landau’s O O O notation, which is often used for representing an asymptotic upper bound of T ( n ) T(n) T ( n ) ignoring the constant factor, is defined as the following. For a positive function f ( n ) f(n) f ( n ) , if there exists a positive constant c c c , and
lim n → ∞ T ( n ) f ( n ) < c \lim_{{n \to \infty}} \frac{T(n)}{f(n)} < c n → ∞ lim f ( n ) T ( n ) < c
holds, then
T ( n ) ∈ O ( f ( n ) ) T(n) \in O(f(n)) T ( n ) ∈ O ( f ( n ))
is defined to hold.
(1) O ( f ( n ) ) O(f(n)) O ( f ( n )) and O ( g ( n ) ) O(g(n)) O ( g ( n )) are defined to be equal if T ( n ) ∈ O ( f ( n ) ) T(n) \in O(f(n)) T ( n ) ∈ O ( f ( n )) and T ( n ) ∈ O ( g ( n ) ) T(n) \in O(g(n)) T ( n ) ∈ O ( g ( n )) are equivalent for any T ( n ) T(n) T ( n ) . For each of (A) to (C), find all formulae in the box below that are equal to it. If there is no such formula, just write "none".
(A) O ( n 3 ) O(n^3) O ( n 3 )
(B) O ( n log n ) O(n \log n) O ( n log n )
(C) O ( n ! ) O(n!) O ( n !)
O ( 1 ) , O ( n + 1 ) , O ( n 2 + n + 1 ) , O ( n 3 + n 2 + n + 1 ) , O ( n 4 + n 3 ) , O ( log n ) , O ( log e n 2 ) , O ( ( log e n ) n ) , O ( 2 n log 2 n ) , O ( e n ) , O ( ( n e ) n ) , O ( 2 n ) , O ( n n ) \begin{array}{cccc}
O(1), & O(n + 1), & O(n^2 + n + 1), & O(n^3 + n^2 + n + 1), \\
O(n^4 + n^3), & O(\log n), & O(\log_e n^2), & O((\log_e n)^n), \\
O(2n \log_2 n), & O(e^n), & O \left( \left( \frac{n}{e} \right)^n \right), & O(2^n), \\
O(n^n)
\end{array} O ( 1 ) , O ( n 4 + n 3 ) , O ( 2 n log 2 n ) , O ( n n ) O ( n + 1 ) , O ( log n ) , O ( e n ) , O ( n 2 + n + 1 ) , O ( log e n 2 ) , O ( ( e n ) n ) , O ( n 3 + n 2 + n + 1 ) , O (( log e n ) n ) , O ( 2 n ) ,
(2) For each proposition below, determine with proof whether it holds or not. Note that f ( n ) f(n) f ( n ) and g ( n ) g(n) g ( n ) are positive functions.
(A) O ( f ( n ) + g ( n ) ) O(f(n) + g(n)) O ( f ( n ) + g ( n )) and O ( max ( f ( n ) , g ( n ) ) ) O(\max(f(n), g(n))) O ( max ( f ( n ) , g ( n ))) are equal.
(B) If f ( n ) ∈ O ( g ( n ) ) f(n) \in O(g(n)) f ( n ) ∈ O ( g ( n )) holds, then e f ( n ) ∈ O ( e g ( n ) ) e^{f(n)} \in O(e^{g(n)}) e f ( n ) ∈ O ( e g ( n ) ) .
当我们分析一个算法的最坏时间复杂度时,观察计算时间 T ( n ) T(n) T ( n ) 随输入数据大小 n n n ( 1 < n ) (1 < n) ( 1 < n ) 的增加而增加是很有价值的。Landau 的 O O O 表示法,通常用于表示忽略常数因子的 T ( n ) T(n) T ( n ) 的渐近上界,定义如下。对于一个正函数 f ( n ) f(n) f ( n ) ,如果存在一个正常数 c c c ,且
lim n → ∞ T ( n ) f ( n ) < c \lim_{{n \to \infty}} \frac{T(n)}{f(n)} < c n → ∞ lim f ( n ) T ( n ) < c
成立,则定义
T ( n ) ∈ O ( f ( n ) ) T(n) \in O(f(n)) T ( n ) ∈ O ( f ( n ))
成立。
(1) 如果 T ( n ) ∈ O ( f ( n ) ) T(n) \in O(f(n)) T ( n ) ∈ O ( f ( n )) 和 T ( n ) ∈ O ( g ( n ) ) T(n) \in O(g(n)) T ( n ) ∈ O ( g ( n )) 对任何 T ( n ) T(n) T ( n ) 都等价,则定义 O ( f ( n ) ) O(f(n)) O ( f ( n )) 和 O ( g ( n ) ) O(g(n)) O ( g ( n )) 是相等的。对于 (A) 到 (C) 的每一个,找到下面框中等于它的所有公式。如果没有这样的公式,只写“none”。
(A) O ( n 3 ) O(n^3) O ( n 3 )
(B) O ( n log n ) O(n \log n) O ( n log n )
(C) O ( n ! ) O(n!) O ( n !)
O ( 1 ) , O ( n + 1 ) , O ( n 2 + n + 1 ) , O ( n 3 + n 2 + n + 1 ) , O ( n 4 + n 3 ) , O ( log n ) , O ( log e n 2 ) , O ( ( log e n ) n ) , O ( 2 n log 2 n ) , O ( e n ) , O ( ( n e ) n ) , O ( 2 n ) , O ( n n ) \begin{array}{cccc}
O(1), & O(n + 1), & O(n^2 + n + 1), & O(n^3 + n^2 + n + 1), \\
O(n^4 + n^3), & O(\log n), & O(\log_e n^2), & O((\log_e n)^n), \\
O(2n \log_2 n), & O(e^n), & O \left( \left( \frac{n}{e} \right)^n \right), & O(2^n), \\
O(n^n)
\end{array} O ( 1 ) , O ( n 4 + n 3 ) , O ( 2 n log 2 n ) , O ( n n ) O ( n + 1 ) , O ( log n ) , O ( e n ) , O ( n 2 + n + 1 ) , O ( log e n 2 ) , O ( ( e n ) n ) , O ( n 3 + n 2 + n + 1 ) , O (( log e n ) n ) , O ( 2 n ) ,
(2) 对于下面的每个命题,确定是否成立,并提供证明。注意 f ( n ) f(n) f ( n ) 和 g ( n ) g(n) g ( n ) 是正函数。
(A) O ( f ( n ) + g ( n ) ) O(f(n) + g(n)) O ( f ( n ) + g ( n )) 和 O ( max ( f ( n ) , g ( n ) ) ) O(\max(f(n), g(n))) O ( max ( f ( n ) , g ( n ))) 是相等的。
(B) 如果 f ( n ) ∈ O ( g ( n ) ) f(n) \in O(g(n)) f ( n ) ∈ O ( g ( n )) 成立,则 e f ( n ) ∈ O ( e g ( n ) ) e^{f(n)} \in O(e^{g(n)}) e f ( n ) ∈ O ( e g ( n ) ) 。
题目描述
设输入规模为 n > 1 n>1 n > 1 ,算法最坏运行时间为 T ( n ) T(n) T ( n ) 。对正函数 f ( n ) f(n) f ( n ) ,若存在正常数 c c c 使
lim n → ∞ T ( n ) f ( n ) < c , \lim_{n\to\infty}\frac{T(n)}{f(n)}<c, n → ∞ lim f ( n ) T ( n ) < c ,
则记作 T ( n ) ∈ O ( f ( n ) ) T(n)\in O(f(n)) T ( n ) ∈ O ( f ( n )) 。若对任意 T ( n ) T(n) T ( n ) ,命题 T ( n ) ∈ O ( f ( n ) ) T(n)\in O(f(n)) T ( n ) ∈ O ( f ( n )) 与 T ( n ) ∈ O ( g ( n ) ) T(n)\in O(g(n)) T ( n ) ∈ O ( g ( n )) 等价,则称 O ( f ( n ) ) O(f(n)) O ( f ( n )) 与 O ( g ( n ) ) O(g(n)) O ( g ( n )) 相等。完成下列问题:
分别为 (A) O ( n 3 ) O(n^3) O ( n 3 ) 、(B) O ( n log n ) O(n\log n) O ( n log n ) 、(C) O ( n ! ) O(n!) O ( n !) ,从下列候选式中选出所有与之相等的式子;若没有则写 “none”:
O ( 1 ) , O ( n + 1 ) , O ( n 2 + n + 1 ) , O ( n 3 + n 2 + n + 1 ) , O ( n 4 + n 3 ) , O ( log n ) , O ( log e n 2 ) , O ( ( log e n ) n ) , O ( 2 n log 2 n ) , O ( e n ) , O ( ( n e ) n ) , O ( 2 n ) , O ( n n ) . \begin{array}{cccc}
O(1), & O(n+1), & O(n^2+n+1), & O(n^3+n^2+n+1),\\
O(n^4+n^3), & O(\log n), & O(\log_e n^2), & O((\log_e n)^n),\\
O(2n\log_2 n), & O(e^n), & O\!\left(\left(\frac ne\right)^n\right), & O(2^n),\\
O(n^n).
\end{array} O ( 1 ) , O ( n 4 + n 3 ) , O ( 2 n log 2 n ) , O ( n n ) . O ( n + 1 ) , O ( log n ) , O ( e n ) , O ( n 2 + n + 1 ) , O ( log e n 2 ) , O ( ( e n ) n ) , O ( n 3 + n 2 + n + 1 ) , O (( log e n ) n ) , O ( 2 n ) ,
对下列两个命题分别判断真伪并证明,其中 f ( n ) , g ( n ) f(n),g(n) f ( n ) , g ( n ) 均为正函数:
O ( f ( n ) + g ( n ) ) = O ( max ( f ( n ) , g ( n ) ) ) O(f(n)+g(n))=O(\max(f(n),g(n))) O ( f ( n ) + g ( n )) = O ( max ( f ( n ) , g ( n ))) ;
若 f ( n ) ∈ O ( g ( n ) ) f(n)\in O(g(n)) f ( n ) ∈ O ( g ( n )) ,则 e f ( n ) ∈ O ( e g ( n ) ) e^{f(n)}\in O(e^{g(n)}) e f ( n ) ∈ O ( e g ( n ) ) 。
Kai
(1)
(A) O ( n 3 ) O(n^3) O ( n 3 )
O ( n 3 + n 2 + n + 1 ) O(n^3 + n^2 + n + 1) O ( n 3 + n 2 + n + 1 )
According to the definition of Big-O notation, the highest order term dominates the growth rate. Therefore, O ( n 3 + n 2 + n + 1 ) O(n^3 + n^2 + n + 1) O ( n 3 + n 2 + n + 1 ) and O ( n 3 ) O(n^3) O ( n 3 ) are equivalent.
(B) O ( n log n ) O(n \log n) O ( n log n )
O ( 2 n log 2 n ) O(2n \log_2 n) O ( 2 n log 2 n )
In Big-O notation, constant factors and the base of logarithms are ignored, so O ( 2 n log 2 n ) O(2n \log_2 n) O ( 2 n log 2 n ) is equivalent to O ( n log n ) O(n \log n) O ( n log n ) .
(C) O ( n ! ) O(n!) O ( n !)
None
All other functions in the box grow either slower or faster than n ! n! n ! . In particular, Stirling’s formula gives n ! / ( n / e ) n ∼ 2 π n → ∞ n!/(n/e)^n\sim\sqrt{2\pi n}\to\infty n ! / ( n / e ) n ∼ 2 πn → ∞ , so O ( ( n / e ) n ) O((n/e)^n) O (( n / e ) n ) is not equal to O ( n ! ) O(n!) O ( n !) .
(2)
(A)
With the stated definition requiring an ordinary limit, the proposition is false. For integer n > 1 n>1 n > 1 , take
f ( n ) = n , g ( n ) = n ( 2 + ( − 1 ) n ) , T ( n ) = f ( n ) + g ( n ) . f(n)=n,\qquad g(n)=n\bigl(2+(-1)^n\bigr),\qquad T(n)=f(n)+g(n). f ( n ) = n , g ( n ) = n ( 2 + ( − 1 ) n ) , T ( n ) = f ( n ) + g ( n ) .
Both f f f and g g g are positive and T ( n ) / ( f ( n ) + g ( n ) ) = 1 T(n)/(f(n)+g(n))=1 T ( n ) / ( f ( n ) + g ( n )) = 1 . However,
T ( n ) max ( f ( n ) , g ( n ) ) = { 4 / 3 , n even , 2 , n odd , \frac{T(n)}{\max(f(n),g(n))}
=\begin{cases}4/3,&n\text{ even},\\2,&n\text{ odd},\end{cases} max ( f ( n ) , g ( n )) T ( n ) = { 4/3 , 2 , n even , n odd ,
has no limit. Thus the two classes defined using that limit are not equal.
Under the usual Big-O definition by an eventual upper bound, the proposition is true, because
max ( f , g ) ≤ f + g ≤ 2 max ( f , g ) . \max(f,g)\le f+g\le2\max(f,g). max ( f , g ) ≤ f + g ≤ 2 max ( f , g ) .
These inequalities imply that T / ( f + g ) T/(f+g) T / ( f + g ) is eventually bounded if and only if T / max ( f , g ) T/\max(f,g) T / max ( f , g ) is eventually bounded.
(B)
The proposition is false. Take f ( n ) = 2 n f(n)=2n f ( n ) = 2 n and g ( n ) = n g(n)=n g ( n ) = n . Then
f ( n ) g ( n ) = 2 , e f ( n ) e g ( n ) = e n ⟶ ∞ . \frac{f(n)}{g(n)}=2,
\qquad
\frac{e^{f(n)}}{e^{g(n)}}=e^n\longrightarrow\infty. g ( n ) f ( n ) = 2 , e g ( n ) e f ( n ) = e n ⟶ ∞.
Hence f ∈ O ( g ) f\in O(g) f ∈ O ( g ) but e f ∉ O ( e g ) e^f\notin O(e^g) e f ∈ / O ( e g ) .
Knowledge
时间复杂度
When analyzing time complexity, focus on the highest order term.
In Big-O notation, different bases of logarithms are considered equivalent.
For combined functions (such as f ( n ) + g ( n ) f(n) + g(n) f ( n ) + g ( n ) ), the complexity can be simplified by analyzing the dominant term.
Key Vocabulary
asymptotic 渐近的
upper bound 上界
equivalent 等价的
exponential 指数的
limit 极限
References
"Introduction to Algorithms" Chapter 3: Growth of Functions
"Mathematical Foundations of Computer Science" Chapter 5: Asymptotic Notation
Reference