計算機考研之數據結構-緒論

數據結構-緒論

數據結構

基本概念與術語

  • 數據
    • 能被計算機處理的符號的集合。
  • 數據元素
    • 數據的基本單位,好比一個學生的全部記錄。
  • 數據對象
    • 相同性質的數據元素的集合,如整數數據對象就是全部整數的集合。
  • 數據類型
    • 值的集合 + 定義在該集合上的一組操做
  • 抽象數據類型
    • 數據對象,數據關係,基本操做集合的三元組,與具體實現無關。
  • 數據結構
    • 數據元素之間非孤立的關係,包括了:邏輯結構,存儲結構,數據的運算

數據結構三要素

邏輯結構

邏輯結構即數據的抽象表示,與具體實現無關的。數組

  • 線性
    • 通常性
    • 受限性
      • 隊列
    • 推廣
      • 數組
      • 廣義表
  • 非線性
    • 集合
      • 通常樹
      • 二叉樹
      • 有向圖
      • 無向圖

存儲結構

即數據結構的物理結構,這是數據結構在計算中的實際表示,依賴於具體實現。數據結構

  • 順序存儲
    • 邏輯上相鄰,物理上也相鄰。
  • 鏈式存儲
    • 邏輯上相鄰,物理上並不相鄰。
  • 索引存儲
    • 物理位置存儲在索引表中。
  • 散列存儲
    • 物理位置由一個散列函數計算獲得。

數據的運算

運算的定義針對邏輯結構,運算的功能針對存儲結構。函數

算法

基本概念

特性

  • 有窮性
    • 算法必須在有限時間內完成
  • 肯定性
    • 對於相同的輸入都有相同的輸出
  • 可行性
    • 算法必須由基本運算的有限次組合來描述
  • 輸入
  • 輸出

目的

  • 正確性
  • 可讀性
  • 健壯性
    • 對於非法數據有適當的處理
  • 高效性

效率度量

效率的度量由時間與空間的複雜度共同描述。spa

時間複雜度

即執行算法須要消耗的時間。code

  1. n
    • 問題的規模,複雜度都是關於問題規模的函數
  2. 語句頻度
    • 該語句在算法中被重複執行的次數
  3. T(n)
    • 全部語句的頻度
  4. f(n)
    • 基本運算的頻度

由於全部T(n)與f(n)同數量級,因此使用T(n)來衡量算法的實際複雜度。記作T(n)=O(f(n)),這裏的O記號表示的的是取f(n)的最大數量級。對象

對於時間複雜度還有一點很是很是重要的是,時間複雜度依賴於輸入。根據輸入的不一樣,通常咱們會將時間複雜度分類三類來討論:最壞時間複雜度,平均時間複雜度,最壞時間複雜度。通常咱們考慮在最壞狀況下的時間複雜度,即算法運行的上界。索引

經常使用的時間複雜度比較:
O(1) < O(\(log_2\)n) < O(n) < O(n) < O(n\(log_2\)n) < O(\(n^2\)) < O(\(n^3\)) < O(\(2^n\)) < O(\(n!\)) < < O(\(n^n\))隊列

空間複雜度

即實現這樣的算法須要的輔助空間的大小。it

  1. S(n)
    • 空間複雜度記號

算法原地工做是指算法所須要的輔助空間是常量,即O(1)。

經典習題

1) 如下屬於邏輯結構的是( )
A. 順序表 B. 散列表 C. 有序表 D.單列表

答案:C
解析:分清楚邏輯結構和存儲結構。

2) 下列函數的時間複雜度是( )

int func(int n){
    int i=0, sum=0;
    while(sum < n) sum += ++i;
    return i;
}

答案:O(\(\sqrt n\))
解析:

3) 如下說法錯誤的是()
A. 算法原地工做的含義是指不須要任何額外的空間
B. 相同規模n下,複雜度O(n)的算法在時間上老是優於複雜度O(\(2^n\))
C. 所謂的時間複雜度是指最壞的狀況下,估算算法執行時間的一個上界
D. 同一個算法,實現語言的級別越高,執行效率越低

答案:A 解析:

相關文章
相關標籤/搜索