Skip to content

Commit 0edcbb5

Browse files
authored
style: enforce indent style (#13)
* style(ln1): fix lint warnings * style(indent): re-format with latexindent
1 parent 831b316 commit 0edcbb5

7 files changed

Lines changed: 379 additions & 379 deletions

book.tex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
\usepackage{listings}
99
\usepackage{interval}
1010

11-
\intervalconfig{
12-
soft open fences,
11+
\intervalconfig{%
12+
soft open fences,
1313
}
1414

1515
\def\figureautorefname{图}

src/Ln1-AsymptoticOrderGrowth.tex

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,73 @@
11
\chapter{算法渐进分析}
22

33
\begin{introduction}
4-
\item 渐进记号
5-
\item 渐进增长的性质
6-
\item 常见的渐进函数
4+
\item 渐进记号
5+
\item 渐进增长的性质
6+
\item 常见的渐进函数
77
\end{introduction}
88

99
\section{关于算法的计算效率}
1010
当我们在了解计算效率或者研究算法的复杂度时,我们主要集中于运行算法的时间效率
1111
--因为我们总是希望能够更快地运行算法。当然对于空间复杂度也是不能够忽略的,
1212
不过一下我们主要以算法的时间复杂度为载体,介绍算法的渐进分析,空间复杂度的分析
1313
可以进行类比。
14-
14+
1515
一个算法在规模为n的输入下,最坏情况运行时间增长率最多与某个函数$f(n)$成正比,
1616
函数$f(n)$因此就成为了我们算法运行时间的一个界限,下面将对此进行详细讨论。
17-
17+
1818
\section{\texorpdfstring{$O,\ \Omega,\ and\ \Theta $}{O, Ω, and θ}}
1919
在这里,我们希望寻找一种表达算法时间复杂或者是其他函数的方法,在这种方法中,常数系数和低次项
2020
对结果是没有影响的。比如 $1.62n^2+3.5n+2.3$ 增长的方式和 $n^2$ 一样。
2121

2222
\begin{figure}[h]
23-
\begin{minipage}[t]{1\linewidth}
24-
\centering
25-
\includegraphics[width=10cm,height=3.5cm]{image/asymptotic_analysis_1.png}
26-
\caption{$O,\ \Omega,\ and\ \Theta $}
27-
\end{minipage}
23+
\begin{minipage}[t]{1\linewidth}
24+
\centering
25+
\includegraphics[width=10cm,height=3.5cm]{image/asymptotic_analysis_1.png}
26+
\caption{$O,\ \Omega,\ and\ \Theta $}
27+
\end{minipage}
2828
\end{figure}
29-
29+
3030
\subsection{渐进上界 $O$}
31-
$f(n)$ 为算法在输入规模为n的情况下的运行时间(最坏情况),给定另一个函数 $g(n)$,当n充分大,
31+
$f(n)$ 为算法在输入规模为n的情况下的运行时间 (最坏情况),给定另一个函数 $g(n)$,当n充分大,
3232
函数 $f(n)$ 不会超过 $g(n)$ 的常数倍,就有 $f(n)=O(g(n))$。数学定义如下:
3333

34-
\begin{definition}{O ($\cdot$)}{def1}
35-
\[
36-
O(g(n))= \{f(n): \exists\ c,n_0\in R^+,such\ that: \forall n\ge n_0:0\le f(n)\le cg(n)\}
37-
\]
34+
\begin{definition}{O ($\cdot$)}{def1}
35+
\[
36+
O(g(n))= \{f(n): \exists\ c,n_0\in R^+,such\ that: \forall n\ge n_0:0\le f(n)\le cg(n)\}
37+
\]
3838
\end{definition}
39-
39+
4040

4141
举个例子作为说明,假设算法的运行时间有着$f(n)=pn^2+qn+r$的形式,其中p,q,r均为正常数,我们可以说
4242
任何具有这种形式的函数都是$O(n^2)$$pn^2+qn+r=O(n^2)$ ,证明如下:
4343
\begin{proof}
44-
\begin{align*}
45-
\forall n \geq 1,t&hen\ qn\leq qn^2,r\leq rn^2 \\
46-
\Longrightarrow f(n)&=pn^2+qn+r \\
47-
&\leq pn^2+pn^2+rn^2\\
48-
&=(p+q+r)n^2
49-
\end{align*}
44+
\begin{align*}
45+
\forall n \geq 1,t & hen\ qn\leq qn^2,r\leq rn^2 \\
46+
\Longrightarrow f(n) & =pn^2+qn+r \\
47+
& \leq pn^2+pn^2+rn^2 \\
48+
& =(p+q+r)n^2
49+
\end{align*}
5050
\end{proof}
5151
注意到$O(\cdot)$仅仅代表一个上界,并不代表函数准确的增长率,例如$pn^2+qn+r=O(n^3)$也是成立的
5252
但是它不是“最紧”的一个上界。
5353
\subsection{渐进下界\ $\Omega$}
5454
对于算法的渐进下界,我们同样可以对其进行说明:令$f(n)$为算法在输入规模为n的情况下的运行时间,给
5555
定另一个函数$g(n)$,如果对充分大的n,函数$f(n)$至少是函数$g(n)$的常数倍,就有$f(n)=\Omega(g(n))$
5656
\begin{definition}{$\Omega(\cdot)$}{def2}
57-
\[
58-
\Omega (g(n))= \{f(n): \exists\ c,n_0\in R^+,such\ that: \forall n\ge n_0:0\le cg(n)\le f(n)\}
59-
\]
57+
\[
58+
\Omega (g(n))= \{f(n): \exists\ c,n_0\in R^+,such\ that: \forall n\ge n_0:0\le cg(n)\le f(n)\}
59+
\]
6060
\end{definition}
6161

6262
继续使用 $f(n)=pn^2+qn+r$ 的例子,其中q 、p、 r 均为正常数,我们可以说具有任何这种形式的函数都是$\Omega(n)$
6363
证明如下:
6464
\begin{proof}
65-
\begin{align*}
66-
\forall n \geq 1,t&hen\ qn\leq 0,r\geq 0 \\
67-
\Longrightarrow f(n)&=pn^2+qn+r \\
68-
&\geq pn^2+pn^2+rn^2\\
69-
&=(p+q+r)n^2
70-
\end{align*}
65+
\begin{align*}
66+
\forall n \geq 1,t & hen\ qn\leq 0,r\geq 0 \\
67+
\Longrightarrow f(n) & =pn^2+qn+r \\
68+
& \geq pn^2+pn^2+rn^2 \\
69+
& =(p+q+r)n^2
70+
\end{align*}
7171
\end{proof}
7272

7373
$O(\cdot)$的情况,我们注意到$\Omega(\cdot)$仅仅代表一个下界,例如:$f(n)=pn^2+qn+r=\Omega(n)$也是成立的。
@@ -76,9 +76,9 @@ \subsection{渐进紧界$\Theta$}
7676
在上面知识的支持下,我们发现,对于同一个$f(n)$,其上下界,所对应的$g(n)$可能是相同的,即$f(n)=O(g(n))$并且$f(n)=\Omega(g(n))$
7777
,在这种情况下,我们可以说$f(n)=\Theta(g(n))$
7878
\begin{definition}{$\Theta(\cdot)$}{def3}
79-
\[
80-
\Theta(g(n)) = \{f(n): \exists\ c_1,c_2,n_0\in R^+,such\ that: \forall n\ge n_0:0\le c_1 g(n)\le f(n)\le c_2 g(n)\}
81-
\]
79+
\[
80+
\Theta(g(n)) = \{f(n): \exists\ c_1,c_2,n_0\in R^+,such\ that: \forall n\ge n_0:0\le c_1 g(n)\le f(n)\le c_2 g(n)\}
81+
\]
8282
\end{definition}
8383

8484
沿用刚才的例子,对于$f(n)=pn^2+qn+r$,我们可以说任何具有该
@@ -90,42 +90,42 @@ \subsection{渐进紧界$\Theta$}
9090
\\
9191
$f$$g$是两个函数,并且
9292
\[
93-
\lim_{n\rightarrow+\infty}\frac{f(n)}{g(n)} = c \ (c\ge 0)
93+
\lim_{n\rightarrow+\infty}\frac{f(n)}{g(n)} = c \ (c\ge 0)
9494
\]
9595
那么$f(n)=\Theta(g(n))$,关于该部分的证明,留给读者自行探索。
9696

9797

9898
\section{渐进增长的一些性质}
9999
下面将给出渐进增长的一些性质,对于性质的证明,可以自己证明,然后与\cite{textbook1}的P38-P40的证明进行对照
100100
\begin{theorem}{Transitivity}{}
101-
(a)\ If\ $f=O(h)$\ and\ $g=O(h)$, then $f=O(h)$\\
102-
(b)\ If\ $f=\Omega(h)$\ and\ $g=\Omega(h)$, then $f=\Omega(h)$\\
103-
(c)\ If\ $f=\Theta(h)$\ and\ $g=\Theta(h)$, then $f=\Theta(h)$
101+
(a)\ If\ $f=O(h)$\ and\ $g=O(h)$, then $f=O(h)$\\
102+
(b)\ If\ $f=\Omega(h)$\ and\ $g=\Omega(h)$, then $f=\Omega(h)$\\
103+
(c)\ If\ $f=\Theta(h)$\ and\ $g=\Theta(h)$, then $f=\Theta(h)$
104104
\end{theorem}
105105

106106
\begin{theorem}{Sum\ of\ Functions}{}
107-
假设$f$$g$是两个函数,若对某个其他的函数$h$,都有:$f=O(h),g=O(h)$\\
108-
那么,$f+g=O(h)$\\
109-
推广开来:令k是确定的常数,$f_1,f_2,f_3,\ldots,f_k$$h$是函数,且
110-
$f_i=O(h)$ \ \ $i\in (1,k)$,\\
111-
那么,$\sum^{k}_{i=1}f_i=O(h)$
107+
假设$f$$g$是两个函数,若对某个其他的函数$h$,都有:$f=O(h),g=O(h)$\\
108+
那么,$f+g=O(h)$\\
109+
推广开来:令k是确定的常数,$f_1,f_2,f_3,\ldots,f_k$$h$是函数,且
110+
$f_i=O(h)$ \ \ $i\in (1,k)$,\\
111+
那么,$\sum^{k}_{i=1}f_i=O(h)$
112112
\end{theorem}
113113

114-
\begin{theorem}{ }{}
115-
假设 $f$$g$ 是两个函数,(取非负值),使得 $g = O(f)$ \\
116-
那么 $f+g=\Theta(f)$
114+
\begin{theorem}{}{}
115+
假设 $f$$g$ 是两个函数, (取非负值),使得 $g = O(f)$ \\
116+
那么 $f+g=\Theta(f)$
117117
\end{theorem}
118118

119119
\section{常见的渐进函数}
120120
在一般的算法复杂度的分析中,我们常使用$O(\cdot)$进行渐进分析,其中常用的函数有以下几个:\\
121121
算数级复杂度:
122122
\[
123-
O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^2logn)<O(n^3)< \cdots
123+
O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^2logn)<O(n^3)< \cdots
124124
\]
125125

126126
指数级复杂度:
127127
\[
128-
O(2^n)<O(n!)<O(n^n)
128+
O(2^n)<O(n!)<O(n^n)
129129
\]
130130

131131
如要了解更多的标准记号和常用函数,可以参考~\cite{cormen2009introduction}

0 commit comments

Comments
 (0)