嚴(yán)蔚敏數(shù)據(jù)結(jié)構(gòu)課件第一章_第1頁(yè)
嚴(yán)蔚敏數(shù)據(jù)結(jié)構(gòu)課件第一章_第2頁(yè)
嚴(yán)蔚敏數(shù)據(jù)結(jié)構(gòu)課件第一章_第3頁(yè)
嚴(yán)蔚敏數(shù)據(jù)結(jié)構(gòu)課件第一章_第4頁(yè)
嚴(yán)蔚敏數(shù)據(jù)結(jié)構(gòu)課件第一章_第5頁(yè)
已閱讀5頁(yè),還剩72頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、湘潭大學(xué)信息工程學(xué)院石躍祥教教:?jiǎn)J紅科樓北樓307目標(biāo)現(xiàn)狀正常學(xué)習(xí)加倍努力學(xué)習(xí)興趣不濃1.1 數(shù)據(jù)結(jié)構(gòu)討論的范疇數(shù)據(jù)結(jié)構(gòu)討論的范疇1.2 基本概念基本概念1.3 算法和算法的量度算法和算法的量度1.11.1 數(shù)據(jù)結(jié)構(gòu)討論的范疇數(shù)據(jù)結(jié)構(gòu)討論的范疇(數(shù)據(jù)結(jié)構(gòu)在軟件開發(fā)中的地位)系統(tǒng)分析系統(tǒng)分析系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)系統(tǒng)實(shí)現(xiàn)系統(tǒng)實(shí)現(xiàn)系統(tǒng)維護(hù)系統(tǒng)維護(hù)系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)Niklaus Wirth Algorithm + Data Structures = Programs程序設(shè)計(jì)程序設(shè)計(jì): :算法算法: 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu): 為計(jì)算機(jī)處理問題編制 一組指令集 處

2、理問題的策略處理問題的策略問題的數(shù)學(xué)模型問題的數(shù)學(xué)模型 結(jié)構(gòu)靜力分析計(jì)算 例如例如: 數(shù)值計(jì)算的程序設(shè)計(jì)問題 線性代數(shù)方程組 環(huán)流模式方程 (球面坐標(biāo)系)全球天氣預(yù)報(bào) 非數(shù)值計(jì)算的程序設(shè)計(jì)問題例一例一: 求一組(n個(gè))整數(shù)整數(shù)中的最大值算法: ? ?模型:?基本操作是“比較兩個(gè)數(shù)的大小比較兩個(gè)數(shù)的大小”取決于整數(shù)值的范圍整數(shù)值的范圍例二:例二:旅館客房的管理算法:?模型:?先進(jìn)先出隊(duì)列例三:鋪設(shè)城市的煤氣管道例三:鋪設(shè)城市的煤氣管道算法:?模型:?如何規(guī)劃使得總投資花費(fèi)最少?圖概括地說,概括地說, 數(shù)據(jù)結(jié)構(gòu)是一門討論數(shù)據(jù)結(jié)構(gòu)是一門討論“描述現(xiàn)描述現(xiàn)實(shí)世界實(shí)體的數(shù)學(xué)模型實(shí)世界實(shí)體的數(shù)學(xué)模型( (

3、非數(shù)值計(jì)非數(shù)值計(jì)算算) )及其上的操作在計(jì)算機(jī)中如何及其上的操作在計(jì)算機(jī)中如何表示和實(shí)現(xiàn)表示和實(shí)現(xiàn)”的學(xué)科。的學(xué)科。1.2 基本概念基本概念一、數(shù)據(jù)與數(shù)據(jù)結(jié)構(gòu)一、數(shù)據(jù)與數(shù)據(jù)結(jié)構(gòu)二、數(shù)據(jù)類型二、數(shù)據(jù)類型三、抽象數(shù)據(jù)類型三、抽象數(shù)據(jù)類型一、數(shù)據(jù)與數(shù)據(jù)結(jié)構(gòu)一、數(shù)據(jù)與數(shù)據(jù)結(jié)構(gòu) 所有能被輸入被輸入到計(jì)算機(jī)中,且能被計(jì)算機(jī)處理的符號(hào)處理的符號(hào)( (數(shù)值、字符等數(shù)值、字符等) )的集合。數(shù)據(jù)數(shù)據(jù): :是計(jì)算機(jī)操作的對(duì)象計(jì)算機(jī)操作的對(duì)象的總稱。 是計(jì)算機(jī)處理的信息的信息的某種特定的符號(hào)表示形式表示形式。 是數(shù)據(jù)(集合)中的一個(gè)“個(gè)個(gè)體體”,在計(jì)算機(jī)中通常作為一個(gè)整體進(jìn)行考慮和處理。是數(shù)據(jù)結(jié)構(gòu)中討論的基本基本單

4、位。數(shù)據(jù)元素?cái)?shù)據(jù)元素: :如:整數(shù)“5”,字符“N”等。 -是不可分割的“原子” 其中每個(gè)款項(xiàng)稱為一個(gè)“數(shù)據(jù)項(xiàng)數(shù)據(jù)項(xiàng)”它是數(shù)據(jù)結(jié)構(gòu)中討論的最小最小單位數(shù)據(jù)元素也可以由若干款項(xiàng)構(gòu)成。數(shù)據(jù)元素也可以由若干款項(xiàng)構(gòu)成。例如:描述一個(gè)學(xué)生的數(shù)據(jù)元素稱之為組合項(xiàng)稱之為組合項(xiàng)年 月 日姓 名學(xué) 號(hào)班 號(hào)性別出生日期入學(xué)成績(jī)?cè)禹?xiàng)原子項(xiàng)數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu):帶結(jié)構(gòu)結(jié)構(gòu)的數(shù)據(jù)元素的集合有一個(gè)特性相同的數(shù)據(jù)元素的集合,如果在數(shù)據(jù)元素之間存在一種或多種特定的關(guān)系,則稱為一個(gè)數(shù)據(jù)結(jié)構(gòu)。指的是數(shù)據(jù)元素之間存在的關(guān)系例如,當(dāng)用三個(gè)三個(gè) 4 位的十進(jìn)制數(shù)位的十進(jìn)制數(shù)表示一個(gè)含 12 位數(shù)的十進(jìn)制數(shù)時(shí),位數(shù)的十進(jìn)制數(shù)時(shí),321

5、4,6587,9345 a1(3214),a2(6587),a3(9345)則在數(shù)據(jù)元素 a1、a2 和 a3 之間存在著“次序次序”關(guān)系關(guān)系 a1, a2 、 a2, a3 3214,6587,9345 6587,3214,9345例如例如: :a1 a2 a3a2 a1 a3又例,在 2 行 3 列的二維數(shù)組中六個(gè)元素a1, a2, a3, a4, a5, a6之間存在兩個(gè)關(guān)系:行的次序關(guān)系行的次序關(guān)系:row = ,col = , a1 a2 a3 a4 a5 a6列的次序關(guān)系列的次序關(guān)系: : 若在 6 個(gè)數(shù)據(jù)元素a1, a2, a3, a4, a5, a6 之間存在如下的次序關(guān)系次序

6、關(guān)系:| i=1, 2, 3, 4, 5 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)是相互之間存在著某種邏輯相互之間存在著某種邏輯關(guān)系的數(shù)據(jù)元素的集合關(guān)系的數(shù)據(jù)元素的集合。可見,不同的“關(guān)系關(guān)系”構(gòu)成不同的“結(jié)構(gòu)結(jié)構(gòu)”則構(gòu)成一維數(shù)組一維數(shù)組的定義。從關(guān)系關(guān)系或結(jié)構(gòu)結(jié)構(gòu)分,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)可歸結(jié)為以下四類四類: :線性線性結(jié)構(gòu)樹形樹形結(jié)構(gòu)圖狀圖狀結(jié)構(gòu)集合集合結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)包括“邏輯結(jié)構(gòu)邏輯結(jié)構(gòu)” 和“物理結(jié)物理結(jié)構(gòu)構(gòu)”兩個(gè)方面(層次):邏輯結(jié)構(gòu)邏輯結(jié)構(gòu) 是對(duì)數(shù)據(jù)元素之間的邏輯關(guān)系的描述,它可以應(yīng)一個(gè)數(shù)據(jù)元素的集合和定義在此集合上的若干關(guān)系來表示;物理結(jié)構(gòu)物理結(jié)構(gòu) 是邏輯結(jié)構(gòu)在計(jì)算機(jī)中的表示和實(shí)現(xiàn),故又稱“存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu)

7、” 。數(shù)據(jù)結(jié)構(gòu)的形式定義描述數(shù)據(jù)結(jié)構(gòu)的形式定義描述為:數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)是一個(gè)二元組 Data_Structures = (D, S)其中:D 是數(shù)據(jù)元素的有限集數(shù)據(jù)元素的有限集, S 是 D上關(guān)系的有限集關(guān)系的有限集。例如:定義 “班集體”為一個(gè)數(shù)據(jù)結(jié)構(gòu)Class = (D, S)D = a, b1,bn, c1,cn, d1,dn S = R1, R2 R1 = , R2 = , , | j = 2, 3, , n 數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu) 邏輯結(jié)構(gòu)在存儲(chǔ)器中的映象映象“數(shù)據(jù)元素”的映象 ?“關(guān)系”的映象 ?數(shù)據(jù)元素的映象方法:數(shù)據(jù)元素的映象方法:用二進(jìn)制位(bit)的位串表示數(shù)據(jù)元素(321

8、)10 = (501)8 = (101000001)2 A = (101)8 = (001000001)2關(guān)系的映象方法:關(guān)系的映象方法:(表示x, y的方法)順序映象順序映象以相對(duì)的存儲(chǔ)位置表示后繼關(guān)系以相對(duì)的存儲(chǔ)位置表示后繼關(guān)系例如例如: :令 y 的存儲(chǔ)位置和 x 的存儲(chǔ)位置之間差一個(gè)常量 C而 C 是一個(gè)隱含值,整個(gè)存儲(chǔ)結(jié)構(gòu)中只整個(gè)存儲(chǔ)結(jié)構(gòu)中只含數(shù)據(jù)元素本身的信息含數(shù)據(jù)元素本身的信息 x y鏈?zhǔn)接诚箧準(zhǔn)接诚笠愿郊有畔⒁愿郊有畔? (指針指針) )表示后繼關(guān)系表示后繼關(guān)系需要用一個(gè)和 x 在一起的附加信息附加信息指示 y 的存儲(chǔ)位置y x在不同的編程環(huán)境中,存儲(chǔ)結(jié)構(gòu)可有不同的描述方法,當(dāng)

9、用高級(jí)程序設(shè)計(jì)語(yǔ)言進(jìn)行編程時(shí),通常可用高級(jí)編程語(yǔ)言中提供的數(shù)據(jù)類型描述之。例如例如: : 以三個(gè)帶有次序關(guān)系的整數(shù)表示一個(gè)長(zhǎng)整數(shù)時(shí),可利用 C 語(yǔ)言中提供的整數(shù)數(shù)組類型, typedef int Long_int 3定義長(zhǎng)整數(shù)定義長(zhǎng)整數(shù)為:typedef struct int y; / 年號(hào) Year int m; / 月號(hào) Month int d; / 日號(hào) Day DateType; / 日期類型定義定義“日期日期”為:定義定義“學(xué)生學(xué)生”為:typedef struct char id8; / 學(xué)號(hào) char name16; / 姓名 char sex; / 性別M/F:男/女 Date

10、Type bdate; / 出生日期 Student; / 學(xué)生類型二、數(shù)據(jù)類型二、數(shù)據(jù)類型 在用高級(jí)程序語(yǔ)言編寫的程序中,必須對(duì)程序中出現(xiàn)的每個(gè)變量、常量或表達(dá)式,明確說明明確說明它們所 屬的數(shù)據(jù)類型數(shù)據(jù)類型。例如,C 語(yǔ)言中提供的基本數(shù)據(jù)類型基本數(shù)據(jù)類型有:整型整型 int浮點(diǎn)型浮點(diǎn)型 float字符型字符型 char邏輯型邏輯型 bool ( C+語(yǔ)言)語(yǔ)言)雙精度型雙精度型 double實(shí)型(實(shí)型( C+語(yǔ)言)語(yǔ)言) 數(shù)據(jù)類型數(shù)據(jù)類型 是一個(gè) 值的集合值的集合和定義在此集合上的 一組操作一組操作的總稱。 不同類型的變量,其所能取的值的值的范圍范圍不同,所能進(jìn)行的操作進(jìn)行的操作不同。例如

11、:整型值的范圍是:-32768 32767操作是:+,-,*,/,%各種高級(jí)程序設(shè)計(jì)語(yǔ)言中都擁有“整數(shù)”類型,盡管它們?cè)诓煌幚砥魃蠈?shí)現(xiàn)的方法不同,但對(duì)程序員而言是“相同的”,因?yàn)樗鼈兊臄?shù)學(xué)特性相同。從“數(shù)學(xué)抽象”的角度看,可稱它為一個(gè)“抽象數(shù)據(jù)類型” 。三、抽象數(shù)據(jù)類型三、抽象數(shù)據(jù)類型 (Abstract Data Type 簡(jiǎn)稱簡(jiǎn)稱ADT) 是指一個(gè)數(shù)學(xué)模型以及是指一個(gè)數(shù)學(xué)模型以及定義在此數(shù)學(xué)模型上的一定義在此數(shù)學(xué)模型上的一組操作組操作例如例如: :“整數(shù)”是一個(gè)抽象數(shù)據(jù)類型。 其數(shù)學(xué)特性和具體的計(jì)算機(jī)或語(yǔ)言無關(guān)。 “抽象”的意義在于強(qiáng)調(diào)數(shù)據(jù)類型的數(shù)學(xué)特性。抽象數(shù)據(jù)類型還包括用戶在設(shè)計(jì)軟件

12、系統(tǒng)時(shí)自己定義的數(shù)據(jù)類型。在構(gòu)造軟件系統(tǒng)的各個(gè)相對(duì)獨(dú)立的模塊時(shí),定義一組數(shù)據(jù)一組數(shù)據(jù)和施與這些數(shù)據(jù)之上的一組一組操作操作,并在模塊內(nèi)部?jī)?nèi)部給出它們的表示和實(shí)表示和實(shí)現(xiàn)細(xì)節(jié)現(xiàn)細(xì)節(jié),在模塊外部外部使用的只是抽象的數(shù)抽象的數(shù)據(jù)和抽象的操作據(jù)和抽象的操作。例如,例如,定義抽象數(shù)據(jù)類型“復(fù)數(shù)復(fù)數(shù)” 數(shù)據(jù)對(duì)象:數(shù)據(jù)對(duì)象: De1,e2e1,e2RealSet 數(shù)據(jù)關(guān)系:數(shù)據(jù)關(guān)系: R1 | e1是復(fù)數(shù)的實(shí)數(shù)部分, | e2 是復(fù)數(shù)的虛數(shù)部分 ADT Complex 基本操作:基本操作: AssignComplex( &Z, v1, v2 )操作結(jié)果:構(gòu)造復(fù)數(shù) Z,其實(shí)部和虛部 分別被賦以參數(shù) v1

13、 和 v2 的值。 DestroyComplex( &Z)操作結(jié)果:復(fù)數(shù)Z被銷毀。 GetReal( Z, &realPart )初始條件:復(fù)數(shù)已存在。操作結(jié)果:用realPart返回復(fù)數(shù)Z的實(shí)部值。 GetImag( Z, &ImagPart )初始條件:復(fù)數(shù)已存在。操作結(jié)果:用ImagPart返回復(fù)數(shù)Z的虛部值。 Add( z1,z2, &sum )初始條件:z1, z2是復(fù)數(shù)。操作結(jié)果:用sum返回兩個(gè)復(fù)數(shù)z1, z2 的 和值。 ADT Complex)34()68()34)(68(iiiiz # include # include complex.h

14、void main() complex z1,z2,z3,z4,z; float RealPart,ImagPart; InitComplex(z1,8.0,6.0); InitComplex(z2,4.0,3.0); Add(z1,z2,z3); Multiply(z1,z2,z4); if (Division (z4,z3,z) GetReal (z, RealPart); GetImag (z, ImagPart); /ifADT 有兩個(gè)重要特征:數(shù)據(jù)抽象數(shù)據(jù)抽象 用ADT描述程序處理的實(shí)體時(shí),強(qiáng)調(diào)的是其本質(zhì)的特征本質(zhì)的特征、其所能完成的其所能完成的功能功能以及它和外部用戶的接口外部用戶

15、的接口(即外界外界使用它的方法使用它的方法)數(shù)據(jù)封裝數(shù)據(jù)封裝 將實(shí)體的外部特性和其內(nèi)部外部特性和其內(nèi)部實(shí)現(xiàn)細(xì)節(jié)分離實(shí)現(xiàn)細(xì)節(jié)分離,并且對(duì)外部用戶隱藏對(duì)外部用戶隱藏其內(nèi)部實(shí)現(xiàn)細(xì)節(jié)其內(nèi)部實(shí)現(xiàn)細(xì)節(jié)抽象數(shù)據(jù)類型的描述方法抽象數(shù)據(jù)類型的描述方法抽象數(shù)據(jù)類型可用(D,S,P)三元組表示其中,D 是數(shù)據(jù)對(duì)象, S 是 D 上的關(guān)系集, P 是對(duì) D 的基本操作集。 ADT 抽象數(shù)據(jù)類型名抽象數(shù)據(jù)類型名 數(shù)據(jù)對(duì)象:數(shù)據(jù)對(duì)象:數(shù)據(jù)對(duì)象的定義 數(shù)據(jù)關(guān)系:數(shù)據(jù)關(guān)系:數(shù)據(jù)關(guān)系的定義 基本操作:基本操作:基本操作的定義 ADT 抽象數(shù)據(jù)類型名其中基本操作的定義格式為:基本操作名基本操作名(參數(shù)表) 初始條件:初始條件:初

16、始條件描述 操作結(jié)果操作結(jié)果:操作結(jié)果描述 賦值參數(shù)賦值參數(shù) 只為操作提供輸入值;引用參數(shù)引用參數(shù) 以&打頭,除可提供輸入值外,還將返回操作結(jié)果。初始條件初始條件 描述了操作執(zhí)行之前數(shù)據(jù)結(jié)構(gòu)和參數(shù)應(yīng)滿足的條件,若不滿足,則操作失敗,并返回相應(yīng)出錯(cuò)信息。操作結(jié)果操作結(jié)果 說明了操作正常完成之后,數(shù)據(jù)結(jié)構(gòu)的變化狀況和應(yīng)返回的結(jié)果。若初始條件為空,則省略之。抽象數(shù)據(jù)類型的表示和實(shí)現(xiàn)抽象數(shù)據(jù)類型的表示和實(shí)現(xiàn) 抽象數(shù)據(jù)類型需要通過固有數(shù)據(jù)固有數(shù)據(jù)類型類型(高級(jí)編程語(yǔ)言中已實(shí)現(xiàn)的數(shù)據(jù)類型)來實(shí)現(xiàn)。例如,對(duì)以上定義的復(fù)數(shù)typedef struct float realpart; float ima

17、gpart;complex;/ -存儲(chǔ)結(jié)構(gòu)的定義存儲(chǔ)結(jié)構(gòu)的定義/ -基本操作的函數(shù)原型說明基本操作的函數(shù)原型說明void Assign( complex &Z, float realval, float imagval );/ 構(gòu)造復(fù)數(shù) Z,其實(shí)部和虛部分別被賦以參數(shù) / realval 和 imagval 的值float GetReal( cpmplex Z ); / 返回復(fù)數(shù) Z 的實(shí)部值float Getimag( cpmplex Z ); / 返回復(fù)數(shù) Z 的虛部值void add( complex z1, complex z2, complex &sum ); / 以

18、 sum 返回兩個(gè)復(fù)數(shù) z1, z2 的和 / -基本操作的實(shí)現(xiàn)基本操作的實(shí)現(xiàn)void add( complex z1, complex z2, complex &sum ) / 以 sum 返回兩個(gè)復(fù)數(shù) z1, z2 的和 sum.realpart = z1.realpart + z2.realpart; sum.imagpart = z1.imagpart + z2.imagpart; 其它省略 1.3 1.3 算法和算法的衡量算法和算法的衡量一、算法一、算法二、算法設(shè)計(jì)的原則二、算法設(shè)計(jì)的原則三、算法效率的衡量方法和準(zhǔn)則三、算法效率的衡量方法和準(zhǔn)則四、算法的存儲(chǔ)空間需求四、算法的

19、存儲(chǔ)空間需求 算法算法是為了解決某類問題而規(guī)定的一個(gè)有限長(zhǎng)的操作序列操作序列。一個(gè)算法必須滿足以下五五個(gè)重要特性特性:1 1有窮性有窮性 2 2確定性確定性 3 3可行性可行性4 4有輸入有輸入 5 5有輸出有輸出一、算法一、算法1 1有窮性有窮性 對(duì)于任意一組合法輸入值,在執(zhí)行有窮步驟有窮步驟之后一定能結(jié)束,即:算法中的每個(gè)步驟都能在有限時(shí)間有限時(shí)間內(nèi)完成; 2 2確定性確定性 對(duì)于每種情況每種情況下所應(yīng)執(zhí)行的操作,在算法中都有確切確切的規(guī)定,使算法的執(zhí)行者或閱讀者都能明確其含義及如何執(zhí)行。并且并且在任何條件下,算法都只有一在任何條件下,算法都只有一條執(zhí)行路徑;條執(zhí)行路徑;3 3可行性可行性

20、 算法中的所有操作都必須足夠基本,都可以通過已經(jīng)實(shí)現(xiàn)的基本操作運(yùn)算有限次實(shí)現(xiàn)之;4 4有輸入有輸入 作為算法加工對(duì)象的量值,通常體現(xiàn)為算法中的一組變量。有些輸入量需要在算法執(zhí)行過程中輸入,而有的算法表面上可以沒有輸入,實(shí)際上已被嵌入算法之中; 5 5有輸出有輸出 它是一組與“輸入”與確定關(guān)系的量值,是算法進(jìn)行信息加工后得到的結(jié)果,這種確定關(guān)系即為算法的功能。二、算法設(shè)計(jì)的原則二、算法設(shè)計(jì)的原則設(shè)計(jì)算法時(shí),通常應(yīng)考慮達(dá)到以下目標(biāo):1正確性正確性2. . 可讀性可讀性3健壯性健壯性4高效率與低存儲(chǔ)量需求高效率與低存儲(chǔ)量需求1 1正確性正確性 首先,首先,算法應(yīng)當(dāng)滿足滿足以特定的“規(guī)格規(guī)格說明說明”

21、方式給出的需求需求。 其次,其次,對(duì)算法是否“正確正確”的的理解可以有以下四個(gè)層次四個(gè)層次:a a程序中不含語(yǔ)法錯(cuò)誤;b b程序?qū)τ趲捉M輸入數(shù)據(jù)能夠得出滿足要求的結(jié)果; c c程序?qū)τ诰倪x擇的、典型、苛刻且程序?qū)τ诰倪x擇的、典型、苛刻且?guī)в械箅y性的幾組輸入數(shù)據(jù)能夠得出滿足帶有刁難性的幾組輸入數(shù)據(jù)能夠得出滿足要求的結(jié)果;要求的結(jié)果;通常以第 c c 層意義的正確性作為衡量一個(gè)算法是否合格的標(biāo)準(zhǔn)。 d d程序?qū)τ谝磺泻戏ǖ妮斎霐?shù)據(jù)都能得出滿足要求的結(jié)果;2. . 可讀性可讀性 算法主要是為了人的閱讀與交流閱讀與交流,其次才是為計(jì)算機(jī)執(zhí)行。因此算法應(yīng)該易易于于人的理解理解;另一方面,晦澀難讀的程

22、序易于隱藏較多錯(cuò)誤而難以調(diào)試;3健壯性健壯性 當(dāng)輸入的數(shù)據(jù)非法非法時(shí),算法應(yīng)當(dāng)恰當(dāng)?shù)刈鞒龇从郴蜻M(jìn)行相應(yīng)處理進(jìn)行相應(yīng)處理,而不是產(chǎn)生莫名奇妙的輸出結(jié)果。并且,處理出處理出錯(cuò)的方法錯(cuò)的方法不應(yīng)是中斷程序的執(zhí)行,而應(yīng)是返回返回一個(gè)表示錯(cuò)誤或錯(cuò)誤性質(zhì)的值表示錯(cuò)誤或錯(cuò)誤性質(zhì)的值,以便在更高的抽象層次上進(jìn)行處理。4高效率與低存儲(chǔ)量需求高效率與低存儲(chǔ)量需求 通常,效率指的是算法執(zhí)行時(shí)間;存儲(chǔ)量指的是算法執(zhí)行過程中所需的最大存儲(chǔ)空間。兩者都與問題的規(guī)模有關(guān)。三三、算法效率的、算法效率的 衡量方法和準(zhǔn)則衡量方法和準(zhǔn)則通常有兩種兩種衡量算法效率的方法: 事后統(tǒng)計(jì)法事后統(tǒng)計(jì)法事前分析估算法事前分析估算法缺點(diǎn):缺點(diǎn):

23、1。必須執(zhí)行程序 2。其它因素掩蓋算法本質(zhì)和算法執(zhí)行時(shí)間時(shí)間相關(guān)的因素因素:1 1算法算法選用的策略的策略2 2問題的規(guī)模問題的規(guī)模3 3編寫程序的語(yǔ)言語(yǔ)言4 4編譯編譯程序產(chǎn)生的機(jī)器代碼的質(zhì)量的質(zhì)量5 5計(jì)算機(jī)計(jì)算機(jī)執(zhí)行指令的速度的速度 一個(gè)特定算法的算法的“運(yùn)行工作量運(yùn)行工作量”的大小,只依賴于問題的規(guī)模(通常用整數(shù)量n表示),或者說,它是問題規(guī)模的函數(shù)是問題規(guī)模的函數(shù)。 假如,隨著問題規(guī)模 n 的增長(zhǎng),算法執(zhí)行時(shí)間的增長(zhǎng)率和算法執(zhí)行時(shí)間的增長(zhǎng)率和 f(n) 的增長(zhǎng)的增長(zhǎng)率相同率相同,則可記作:T (n) = O(f(n)稱稱T (n) 為算法的為算法的(漸近)時(shí)間復(fù)雜度時(shí)間復(fù)雜度如何估算

24、如何估算 算法的時(shí)間復(fù)雜度?算法的時(shí)間復(fù)雜度?算法算法 = = 控制結(jié)構(gòu)控制結(jié)構(gòu) + + 原操作原操作 (固有數(shù)據(jù)類型的操作)算法的執(zhí)行時(shí)間算法的執(zhí)行時(shí)間 =原操作原操作(i)(i)的執(zhí)行次數(shù)的執(zhí)行次數(shù)原操作原操作(i)(i)的執(zhí)行時(shí)間的執(zhí)行時(shí)間 算法的執(zhí)行時(shí)間算法的執(zhí)行時(shí)間 與與 原操作執(zhí)行次數(shù)之和原操作執(zhí)行次數(shù)之和 成正比成正比 從算法中選取一種對(duì)于所研究的問題來說是 基本操作基本操作 的原操作,以該基本操作 在算法中重復(fù)執(zhí)行的次在算法中重復(fù)執(zhí)行的次數(shù)數(shù) 作為算法運(yùn)行時(shí)間的衡量準(zhǔn)則。例例一一兩兩個(gè)個(gè)矩矩陣陣相相乘乘void mult(int a, int b, int& c ) / 以二維數(shù)組存儲(chǔ)矩陣元素,c 為 a 和 b 的乘積 for (i=1; i=n; +i) for (j=1; j=n; +j) ci,j = 0; for (k=1; k=n; +k) ci,j += ai,k*bk,j; /for /mult基本操作: 乘法乘法操作時(shí)間復(fù)雜度: O(n3)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論