數據結構
基本概念
數據
數據是信息的載體,是描述客觀事物屬性。
數據元素,數據項
數據元素是數據的基本單位,通常作為一個整體進行考慮和處理;
一個數據元素可以由若干數據項組成,數據項是構成數據元素的不可分割的最小單位。
數據結構、數據對象
數據結構是相互之間存在一種或多種特定關系的數據元素的集合;
數據對象是具有相同性質的數據元素的集合,是數據的一個子集。
數據類型,抽象數據類型
數據類型是一個值的集合和定義在此集合上的一組操作的總稱
- 原子類型:其值不可再分的數據類型
- 結構類型:其值可以再分解為若干成分(分量)的數據類型
- 抽象數據類型:抽象數據組織及與之相關的操作
數據結構三要素
數據的邏輯結構
集合:結構種的元素之間除“同屬一個集合”外,別無其他關系。
線性關系:結構種的數據元素之間只存在一對一的關系。
樹形關系:結構種的數據元素之間存在一對多的關系。
圖狀結構(網狀結構):結構種的數據元素之間存在多對多的關系。
數據的存儲結構
存儲結構是數據結構在計算機種的表示(映像)--物理結構
順序存儲
把邏輯上相鄰的元素存儲再物理位置上也相鄰的存儲單元中。
鏈式存儲
邏輯上相鄰的元素再物理位置上可以不相鄰。
索引存儲
在存儲元素信息的同時,還簡歷附加的索引表。索引表的每項稱為索引項,索引項的一般形式是(關鍵字,地址)
散列存儲
根據元素的關鍵字直接計算出該元素的存儲地址,又稱哈希存儲。
數據的運算
施加在數據上的運算包括運算的定義和實現。
運行的定義是針對邏輯結構的,指出運算的功能;
運算的實現是針對存儲結構的,指出運算的具體步驟。
算法
基本概念
算法是對特定問題求解步驟的一種描述。5個重要特性
- 有窮性:步驟,時間有窮
- 確定性:步驟確定,相同輸入時輸出確定
- 可行性:執行有限次基本運算來實現
- 輸入:一個算法有兩個或多個輸入
- 輸出:一個算法有一個或多個輸出
目標:
- 正確性:正確低解決問題
- 可讀性:幫助人們理解
- 健壯性:輸入非法時,應能適當地做出反應或進行處理
- 效率與低存儲量需求:效率高,最大存儲空間小
算法效率的度量
時間復雜度
事前估計算法時間開銷T(n)與問題規模n的關系
算法中所有語句的頻度之和記為\(T(n)\),通常采用算法基本運算的頻度\(f(n)\)來分析算法的時間復雜度局。
\(O\)的含義是\(T(n)\)的數量級
-
加法規則
\[T(n)=T_1(n)+T_2(2)=O(f(n))+O(g(n))=O(max(f(),g())) \] -
乘法規則
\[T(n)=T_1(n)+T_2(2)=O(f(n))+O(g(n))=O(f(n)\times g(n)) \]
常見的漸近時間復雜度
最壞時間復雜度:在最壞情況下,算法的時間復雜度
平均時間復雜度:所有可能輸入實例在等概論出現的情況下,算法的期望運行時間
最好時間復雜度:在最好情況下,算法的時間復雜度
空間復雜度
算法的空間復雜度\(S(n)\)定義為該算法所耗費的存儲空間,它是問題規模n的函數,記為
算法原地工作--算法所需內存空間為常量