前言:資料結構與算法作為計算機經典的基礎理論課程,同時作為計算機類專業考研課程,并且在校招面試時常被提及,其重要性可見一斑。除此之外,學習這門課程有助于我們用程式設計去解決、思考問題,設計出更簡潔、效率更高的代碼。
一.課程概述
- 資料結構課程研究什麼?
- 記憶體中基本資料組織和資料處理的方法
- 非數值問題
- 通過學習資料結構獲得什麼?
- 經典資料結構和經典算法的基本原理
- 學習重點
- 資料結構的邏輯特性和存儲結構設計
- 資料結構算法設計基本方法和分析方法
- 利用資料結構解決實際問題
二.基本概念與術語
- 資料
- 能輸入到計算機中,被程式識别和處理的一切事物的符号化表示
- 資料元素
- 資料的基本機關
- 資料項
- 構成資料元素的最小機關
- 存儲結構(由想法到算法)
- 順序存儲結構
- 鍊式存儲結構
- 邏輯結構(由問題到想法)
- 一種邏輯結構可由多種存儲結構實作
- 資料結構
- 邏輯結構
- 存儲結構
- 資料運算
- 抽象資料類型(ADT)
ADT 抽象資料類型名{ 資料對象的定義 資料元素之間的邏輯關系定義 基本運算定義 }ADT
- 算法的定義
- 基于存儲結構的運算實作的步驟
- 滿足有窮性、确定性、可行性
- 有0個或多個輸入,1個或多個輸出
- 什麼是好的算法
- 正确性:對于合法輸入,算法能得出正确結果
- 健壯性:對于非法輸入,算法能做出特别處理
- 可了解性:算法容易了解、實作
- 高效性:具有較短執行時間并占用較少空間
- 可修改、可拓展性
三.算法分析
- 時間複雜度
- 是算法求解問題規模n的函數,T(n)=F(n),F(n)是基本語句的執行頻度
- 增長率:忽略低次幂和最高次幂系數
- 分析規則
- 加法規則:針對并列程式段
- 乘法規則:針對嵌套程式段
- 例子
++x; //複雜度O(1) for(i=1;i<=n;++i) ++x; //複雜度O(n) for(i=1;i<=n;++i) for(j=1;j<=n;++j) ++x; //複雜度O(n²)
- 常見的時間複雜度
O(1)<(log2n)<(n)<(nlog2n)<(n²)<...<(2的n次方)<(n!)
- 空間複雜度
- 除去輸入輸出占用空間,算法臨時占用的存儲空間
- S(n)=O(f(n))
完整内容可以通路我的個人部落格:
資料結構 515code.com