1. 程式人生 > 其它 >(一)資料結構與演算法基礎

(一)資料結構與演算法基礎

(1)資料結構的基本概念

資料結構是指相互有關聯的資料元素的集合,資料結構研究的三個方面:(也稱為:資料結構的三要素)

①資料集合中各資料元素之間所固有的邏輯關係,即資料的邏輯結構

  • 資料的邏輯結構包含:
    • 表示資料元素的資訊;
    • 表示各資料元素之間的前後件關係

②在對資料進行處理時,各資料元素在計算機中的儲存關係,即資料的儲存結構

  • 資料的儲存結構有順序、連結、索引等

③對各種資料結構進行的運算

(2)線性/非線性資料結構

根據資料結構各元素前後之間關係的複雜程度,將資料結構分為兩類:

  • 線性資料結構(也稱線性表)

    • 滿足條件一:有且只有一個根結點;
    • 滿足條件二:每個結點最多有一個前驅,也最多有一個後繼。
  • 非線性資料結構

(3)抽象資料型別(Abstract Data Type)

抽象資料型別(ADT)的含義是指一個數學模型以及定義在此數模型上的一組操作。即把資料型別和資料型別上的運算捆綁在一起,進行封裝。引入抽象資料型別的目的是把資料型別的表示和資料型別上運算的實現與這些資料型別和運算在程式中的引用隔離開,使得它們相互獨立。

最常用的資料運算有五種:

  • 插入;
  • 刪除;
  • 修改;
  • 查詢;
  • 排序

(4)演算法

演算法是獨立存在的一種解決問題的方法和思想。對於演算法而言,實現的語言並不重要。

  • 演算法的五大特性
    • 輸入:演算法具有0或多個輸入;
    • 輸出:演算法至少有1個或多個輸出;
    • 有窮性:演算法在有限的步驟之後會自動結束而不會無限迴圈,並且每個步驟需要在可接受的時間內完成;
    • 確定性:演算法中的每一步都有確定的含義,不會出現二義性;
    • 可行性:演算法的每一步都是可行的,也就是說每一步都能夠執行有限的次數完成。

(5)演算法的分析

時間複雜度:編寫演算法(程式)在計算機中執行時間的度量。最優時間複雜度,最壞時間複雜度以及平均時間複雜度,因此,我們需要關注演算法的最壞情況,即最壞時間複雜度。

時間複雜度的影響因素:
  • 問題規模
  • 計算機軟硬體條件
  • 程式中語句的執行次數
時間複雜度的幾條基本計算規則
  1. 基本操作,即只有常數項,認為時間複雜度為O(1);
  2. 順序結構,時間複雜度按加法進行計算;
  3. 迴圈結構,時間複雜度按乘法進行計算;
  4. 分支結構,時間複雜度取最大值
  5. 判斷一個演算法的效率時,往往只需要關注運算元量的最高次項,其他次要項和常數項可以忽略;
  6. 在沒有特殊說明時,我們所分析的演算法的時間複雜度都是指最壞時間複雜度。
時間複雜度與大O表示法

每臺機器執行的總時間不同,但是執行基本運算的數量大體相同,對於演算法的時間效率,我們可以使用“大O記法”來表示。

空間複雜度:演算法中所需輔助空間單元佔用空間的度量。

(6)資料結構和演算法的區別

資料結構只是靜態的描述了資料元素之間的關係,高效的程式需要在資料結構的基礎上設計和選擇演算法。

程式=演算法+資料結構

總結:演算法是為了解決實際問題而設計的,資料結構是演算法需要處理的問題載體。