数学预备知识
??????研究算法的目的就是以設計時間復雜度更小的算法,但要想對算法進行優化必須學會計算每一個步驟的算法大小,進而從中尋找可以縮減的位置。為了計算每一步,有必要掌握一些基本的數學知識,有句話說過:數學水平在一定程度上決定了計算機的高度。
??????對于大多數算法而言,都應用到了for/while循環。在循環不斷進行的過程中,每次運行循環體內基本操作的執行次數都是不同的。想要將每一次的結果相加,就相當于是不規則數的相加,也就是“求和”。同時,大多數算法使用遞歸方法,雖然遞歸有很多隱形的壞處,但是表達十分清晰,也常常被使用。給定遞歸式,尋找到所需總時間和輸入N的關系,也是十分重要的。對數學能力的要求也是非常高的。下面從上文提及的兩方面展開,分別談論所需要的一些數學知識。
2.1集合,關系和函數
?????? 集合是數學中基礎的概念,在集合之上定義了很多集合的操作(交,并,補)。以集合為基礎設計的算法也有很多,例如:并查集(克魯斯卡爾算法求解最小生成樹)等等。關系是以集合依據的,多說一個在集合上的關系。關系的內容也有很多,例如等價關系,傳遞關系等等。相對詳細的內容可以在離散數學中學到。函數可以理解成一種二元關系(x和y之間),一定是每一個x,有一個y與之對應,否則不可以被稱作函數。根據像和原像的關系,函數還可以被分為單射(所有x都有對應且對應不同的y),滿射(所有的y都具有原像),同時滿足單射和滿射的叫做雙射。
2.2證明
??????證明是算法中很常見的考察方法,例如課后題中就包括很多時間復雜度的證明。在學習算法之前,我們已經學習了離散數學。我認為離散數學的一個教學目標就是教如何使用符號做證明,使證明過程更清晰易懂。證明的方法大概可以分成五種:
??????1)直接證明法:從現有條件出發,使用定理或者公理,最終得出想要的結論。直接證明也有兩種方向,可以從條件證結論,也可以從結論證條件。要求過程中的每一個步驟都必須是充要條件。
??????2)間接證明法:證明原來命題的逆否命題成立。或者從中間出發,向兩頭延伸,最終得到條件和結論。
??????3)反證法:是一種常用的證明方法,當結論有明顯的一個方向的傾向時可以使用反證法。假設結論不成立,推導和條件之間的矛盾。
??????4) 反例證明法:反例證明法往往用于結論已經明確。舉出一個錯誤不滿足明確的關系,即可證明。大多數情況下,反例很難被列舉出來。
??????5)數學歸納法:數學歸納法常用于正確結論已經知道,但是需要詳細的過程進行推導。具有相對固定的模板,已知n=1時成立,假設n=k時成立,通過n=k式子的變形推導出n=k+1也同樣成立。
2.3對數
??????在算法分析中很多時間復雜度是和和㏒n有關的(在計算機中所有的對數函數的都是以2為底的),關于對數有計算公式如下:
2.4頂函數與底函數
??????在算法中常常會對整數做除以2的操作,但此時如果不知道整數的奇偶性,就會出現小數。為了進一步明確范圍,會使用頂函數和底函數。頂函數是大于等于x的最小整數,底函數是小于等于x的最大整數。
??????關于頂函數和底函數有以下重要等式:
2.5階乘和二項式系數
??????階乘來源于排列,表示第一個位置有多少種排法,進而第二個位置有多少種排法,依此類推。常用大寫P表示,階乘的時間復雜度是很高的,經常的表示公式為:
??????二項式系數來源于組合。組合即不考慮順序,是階乘的推廣。重要的是組合數公式:
2.6鴿巢原理
??????鴿巢定理講的是一定分配的必然性,比如十一只鴿子進入十個洞穴,必然至少有兩個鴿子在其中一個洞穴。從至多至少兩個角度,可得如下公式:
2.7和式
??????和式有以下公式:
??????當被加式子不再只取整數,而變成一個函數時,需要使用積分的知識求解。可以使用不等式來確定上下界,當左右兩式達到相同的數量級時,就證明了時間復雜度。
2.8遞推關系:
??????遞推關系用于計算遞歸函數的時間復雜度,分為以下幾類:
??????對于齊次和非齊次的定義是由如下式子決定的:
??????1)線性齊次遞推式(實例見書P53頁):
??????2)非齊次遞推關系(實例見書P55頁):
??????3)分治遞推關系:
??????在算法中,對很多大規模都會采用分治思想,將時間復雜度不斷細分再將更小規模整合,其中二分法是最常見的。
??????分治遞推關系主要有三種方法求解:
????????(1)展開遞推式(具體見書P57):
???????? 將遞推式不斷展開,直到某已知項,多為f(1)/f(0)。但展開遞推式存在若干缺點:有些情況下耗時,呆板,也容易出現計算錯誤。
????????(2)代入法(具體見書P59)
????????這種方法,通常用來證明上下界,也可證明精確解。需要猜想一個解,結合數學歸納法求出所設的參數值。對于猜想的解是依靠經驗或者之前學過的一些定理或者推論。
????????(3)更換變元(具體見書P62)
????????更換變元可以是用指數函數代替原來的分子分母式,盡力轉化成前面齊次的形式在進行求解。
總結
- 上一篇: linux 获取计算机IP地址、MAC、
- 下一篇: 二十二、标志寄存器与栈(代码设计安全,与