算法导论3-1

读书笔记

渐近记号用来刻画算法的运行时间,但是想要综合性的覆盖所有的输入,需要不同的渐近记号;

\(\theta\)记号,确定一个算法的渐近上界和渐近下界,具体定义如下:

\(\theta(g(n))\)=

{\(f(n)\): 存在正常量\(c_1\)\(c_2\)\(n_0\),使得对所有的\(n\geq{n_0}\),有\(0\leq{c_1g(n)}\leq{f(n)}\leq{c_2g(n)}\)}

此处\(f(n)\)代表该算法的准确运行时间,包含所有的低阶项、常量等细节;

\(\theta(g(n))\)代表最高项为\(g(n)\)的所有函数的集合;

这里函数\(f(n)\)被它的上界\(c_1g(n)\)和它的下界\(c_2g(n)\)夹裹,也就是对所有的\(n\geq{n_0}\),存在一个常数\(c\),使得\(cf(n)\)=\(g(n)\),则称\(g(n)\)\(f(n)\)的一个渐近紧确界

\(O\)记号,确定一个算法的渐近上界,具体定义如下:

\(O(g(n))\)={\(f(n)\): 存在正常量\(c\)\(n_0\),使得对所有\(n\geq{n_0}\),有\(0\leq{f(n)}\leq{cg(n)}\)};

一般用来描述最坏运行时间

\(\Omega\)记号,确定一个算法的渐近下界,具体定义如下:

\(\Omega(g(n))\)={\(f(n)\): 存在正常量\(c\)\(n_0\),使得对所有的\(n\geq{n_0}\),有\(0\leq{cg(n)}\leq{f(n)}\)};

一般用来描述最好运行时间

\(o\)记号,确定一个算法的非渐近紧确的上界,形式化定义如下:

\(o(g(n))\)={\(f(n)\): 对任意正常量\(c>0\),存在常量\(n_0>0\),使得所有的\(n\geq{n_0}\),有\(0\leq{f(n)}<{cg(n)}\)};

\(\omega\)记号,确定一个算法的非渐近紧确的下界,形式化定义如下:

\(\omega(g(n))\)={\(f(n)\): 存在正常量\(c>0\),存在常量\(n_0>0\),使得对所有的\(n\geq{n_0}\),有\(0\leq{cg(n)}<{f(n)}\)};

课后习题

3.1-1

假设\(f(n)\)\(g(n)\)都是渐近非负函数,使用\(\theta\)记号的基本定义证明\(max(f(n), g(n))=\theta(f(n)+g(n))\)

题目的意思是让我们证明:

存在正常量\(c_1\)\(c_2\)\(n_0\),使得对所有的\(n\geq{n_0}\),有\(0\leq{c_1({f(n)}+g(n))}\leq{max(f(n),g(n))}\leq{c_2({f(n)+g(n)}})\)

因为这两个函数都是非负的,所以不等式最左边显然成立;

此处令\(c_2=1\),就有\(max(f(n), g(n))\leq{(f(n)+g(n))}\)显然成立;

然后令\(c_1=\frac{1}{2}\),就有\(\frac{f(n)+g(n)}{2}\leq{max(f(n)+g(n))}\)显然成立;

证毕;

3.1-2

证明:对任意实常量\(a\)\(b\),其中\(b>0\),有

\((n+a)^b=\theta(n^b)\)

也就是让我们证明:

存在正常量\(c_1\)\(c_2\)\(n_0\),使得对所有的\(n\geq{n_0}\),有

\(0\leq{c_1n^b}\leq{(n+a)^b\leq{c_2n^b}}\)

对于所有\(n\geq{-a}\),不等式的最左边显然成立;

3.1-3

解释为什么“算法A的运行时间至少是\(O(n^2)\)”这一表述是无意义的。

这个问题的提问方式有问题,这里的无意义应该写成错误

这里的至少,指明了下界;但是\(O(n^2)\)又指明了上界,两者是冲突的,所以这一说法的错误的;

3.1-4

\(2^{n+1} = O(2^n)\)成立吗?\(2^{2n}=O(2^n)\)成立吗?

对于第一个等式成立;

因为有\(n>0\),使得\(0\leq{2^{n+1}}\leq{4*2^n}\)成立。

对于第二个等式不成立;

此处使用反证法,先假定\(2^{2n}=O(2^{n})\)成立,那么根据定义必有:

\[2^{2n} \leq c*2^{n} \]

成立,也就是要求\(2^n\leq{c}\),显然可知不等式不可能成立,所以\(2^{2n}=O(2^n)\)不成立。

3.1-5

证明定理3.1

定理3.1 的内容是

3.1-6

对于任意两个函数\(f(n)\)\(g(n)\),当且仅当\(f(n)=O(g(n))\)\(f(n)=\Omega(g(n))\)时,\(f(n)=\theta(g(n))\)成立;

事实上,上述定理是显然成立的,当一个函数的渐近上界和渐近下界都确定了,那它的渐近确界也就确定了。

3.1-7

证明: 一个算法的运行时间为\(\theta(g(n))\)当且仅当其最坏运行时间为\(O(g(n))\),且其最好运行时间为\(\Omega(g(n))\)

事实上,这和上一个问题是一致的,不在赘述。

3.1-8

证明: \(o(g(n))\bigcap\omega(g(n))\)为空集

根据定义有以下不等式成立:

\[\begin{aligned} & 0\leq{f(n)}<{cg(n)}, &o(g(n)) \\ &0\leq{cg(n)}<{f(n)}, &\omega(g(n)) \end{aligned} \]

推断有以下式子成立:

\[\begin{aligned} & g(n)>{\frac{f(n)}{c}}, & o(g(n)) \\ & g(n)<{\frac{f(n)}{c}}, & \omega(g(n)) \end{aligned} \]

上述不等式,显然不能同时成立,也就是这两个集合的交集为空集,证毕;

3.1-9

可以扩展我们的记号到有两个参数\(n\)\(m\)的情形,其中的\(n\)\(m\)可以按不同的速率独立地趋于无穷。对于给定的函数\(g(n, m)\),用\(O(g(n,m))\)来表示以下函数集:

\[\begin{aligned} & O(g(n,m))=\{f(n,m):存在正常量c,n_0和m_0,使得对所有n\geq{n_0},\\ & 或m\geq{m_0},有0\leq{f(n,m)}\leq{cg(n,m)}。 \end{aligned} \]

请给出\(\Omega(g(n,m))\)\(\theta(g(n,m))\)相应的定义。

\(\Omega(g(n,m))\)定义如下:

\[\begin{aligned} & \Omega(g(n,m))=\{f(n,m):存在正常量c,n_0和m_0,使得对所有n\geq{n_0},\\ & 或m\geq{m_0},有0\leq{cg(n,m)}\leq{f(n,m)}。 \end{aligned} \]

\(\theta(g(n,m))\)定义如下:

\[\begin{aligned} & \theta(g(n,m))=\{f(n,m):存在正常量c_1,c_2,n_0和m_0,使得对所有n\geq{n_0},\\ & 或m\geq{m_0},有c_1{g(n,m)}\leq{f(n,m)}\leq{c_2g(n,m)}。 \end{aligned} \]

posted @ 2021-01-14 18:04  ijkzen  阅读(287)  评论(0编辑  收藏  举报