算法基礎--《大話數據結構》

算法的定義

算法是解決特定問題求解步驟的描述,在計算機中表現爲指令的有限序列,並且每條指令表示一個或多個操作。

算法的基本特性

  1. 輸入輸出: 算法具有零個或多個輸入,一個或多個輸出;
  2. 有窮性: 算法在執行有限的步驟之後,自動結束而不會出現無限循環,並且每一個步驟在可接受時間內完成;
  3. 確定性: 算法的每一步驟都具有確定的含義,不會出現二義性。在一定條件下,只有一條執行路徑,相同的輸入只能有唯一的輸出結果;
  4. 可行性: 算法的每一步都必須是可行的,也就是說,每一步都能夠通過執行有限次數完成。

算法的設計要求

  1. 正確性: 算法至少應該具有輸入、加工處理、輸出無歧義性的特點,能正確反映問題的需求,並得到問題的正確答案。按要求從低至高,大體分爲以下四個層次:
    ① 沒有語法錯誤;
    ② 對於合法的輸入,能產生正確的輸出;
    ③ 對於非法的輸入,能得出滿足規範說明的輸出;
    ④ 對於刁難的測試數據,能得出滿足要求的輸出。
  2. 可讀性: 算法應該便於閱讀、理解和交流;
  3. 健壯性: 當輸入不合法時,算法也能做出相關處理,而不是產生異常或莫名其妙的結果;
  4. 時間效率高和存儲量低: 對於同一個問題,算法的執行時間儘可能短,運行時所佔用的內存或外部硬盤空間儘可能少。

算法效率的影響因素

一個由高級程序語言編寫的程序在運行時所消耗的時間,取決於以下因素:

  1. 算法採用的策略、方法;
  2. 編譯產生的代碼質量(依靠編譯器的支持);
  3. 問題的輸入規模;
  4. 機器執行指令的速度(由硬件性能決定)。

因此,程序本身對算法效率的影響,主要依賴於其策略、方法的好壞問題的輸入規模(輸入量的多少)

算法效率的度量方法

  1. 事後統計方法: 通過設計好的測試程序和數據,利用計算機計時器對不同算法編制的程序的運行時間進行比較,從而確定算法效率的高低;
  2. 事前分析估算方法: 在計算機程序編制前,依據統計方法對算法進行估算。

算法效率的指標

  1. 時間複雜度: 隨着問題輸入規模n的增大,算法語句總執行次數T(n) 的增長規率,將會漸漸趨近於某一個與n相關的函數——f(n) 。此f(n),便被稱作算法的漸進時間複雜度,簡稱時間複雜度。(日常使用中,一般指最壞時間複雜度)
  2. 空間複雜度: 算法在計算機執行時,所需的總輔助空間大小,如:存儲指令、常量、變量、對數據操作的存儲單元等,相對於輸入數據量n而言,將會漸漸趨近於一個函數——g(n) 。此g(n),便被稱作空間複雜度

算法時間複雜度的計算

時間複雜度通常用大寫O()作爲記法,稱之爲大O記法

  1. 用常數1取代運行時間中所有的加法常數;
  2. 在修改後的運行次數函數中,只保留最高階項;
  3. 如果最高階項存在且不是一,則去除與該項相乘的常數,得出的結果即爲大O階,也就是時間複雜度。

常見的時間複雜度如下:
常見的時間複雜度

發佈了6 篇原創文章 · 獲贊 0 · 訪問量 279
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章