演算法緒論
演算法設計與分析主要的目的是讓我們學會怎麼設計高效的演算法,分析演算法的效能,並且兩者互動驗證。
什麼是互動驗證呢,就是在設計出演算法的同時,能夠分析出來演算法的效能。
演算法的由來
公元前300年,歐幾里得的輾轉相除法,算最大公約數。
演算法最早出自周髀算經中,隨著演進,在魏晉時期的九章算術的割圓術。
唐高宗時,總結出《算經十書》。
等等等等......隨著演進,一直到圖靈計算機的出現,是演算法與計算機的結合。
演算法的定義
生活中的演算法,就像撲克牌的順序,就是一種排序。
演算法定義:
- 給定資料輸入,計算滿足某種性質輸出的問題
- 給定計算問題,演算法是一系列定義的計算步驟注意執行計算步驟,得出結果。
插入排序
將陣列待排序元素依次插入到已排序的部分,使已排序的部分保持升序的性質
演算法例項:
一組待排序,將24為已排序的部分,17跟24比較,17<24,將17往前提取。
然後一直迴圈,逐一插入,從而使資料規範化。
選擇排序
簡單來說,就是雙指標,第一個指標指向的是順序,第二個指標尋找最小的值,然後與第一個指標所指的值進行比較。
演算法的性質
-
有窮性
- 演算法必須在有限個步驟後終止
-
確定性
- 演算法必須沒有歧義,不能含糊不清
-
可行性
- 可機械的一步一步執行基本操作步驟
演算法的表示
自然語言
優勢:貼近人類思維
機器語言
優勢:精確表達邏輯,避免歧義。
劣勢:不同程式語言,有差異。
虛擬碼
是一種更貼近自然語言,並且移植了程式語言的語法結構。
例如:
演算法的分析
如何比較不同演算法的效能呢,常言道:“快者為優,小者為勝。”演算法的效能主要是從兩個方面進行比較,一個是時間複雜度,一個是空間複雜度
演算法分析的原則
由於計算機效能也會影響演算法的執行速度,所以,統一機器效能後,演算法執行時間便會依賴於演算法的規模,同時,輸入的情況也影響演算法的時間。
在進行比較時,最好情況不具有普遍性,最壞情況確定上界,更具一般性。
一般情況分析複雜,分析難度大,所以分析時,要統一機器效能,同時分析最壞的情況,這時,輸入規模T(n)是影響最大的。
演算法分析工具
由於正常分析規模大,所以引進漸進分析。
漸進分析:
引入漸進分析後,我們在分析演算法的時間複雜度時,只關注最高階便可。
同時,漸進分為漸近上界,漸進下界,漸進緊確界。
演算法分析例項
漸近上界是該曲線的最大值,也就是最壞情況下我們的取值。
一般用漸進上界來確定時間複雜度。