演算法設計與分析—基礎知識
前言
回顧我以往的部落格,曾想暢遊leetcode的題海,踏遍千山翻遍萬水以求有所進步,刷題到不到一半便因為碩士開題而中道崩殂;曾想成為一名Qt高手,想把Qt的官方文件翻譯成中文,卻在浩如煙海的官方文件中迷失自己,僅僅有幾篇孤零零的翻譯文稿,翻譯計劃最終被我拋棄;曾想要將閱讀的文獻進行總歸納結,最後寫成讀書筆記,執行了幾天之後因為寫部落格太過艱辛而逐漸的不了了之;曾經信誓旦旦要堅持學習英語,但是英語考試結束後這個計劃早已被我拋之腦後,那些所謂的雄心壯志和豪言壯語,在我貪玩懶惰的本性中逐漸煙消雲散。到頭來,發現很多事情都是虎頭蛇尾,從一而終的事情卻寥寥無幾。
我想我最大的問題是想的太多,做的太少,想學的東西太多太多,但是真正去下定決心鑽研努力少之又少,我的整個知識體系龐雜並且毫無章法。時至今日,我慢慢發現我不需要擅長很多東西,但是定下的學習目標就應該很好的完成它,我慢慢懂得了什麼叫有始有終,凡是我們下定決心去做的事情,值得我們去做的事情,都應該有始有終。
隨著歲月的更迭,課本會變得破舊不堪,逐漸被我所遺棄,寫下的學習卻筆記一直在那裡,歲月的長河奔流不息,縱使時過境遷,帶不走的,卻娟娟細流組成的知識海洋。
正文
計算機演算法在計算機專業中有這舉足輕重的地位,無論是找工作的面試還是在程式設計中都離不開計算機演算法設計,為了方便的對這些知識的進行復習回顧,在學習之餘,特寫下演算法設計與分析的部落格,這個小目標一定要堅持到底!
重要的數學概念和定義
- 漸進上界和漸進下界
設是定義域為自然數集上的函式.
(1) 若存在正數c和使得對於一切成立,則成的漸進的上界是,記作
(2)若存在正數c和使得對於一切成立,則成的漸進的下界是,記作
(3)若對於任意正數c都存在,使得當成立,則記作
(4)若對於任意正數c都存在,使得當成立,則記作
(5)若,則記作
上式中“小o記號”和“大O記號”的區別在於,漸進的屆中存在等於的可能性,即f(n)和g(n)可以是同一個函式, 我們表示f(n) = o(g(n)),那麼f(n) = O(g(n))也是成立的,但是反過來不一定成立。
- 判斷兩個高階低階或者同階的方法
判斷的階,首先計算兩函式相除的極限,設
1. 如果c是某個大於0的常數,那麼
2. 如果c=0,那麼
3. 如果c=,那麼
- 對數運算性質