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