2017/05/31
數(shù)據(jù)結(jié)構(gòu)與算法
表現(xiàn)形式:
1)邏輯結(jié)構(gòu)(邏輯上是如何組織(即表示)數(shù)據(jù)的)
線性結(jié)構(gòu)('均有順序和鏈?zhǔn)絻煞N實(shí)現(xiàn)')
如:線性表、棧(特殊的線性表)、隊(duì)列(特殊的線性表)
集合結(jié)構(gòu)
樹(shù)形結(jié)構(gòu)
圖形結(jié)構(gòu)
2)物理結(jié)構(gòu)(物理上是如何組織(即存儲(chǔ),是指在內(nèi)存中存儲(chǔ))數(shù)據(jù)的)
順序存儲(chǔ)結(jié)構(gòu)
鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
注意:數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)應(yīng)正確的反映數(shù)據(jù)的邏輯結(jié)構(gòu)。
算法分析:是從統(tǒng)計(jì)學(xué)的角度來(lái)分析
時(shí)間復(fù)雜度:該算法對(duì)于輸入規(guī)模(即輸入次數(shù) n)需要執(zhí)行的次數(shù),以此可以來(lái)反映算法的效率
T[n] = O[f(n)]
常見(jiàn)的:
O(1) 常數(shù)階(基本操作次數(shù)為常數(shù),沒(méi)有循環(huán))
O(n) 線性階(單循環(huán))
O(n^2) 平方階(循環(huán)嵌套形成)
O(n^k) K方階
O(x^n) 指數(shù)階
O(logn) 對(duì)數(shù)階
例程:
int i = 1; n = 100;
while(i < n) {
i = i * 2;
}
分析:該程序執(zhí)行的次數(shù)設(shè)為 x
則, 1*2*2*...*2 < n
——>> 2^x < n
——>> x < logn
O(nlogn) 線性對(duì)數(shù)階
注意:常見(jiàn)時(shí)間復(fù)雜度耗時(shí)次序
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
對(duì)于,從n^3往后的算法,對(duì)n的大小很敏感,稍微大一點(diǎn),算法的執(zhí)行時(shí)間都將成為噩夢(mèng)
空間復(fù)雜度: 表示算法在整個(gè)運(yùn)行過(guò)程中占用的存儲(chǔ)空間
S[n] = O[f(n)]
輔助單元是常數(shù)個(gè)時(shí),稱此算法為原地工作,S[n]= O(1)
注意:通常情況下,我們追求的是時(shí)間效率,因此,可以考慮用增大空間開(kāi)銷(xiāo)來(lái)?yè)Q取時(shí)間上的效率。
----------------來(lái)自《大話數(shù)據(jù)結(jié)構(gòu)》-----------------
數(shù)據(jù):是描述客觀事物的符號(hào),不僅包含數(shù)值類(lèi)型的,還包含非數(shù)值類(lèi)型的
數(shù)據(jù)元素(又稱為'記錄'):是組成數(shù)據(jù)的、有一定意義的基本單位,在計(jì)算機(jī)中通常作為整體處理。
數(shù)據(jù)項(xiàng):一個(gè)數(shù)據(jù)元素可以由若干個(gè)數(shù)據(jù)項(xiàng)組成。可以簡(jiǎn)單的理解為數(shù)據(jù)元素的屬性。(用來(lái)刻畫(huà)一個(gè)數(shù)據(jù)元素的)
數(shù)據(jù)對(duì)象:是性質(zhì)相同的數(shù)據(jù)元素的集合,它是數(shù)據(jù)的子集
數(shù)據(jù)結(jié)構(gòu):是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。
簡(jiǎn)言之:可以反映出數(shù)據(jù)元素之間的組織關(guān)系(從邏輯上來(lái)說(shuō))
抽象數(shù)據(jù)類(lèi)型(Abstract Data Type, ADT):是指一個(gè)數(shù)學(xué)模型及定義在該模型上的一組操作
算法(Algorithm):算法是描述解決問(wèn)題的方法。
1.算法的5大特性:
? 輸入 (零個(gè)或多個(gè))
? 輸出 (一個(gè)或多個(gè))
? 有窮性 (在可忍受的時(shí)間內(nèi)執(zhí)行完畢!)
? 確定性 (相同的輸入,對(duì)應(yīng)特定的輸出)
? 可行性 (算法的每一步都是可行,有限次后定可完成)
2.算法設(shè)計(jì)的要求
正確性:要能正確反映問(wèn)題的需求,能夠得到文通的正確答案。
注意:算法的正確性通常由數(shù)學(xué)方法證明,大部分情況下不可能用程序來(lái)證明
可讀性:便于閱讀、理解、交流
健壯性:當(dāng)輸入不合法時(shí),算法應(yīng)能做出相應(yīng)處理,而不是產(chǎn)生異常或出現(xiàn)模型奇妙的結(jié)果(反映到機(jī)器上可能就是程序崩潰)
高效性: 越快執(zhí)行完畢,越好
低存儲(chǔ)量(占用的機(jī)器的內(nèi)存小)
算法效率(主要是指執(zhí)行時(shí)間)的度量方法