演算法設計與分析---論序

喝茶謝謝發表於2022-03-15

演算法緒論

演算法設計與分析主要的目的是讓我們學會怎麼設計高效的演算法,分析演算法的效能,並且兩者互動驗證。
什麼是互動驗證呢,就是在設計出演算法的同時,能夠分析出來演算法的效能。

演算法的由來

公元前300年,歐幾里得的輾轉相除法,算最大公約數。
演算法最早出自周髀算經中,隨著演進,在魏晉時期的九章算術的割圓術。
唐高宗時,總結出《算經十書》。
等等等等......隨著演進,一直到圖靈計算機的出現,是演算法與計算機的結合。

演算法的定義

生活中的演算法,就像撲克牌的順序,就是一種排序。

演算法定義:

  • 給定資料輸入,計算滿足某種性質輸出的問題
  • 給定計算問題,演算法是一系列定義的計算步驟注意執行計算步驟,得出結果。

插入排序

將陣列待排序元素依次插入到已排序的部分,使已排序的部分保持升序的性質

演算法例項:

在這裡插入圖片描述

一組待排序,將24為已排序的部分,17跟24比較,17<24,將17往前提取。

在這裡插入圖片描述

然後一直迴圈,逐一插入,從而使資料規範化。

在這裡插入圖片描述

選擇排序

在這裡插入圖片描述

簡單來說,就是雙指標,第一個指標指向的是順序,第二個指標尋找最小的值,然後與第一個指標所指的值進行比較。

演算法的性質

  1. 有窮性

    • 演算法必須在有限個步驟後終止
  2. 確定性

    • 演算法必須沒有歧義,不能含糊不清
  3. 可行性

    • 可機械的一步一步執行基本操作步驟

演算法的表示

自然語言

優勢:貼近人類思維

機器語言

優勢:精確表達邏輯,避免歧義。
劣勢:不同程式語言,有差異。

虛擬碼

是一種更貼近自然語言,並且移植了程式語言的語法結構。
例如:
在這裡插入圖片描述

演算法的分析

如何比較不同演算法的效能呢,常言道:“快者為優,小者為勝。”演算法的效能主要是從兩個方面進行比較,一個是時間複雜度,一個是空間複雜度

演算法分析的原則

由於計算機效能也會影響演算法的執行速度,所以,統一機器效能後,演算法執行時間便會依賴於演算法的規模,同時,輸入的情況也影響演算法的時間。

在進行比較時,最好情況不具有普遍性,最壞情況確定上界,更具一般性。

一般情況分析複雜,分析難度大,所以分析時,要統一機器效能,同時分析最壞的情況,這時,輸入規模T(n)是影響最大的。

演算法分析工具

由於正常分析規模大,所以引進漸進分析。

漸進分析:
在這裡插入圖片描述

引入漸進分析後,我們在分析演算法的時間複雜度時,只關注最高階便可。

同時,漸進分為漸近上界,漸進下界,漸進緊確界。

演算法分析例項

在這裡插入圖片描述

在這裡插入圖片描述

漸近上界是該曲線的最大值,也就是最壞情況下我們的取值。

在這裡插入圖片描述

一般用漸進上界來確定時間複雜度。

相關文章