学习《数据结构》要爬的第一步梯子
小王開始專業課的復習
- 一、數據結構是什么
- 二、數據結構中基本概念和術語
- 2.1數據結構的概念
- 2.2按照不同功能劃分邏輯結構
- 2.3存儲結構中重點
- 順序存儲舉例
- 鏈式存儲舉例
- 三、抽象數據類型的表示與實現
- 3.1數據類型
- 3.2抽象數據類型 (ADTs: AbstractData Types)
- 3.3算法分析(重點)
- 1. 時間復雜度
- 2. 空間復雜度
復習數據結構正式開始!
一、數據結構是什么
數據結構是介于數學、計算機軟件與計算機硬件的一門核心課程。程序=算法+數據結構(N.沃斯提出)
二、數據結構中基本概念和術語
—數值性數據
—非數值性數據(多媒體信息處理,例如視頻、圖形等)
2.1數據結構的概念
數據結構(Data Structure):是相互之間存在一種或多種特定關系的數據元素的集合。數據結構是帶“結構”的數據元素的集合,“結構”就是指數據元素之間存在的關系。
數據結構包括 2+1(兩個層次和一個操作)
邏輯結構(唯一):數據元素間抽象化的相互關系,與數據的存儲無關,獨立于計算機,它是從具體問題抽象出來的數學模型。(如集合、線性、樹形、圖形)
存儲結構(物理結構)(不唯一):數據元素及其關系在計算機存儲器中的存儲方式。(如順序(關鍵詞:連續)、鏈式(關鍵詞:指針)、索引(關鍵詞:邏輯指針清單)、散列/哈希(關鍵詞:地址 ;一般來說效率最高))
操作(運算、行為):執行不同功能的算法
2.2按照不同功能劃分邏輯結構
線性結構----
有且僅有一個開始和一個終端結點,并且所有結點都最多只有一個直接前趨和一個后
繼。
例如:線性表、棧、隊列、串
非線性結構----
一個結點可能有多個直接前趨和直接后繼。
例如:樹、圖
集合——數據元素間除“同屬于一個集合”外,無其它關系(換言之,數據與數據之間沒有關系)
線性結構—— 一個對一個,如線性表、棧、隊列
樹形結構—— 一個對多個,如樹
圖形結構—— 多個對多個,如圖
2.3存儲結構中重點
順序存儲舉例
鏈式存儲舉例
歡迎關注:https://blog.csdn.net/hanhanwanghaha
這個可愛的寶藏女孩
三、抽象數據類型的表示與實現
3.1數據類型
定義:在一種程序設計語言中,變量所具有的數據種類
例如C 語言:
基本數據類型: char int float double void
構造數據類型:數組、結構體、共用體、文件
數據類型是一組性質相同的值的集合, 以及定義于這個集合上的一組運算的總稱
3.2抽象數據類型 (ADTs: AbstractData Types)
(也稱增廣數據類型)
—更高層次的數據抽象
—由用戶定義,用以表示應用問題的數據模型
—由基本的數據類型組成, 并包括一組相關的操作
常用格式
3.3算法分析(重點)
算法定義
一個有窮的指令集,這些指令為解決某一特定任務規定了一個運算序列
(注意:提到指令集、序列集、描述集都是算法的定義)
算法的特性
輸入:有 0 個或多個輸入(可以不輸入,系統自動生成)
輸出:有一個或多個輸出(處理結果)
確定性:每步定義都是確切、無歧義的
有窮性:算法應在執行有窮步后結束
有效性(可執行性):每一條運算應足夠基本
算法設計的評價及要求
正確性
可讀性
健壯性(不能稍微碰下就不能運行了)
高效性(時間和空間)
算法的度量
1. 時間復雜度
一般情況下,算法中基本操作重復執行的時間是問題規模 n 的某個函數 f(n),算法
執行的時間的增長率和 f(n)的增長率相同,稱漸近時間復雜度。
時間復雜度的表示方法有兩種:
方法 1:大 O 法
T(n) = O(f(n))
它表示隨問題規模 n 的增大,算法執行時間的增長率和 f(n)的增長率相同,稱作算
法的漸進時間復雜度,簡稱時間復雜度。
方法 2:語句頻度法
計算該語句重復執行的次數,又叫頻度統計法。
n*n階矩陣加法
for( i = 0; i < n; i++)for( j = 0; j < n; j++)c[i][j] = a[i][j] + b[i][j]; 語句的頻度(Frequency Count ): 重復執行的次數:n*n;T(n)= O(n^2) 即:矩陣加法的運算量和問題的規模 n 的平方是同一個量級分析算法時間復雜度的基本方法
找出語句頻度最大的那條語句作為基本語句
計算基本語句的頻度得到問題規模 n 的某個函數 f(n)
取其數量級用符號“O”表示
時間復雜度是由嵌套最深層語句的頻度決定的
void exam ( float x[ ][ ],int m,int n){float sum [ ];for ( int i = 0; i < m; i++ ) {sum[i] = 0.0;for (int j = 0; j < n; j++) f(n)=m*nsum[i] += x[i][j]; } for ( i = 0; i < m; i++ )cout << i << “ : ” <<sum [i] << endl; }T(n) = O(m*n)O(1)<O(logn)< O(n)< O(nlogn) <O(n^2) <O(n^3)< O(n^5)< O(2^n)< O(n!)
隨著 n 值的增大,增長速度各不相同,n 足夠大時,存在下列關系:
對數函數<冪函數<指數函數<階乘
so 盡量少用指數階的算法
關于時間復雜度的運用,記得我以前發過相關的文章:(用python寫的)https://blog.csdn.net/hanhanwanghaha/article/details/107886355
2. 空間復雜度
三個組成部分:
原地工作:算法在執行過程中,輔助空間是不變的,叫原地工作。
數據結構已經走了第一步,明天再復習。干高數去!
https://blog.csdn.net/hanhanwanghaha寶藏女孩的成長日記 歡迎您的關注!
歡迎關注微信公眾號:寶藏女孩的成長日記 讓這個可愛的寶藏女孩在努力的道路上與你一起同行! 如有轉載,請注明出處(如不注明,盜者必究)
總結
以上是生活随笔為你收集整理的学习《数据结构》要爬的第一步梯子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】深入理解JavaScript闭包(
- 下一篇: sudo apt-get常用命令