第1、2章筆記

1 數據 ->數據結構

數據(操作對象):描述客觀事物的符號,能被計算機識別,並輸入給計算機處理的符號集合

  • 數據元素(建立數據結構的着眼點):組成數據的、有一定意義的基本單位
  • 數據項:不可分割的最小單位
  • 數據對象:性質相同的數據元素的集合,是數據的子集

數據結構:相互之間存在一種或多種特定關係的數據元素的集合
目的是分析待處理對象的特性以及各處理對象之間存在的關係

  • 邏輯結構:數據對象中數據元素之間的相互關係(集合、線性、樹形、圖形)->面向問題
  • 物理結構:數據存儲形式(順序、鏈式)->面向計算機,將數據及其邏輯關係存儲到計算機

數據類型:一組性質相同的值的集合,以及在此集合上的一些操作的總稱
抽象數據類型(ADT):一個數學模型以及定義在該模型上的一組操作

  • 目的:問題分解、抽象、信息隱藏
  • 組成:包括數據對象、數據對象中各數據元素之間關係、對數據元素的操作

2 算法

2.1 算法

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

算法特點:

  • 輸入輸出
  • 有窮性(有限步驟、可接受時間)
  • 確定性
  • 可行性

算法設計要求:

  • 正確性:四個層次
    • 沒有語法錯誤
    • 對於合法輸入能夠產生滿足要求的輸出結果
    • 對於非法輸入能夠得出滿足規格說明的結果
    • 對於精心挑選的所有測試數據都有滿足要求的輸出結果
  • 可讀性
  • 健壯性:對輸入數據不合法的情況作合適的處理
  • 時間效率高和存儲量低

2.2 算法效率

度量:事前分析估算方法

效率影響因素:

  • 算法採用的策略和方法
  • 編譯產生的代碼質量(軟件)
  • 問題的輸入規模
  • 機器執行指令的速度(硬件)

主要因素就是算法的好壞輸入規模的大小
分析算法效率的基本思路即將算法基本操作的數量(一系列步驟執行的次數)表示成輸入規模n的函數,而且函數的常數項和其他次要項都可以忽略,更應該關注主項的階數。
由此,引出算法時間複雜度的概念。
時間複雜度:

語句執行次數T(n)是關於問題規模n的函數,若有某個輔助函數f(n),使得當n趨近於無窮大時,T(n)/f(n)的極限值爲不等於零的常數,則稱f(n)是T(n)的同數量級函數,記作T(n)=O(f(n)),它稱爲算法的漸進時間複雜度,簡稱時間複雜度。

推導大O階:

推導大O階,我們可以按照如下的規則來進行推導,得到的結果就是大O表示法:
1. 用常數1來取代運行時間中所有加法常數。
2. 修改後的運行次數函數中,只保留最高階項
3. 如果最高階項存在且不是1,則去除與這個項相乘的常

常用的時間複雜度按照耗費的時間從小到大依次是:

O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章