【算法學習筆記四】數學基礎

一.集合、關係和函數

當分析算法時,我們認爲它的輸入是從某個特定範圍內(如整數集合)取出的一個集合。可以認爲算法是一個函數,它是一個受約束的關係,它映射每一個可能的輸入到一個特定的輸出,這樣,集合和函數就都處於算法分析的核心中。

集合用來指任何一批對象,它們成爲集合的成員或者元素。集合分爲有限集合和無限集合,如果一個無限集合的元素能被一個一個列舉出來,則稱之爲可數的,如整數集,否則不可數的,如實數集。

令A和B是兩個集合,A和B的笛卡爾積是所有有序對(a,b)的集合,a∈A,b∈B,笛卡爾積記爲AxB,用集合符號表示爲AxB={(a,b)|a∈A且b∈B}。

如果集合A上的關係R是自反的、對稱的和傳遞的,則稱它是等價的。

二.證明方法

1.直接證明

要證明“P\large \rightarrowQ”,可以先假設P是真的,然後P爲真推出Q真。

2.間接證明

蘊含式“P\large \rightarrowQ”邏輯等價於逆反命題“¬Q\large \rightarrow¬P”,有時,證明“如果非Q那麼非P”比直接證明原命題容易得多。

3.反證法

證明命題“P\large \rightarrowQ”爲真,先假定P爲真,但Q爲假,從而得到P爲假。

4.反例證明法

通常用來證明一個命題在很多時候是正確的,但並不永遠正確的情況。但面對一個需要證明其正確或錯誤的斷言時,可以從嘗試用反例來證明其不正確的開始。

5.數學歸納法

假設要證明某一性質P(n)對於\large n=n_0,n_0+1,n_0+2...爲真,它的正確性來自性質P(n-1)對於所有\large n > n_0爲真。首先證明該性質對於\large n_0成立,這稱爲基本步,然後證明只要這個性質對於\large n_0,n_0+1,n_0+2...n-1爲真,那麼必有對於n這個性質爲真,這稱爲歸納步,於是可得到結論,對於所有的n≥\large n_0的值,該性質都成立。

簡單來說,證明P(n)成立,先證明n=1時成立;當n≥2,假設P(n-1)成立是否可以推出P(n)成立,若能,則P(n)成立。(要注重推理的嚴謹性)。

有趣的小例子:證明所有的馬都是相同的顏色

1)n=1時,一匹馬本身顏色就和自己一樣,成立;

2)假設n=k時,命題成立,即k匹馬的顏色都相同,當n=k時,從馬羣中挑出k匹馬{1,2,...k},由假設可知k匹馬顏色一致,放回再取k匹馬{2,3,...k,k+1},由假設可知這k匹馬也顏色一致,兩個集合有共同的部分,則兩個集合的馬顏色一致,k+1匹馬顏色一致,得n=k+1時成立,原命題成立。

嚴謹性:其實這裏k在最開始就不成立,當k=1時,無法推出n=2成立,因爲此時得兩個集合爲{1}和{2},沒有交集,故不成立。

 三.基礎公式

1.對數

\large \centerline{ log_bxy=log_bx+log_by}

\large log_b(c^y)=ylog_bc

\large log_bx=\frac{log_ax}{log_ab},即\large (log_an=\Theta(log_bn))

\large x^{log_by}=y^{log_bx}

\large e=\lim_{n\rightarrow \infty }(1+\frac{1}{n})^n=1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+...

2.底函數和頂函數

令x是實數,用\large \left \lfloor x \right \rfloor來表示x得底函數,它被定義爲不超過x的最大整數;x的頂函數用\large \left \lceil x \right \rceil,它被定義爲大於等於x的最小整數。

\large \left \lceil x/2 \right \rceil+\left \lfloor x/2 \right \rfloor=x\large \left \lfloor -x \right \rfloor=-\left \lceil x \right \rceil\large \left \lceil -x \right \rceil=-\left \lfloor x \right \rfloor

定理:f(x)是單調遞增函數,使得若f(x)是整數,則x是整數,那麼\large \left \lfloor f(\left \lfloor x \right \rfloor) \right \rfloor=\left \lfloor f(x) \right \rfloor\large \left \lceil f(\left \lceil x \right \rceil) \right \rceil=\left \lceil f(x) \right \rceil

3.階乘

0!=1;如果n≥1,則n!=n(n-1)!;

對n!的一個有用的近似式是Stirling公式:\large n!\approx \sqrt{2\pi n}(\frac{n}{e})^n

\large log(n!)=\Theta(nlogn)

4.二項式係數

\large C_{n}^{k}=\frac{n!}{k!(n-k)!},記爲\large \binom{n}{k}

\large \binom{n}{k}=\binom{n}{n-k}\large \binom{n}{k}=\binom{n-1}{k}+\binom{n-1}{k-1} ,雙計數解釋見下圖;

設x爲正整數,那麼\large (1+x)^n=\sum_{j=0}^{n}\binom{n}{j}x^j

當x=1,有\large \binom{n}{0}+\binom{n}{1}+...\binom{n}{n}=2^n;當x=-1,有\large \sum_{j=0}^{n}\binom{n}{j}(-1)^j,\sum_{j\ even}^{n}=\sum_{j\ odd}^{n}

含義解釋
雙計數解釋

 5.鴿巢原理(抽屜原理)

如果把n個球分別放在m個盒子中,那麼:

1)存在一個盒子,必定至少裝\large \left \lceil n/m \right \rceil個球;

2)存在一個盒子,必定至少裝\large \left \lfloor n/m \right \rfloor個球。

舉例:

1)令G=(V,E)是一個連通的無向圖,有m個頂點,令p是G中訪問n>m個頂點的一條路徑,那麼p必定包含一條迴路;

2)求a/b的每一位小數結果,這裏a<b,且均爲正整數

    n <- 0
    while (a>0) and (n<b+1)
        輸出a/b
        a=(a%b)*10
        n <- n+1
    endwhile

輸入3/8依次輸出0,3,7,5;n<b+1的意義在於如果存在無限循環,在b+1步終止循環,因爲a%b可能值有0,1,2...b-1,最多做b+1次循環,則必出現重複的餘數。

6.和式

\large \sum_{j=1}^{n}a_{n-j}=\sum_{1\leq j\leq n}a_{n-j}

算術級數:\large \sum_{j=1}^{n}j=\frac{n(n+1)}{2}=\Theta(n^2),平方和:\large \sum_{j=1}^{n}j^2=\frac{n(n+1)(2n+1)}{6}=\Theta(n^3)

幾何級數:\large \sum_{j=0}^{n}c^j=\frac{c^{n+1}-1}{c-1}=\Theta(c^n),c\neq 1......(1);如果c=2,則有\large \sum_{j=0}^{n}2^j={2^{n+1}-1}=\Theta(2^n);如果c=1/2,則有\large \sum_{j=0}^{n}\frac{1}{2^j}=2-\frac{1}{2^n}< 2=\Theta(1);在(1)等式兩邊求導後再乘以c,得到\large \sum_{j=0}^{n}jc^j=\sum_{j=1}^{n}jc^j=\frac{nc^{n+2}-nc^{n+1}-c^{n+1}+c}{(c-1)^2}=\Theta(nc^n),c≠1;當|c|<1且和式是無限的,\large \sum_{j=0}^{\infty }c^j=\frac{1}{1-c}=\Theta(1)......(2);令上式中c=1/2,得到\large \sum_{j=0}^{n}j/2^j=\sum_{j=1}^{n}j/2^j=2-\frac{n+2}{2^n}=\Theta(1);對(2)兩邊求導再乘以c,得到\large \sum_{j=0}^{n}jc^j=\frac{c}{(c-1)^2}=\Theta(1),|c|<1。

 

求和的積分近似

如果f(x)是遞減的,那麼有\large \int_{m}^{n+1}f(x)dx\leq \sum_{j=m}^{n}f(j)\leq\int_{m-1}^{n}f(x)dx

如果f(x)是遞增的,那麼有\large \int_{m-1}^{n}f(x)dx\leq \sum_{j=m}^{n}f(j)\leq\int_{m}^{n+1}f(x)dx

求和式上下界舉例:

1)求\large j^k的上下界,k≥1,\large \int_{0}^{n}x^kdx\leq \sum_{j=1}^{n}j^k\leq\int_{1}^{n+1}x^kdx,即\large \frac{n^{k+1}}{k+1}\leq \sum_{j=1}^{n}j^k\leq \frac{(n+1)^{k+1}-1}{k+1},則可得\large \sum_{j=1}^{n}j^k=\Theta(n^{k+1}),k\geq 1

2)分部積分:\large \int u(x)v'(x)dx=u(x)v(x)-\int u'(x)v(x)dx;

求出級數\large logn!=\sum_{j=1}^{n}logj的上下界;求上界時,爲了方便結果與logn比較,防止出現log(n+1),把logn放出來,即\large \sum_{j=1}^{n}logj\ =\ logn+\sum_{j=1}^{n-1}logj\ \leq\ logn+\int_{1}^{n}logxdx\large \ =\ logn+xlogn|_{1}^{n}-\int_{1}^{n}xdlogx\large =logn+nlogn-nloge+loge;求下界時,\large \sum_{j=1}^{n}logj\ = \ \sum_{j=2}^{n}logj\geq \int_{1}^{n}logxdx\large =nlogn-nloge+loge。綜上可得,\large logn!=\Theta(nlogn)

7.遞推關係

遞歸公式是用它自身來定義的一個公式;

常係數線性齊次遞推式:\large f(n)=a_1f(n-1)+a_2f(n-2)+...+a_kf(n-k),則f(n)稱爲k次的。

線性齊次遞推式的求解:

1)一階線性齊次遞推關係式:\large f(n)=af(n-1)=a^2f(n-2)=...=a^nf(0)

2)二階線性齊次遞推關係式:\large f(n)=a_1f(n-1)+a_2f(n-2),其特徵方程爲\large x^2-a_1x-a_2=0,二次方程求根\large r_1,r_2,如果\large r_1\neq r_2,則遞推的解爲\large f(n)=c_1r_1^n+c_2r_2^n;如果\large r_1= r_2=r,則遞推的解爲\large f(n)=c_1r^n+c_2nr^n,c1,c2可根據初始條件求得。

非齊次遞推關係的解:

1)\large f(n)=f(n-1)+g(n)=f(0)+\sum_{i=1}^{n}g(n),n\geq 1

2)\large f(n)=g(n)f(n-1)=f(0)\prod_{i=1}^{n}g(i)

3)\large f(n)=g(n)f(n-1)+h(n),n\geq 1,令\large f(n)=g(n)g(n-1)...g(1)p(n),f(0)=p(0),代入得g(n)g(n-1)...g(1)p(n)=g(n)...g(1)p(n-1)p(n-1),化簡得\large p(n)=p(n-1)+\frac{h(n)}{g(n)...g(1)}\large =p(0)+\sum\frac{h(i)}{g(i)...g(1)},p(n)代回f(n)。

分治遞推關係的解:

一般形式:\large f(n)=\left\{\begin{matrix} d & n\leq n_0\\ a_1f(n/c_1)+a_2f(n/c_2)+...+a_kf(n/c_k)+g(n)& n>n_0 \end{matrix}\right.

1)展開遞推式

定理1:設b和d是非負常數,n是2的冪,\large f(n)=\left\{\begin{matrix} d & n=1\\ 2f(n/2)+bnlogn& n\geq 2 \end{matrix}\right.的解爲\large f(n)=\Theta(nlog^2n)

定理2:設a和c是非負整數,b,d,x是非負常數,並且對於某個非負整數k,令\large n=c^k,那麼\large f(n)=\left\{\begin{matrix} d & n=1\\ af(n/c)+bn^x& n\geq 2 \end{matrix}\right.的解是\large f(n)=\left\{\begin{matrix} \Theta(n^x) & a<c^x\\ \Theta(n^xlogn) & a=c^x \\ \Theta(n^{log_ca}) & a>c^x \end{matrix}\right.

2)代入法

定理1:設b,d爲非負常數,\large f(n)=\left\{\begin{matrix} d & n=1\\ f(\left \lfloor n/2 \right \rfloor)+ f(\left \lceil n/2 \right \rceil)+bn& n\geq 2 \end{matrix}\right.,則\large f(n)=\Theta(nlogn)

定理2:\large f(n)=\left\{\begin{matrix} 0 & n=0\\ b&n=1 \\ f(\left \lfloor c_1n \right \rfloor)+f(\left \lfloor c_2n \right \rfloor)+bn& n\geq 2 \end{matrix}\right.,的解是\large f(n)=\left\{\begin{matrix} O(nlogn) & c_1+c_2=1\\ \Theta(n)&c_1+c_2<1 \end{matrix}\right.

3)更換變元

8.主定理(Master Theorem)

設a≥1,b≥1爲常數,f(n)爲一函數,T(n)由遞歸式T(n)=aT(n/c)+f(n)定義,其中n/c指\large \left \lceil n/c \right \rceil或者\large \left \lfloor n/c \right \rfloor,可以證明,略去上下取整不會對結果造成影響,那麼可能有如下漸進界:

1)若\large f(n)<n^{log_ca},即\large \exists \varepsilon >0,f(n)=O(n^{log_ca-\varepsilon }),則\large T(n)=\Theta(n^{log_ca})

2)若\large f(n)=n^{log_ca},則\large T(n)=\Theta(n^{log_ca}logn)

3)若\large f(n)>n^{log_ca},即\large \exists \varepsilon >0,f(n)=\Omega (n^{log_ca+\varepsilon }),且對\large \forall k<1與所有足夠大的n,有\large af(n/c)\leq kf(n),則\large T(n)=\Theta(f(n))

舉例:

1)T(n)=9T(n/3)+n,其中a=9,c=3,f(n)=n,\large n^{log_ca}=n^2,當\large \varepsilon =1\large f(n)=O(n^{log_39-\varepsilon })=O(n),滿足上述定理1)則\large T(n)=\Theta(n^2)

2)T(n)=T(2n/3)+1,其中a=1,c=3,f(n)=1,\large n^{log_ca}=1,滿足上述定理2),則\large T(n)=\Theta(logn)

3)T(n)=3T(n/4)+nlogn,其中a=3,c=4,f(n)=nlogn,\large n^{log_ca}=n^{log_43}\approx O(n^{0.793}),當\large \varepsilon \approx 0.207時,\large f(n)=\Omega(n^{log_43+\varepsilon })=\Omega(n),可見滿足定理3)前一半條件滿足;af(n/c)=3(n/4)log(n/4)≤3/4nlogn,可知k=3/4<1,後半條件也滿足,則\large T(n)=\Theta(nlogn)

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章