數據的邏輯結構與存儲結構的基本概念
邏輯結構分為四種類型
- 集合結構:元素同屬一個集合,元素之間沒有什么關系。
- 線性結構: 典型的有順序表,鏈表,棧和隊列。 元素之間是一對一關系。
- 樹形結構:二叉樹,元素之間是一對多關系
- 圖形結構:有向圖與無向圖。元素之間是多對多的關系。
物理結構(又稱存儲結構)分為兩類
- 順序結構:元素在連續的存儲單元中,物理順序與邏輯順序是一致的,比如數組。優點是訪問速度快,缺點是插入和刪除操作耗時久。
- 鏈式結構:元素可以在不連續的存儲單元中,通過指針指向前驅節點或者后驅節點,有點是插入和刪除都很快。
算法的定義、基本性質以及算法分析的基本概念,包括采用大O形式表示時間復雜度和空間復雜度
- 算法的定義:是為了求解問題給出的有限指令序列,每條指令表示一個或多個操作。
- 算法的基本性質:
- 輸入:一個算法有0個或多個輸入,這些輸入取自某個特定對象的集合。
- 輸出:一個算法有一個或多個輸出,這些輸出是同輸入具有某種特定關系的量
- 確定性:算法中每一條指令必須有確切的含義,不具有二義性
- 可行性:算法中描述的操作都可以用已經實現的運算執行有限次來實現。
- 有窮性:一個算法必須能夠在執行又窮步驟后結束,並且每一步都能在又窮時間內完成。
算法分析
- 事前估計法:時間按復雜度估計。 抽象過程如下:算法運行時間=每條語句執行時間之和-》每條語句的執行次數之和-》基本語句的執行次數-》基本語句執行次數的數量級-》大O號表示。常見的時間復雜度如下Ο(1)<Ο(log₂n)<Ο(n)<Ο(nlog₂n)<Ο(n²)<Ο(n³)<…<Ο(2ⁿ)<Ο(n!)
-
:算法運行所需要的時間稱為時間復雜性;算法運行所需要的輔助空間稱為空間復雜性
描述 | 增長的數量級 | 典型代碼 | 說明 | 舉例 |
常數級別 | Ο(1) | a=b+c | 普通語句 | 將兩個數相加 |
對數級別 | Ο(log₂n) | 二分查找 | 二分查找 | 二分查找 |
線性級別 | Ο(n) | for(int i=0;i<N;i++){ } |
循環 | 找出最大元素 |
線性對數級別 | Ο(nlog₂n) |
|
分治 | 歸並排序 |
平方級別 | Ο(n²) | for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ } } |
雙層循環 | 檢查所有元素對 |
立方級別 | Ο(n³) | 代碼省略 | 三層循環 | 檢查所有三元組 |
指數級別 | Ο(2ⁿ) | 窮舉查找 | 檢查所有子集 |
- 事后統計法:程序運行測試。 比如在調用某個方法的前后打印當前時間,以此來判斷該方法執行耗時,缺點是需要編寫特定程序,且硬件環境影響測試結果(比如服務器與pc機器性能不同,同樣的算法在這2者之間運行的時間是不一樣的)