版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章數(shù)據(jù)的組織結(jié)構(gòu)與算法6.1數(shù)據(jù)結(jié)構(gòu)的基本概念6.2常用的幾種數(shù)據(jù)結(jié)構(gòu)6.3算法6.4程序設(shè)計(jì)方法16.1數(shù)據(jù)結(jié)構(gòu)的基本概念6.1.1數(shù)值計(jì)算與非數(shù)值計(jì)算數(shù)據(jù)是描述客觀事物的數(shù)值、字符以及能輸入機(jī)器且能被處理的各種符號(hào)集合。換句話說(shuō),數(shù)據(jù)對(duì)客觀事物采用計(jì)算機(jī)能夠識(shí)別、存貯和處理形式所進(jìn)行的描述。簡(jiǎn)言之,數(shù)據(jù)就是計(jì)算機(jī)化的信息。數(shù)學(xué)模型有定量模型和定性模型兩類(lèi)之分,定量模型指的是可以用數(shù)值方程表示的一類(lèi)計(jì)算模型,而定性模型則是指非數(shù)值性的數(shù)據(jù)結(jié)構(gòu),如表、樹(shù)和圖等及其運(yùn)算。2
數(shù)據(jù)結(jié)構(gòu)(DataStructure)問(wèn)題起源于程序設(shè)計(jì)的發(fā)展。第一個(gè)8008芯片只有4K的內(nèi)存,微軟的最初成立就是為這個(gè)芯片的機(jī)器編寫(xiě)B(tài)ASIC語(yǔ)言,優(yōu)化在每一處都非常重要。逐漸地,人們注意了數(shù)據(jù)表示與操作的結(jié)構(gòu)化,把一些確實(shí)能夠有效解決問(wèn)題的數(shù)據(jù)表示和算法總結(jié)出來(lái),如表、棧、隊(duì)、樹(shù)、圖(稍后會(huì)介紹這些術(shù)語(yǔ))等被單獨(dú)抽出研究,而這些方法便形成一門(mén)學(xué)問(wèn),這就是“數(shù)據(jù)結(jié)構(gòu)”這門(mén)學(xué)科的來(lái)源。6.1.2數(shù)據(jù)結(jié)構(gòu)的起源3數(shù)據(jù)結(jié)構(gòu)有邏輯上的數(shù)據(jù)結(jié)構(gòu)和物理上的數(shù)據(jù)結(jié)構(gòu)之分。邏輯上的數(shù)據(jù)結(jié)構(gòu)反映成分?jǐn)?shù)據(jù)之間的邏輯關(guān)系。物理上的數(shù)據(jù)結(jié)構(gòu)反映成分?jǐn)?shù)據(jù)在計(jì)算機(jī)內(nèi)部的存儲(chǔ)安排。6.1.3對(duì)數(shù)據(jù)結(jié)構(gòu)的理解41.表示對(duì)象/實(shí)體及其關(guān)系在計(jì)算機(jī)中的表示。只有對(duì)象及其相互關(guān)系已存儲(chǔ)(表示)在計(jì)算機(jī)中,才能被進(jìn)一步處理;2.操作:對(duì)對(duì)象/實(shí)體進(jìn)行處理、訪問(wèn)。數(shù)據(jù)結(jié)構(gòu)的一般定義:相互之間存在著一定關(guān)系的數(shù)據(jù)元素的集合及定義在其上的操作(運(yùn)算)稱(chēng)為數(shù)據(jù)結(jié)構(gòu)。51.插入:在數(shù)據(jù)結(jié)構(gòu)中的指定位置增添新的數(shù)據(jù)元素2.刪除:刪去數(shù)據(jù)結(jié)構(gòu)中指定的數(shù)據(jù)元素。3.查找:在數(shù)據(jù)結(jié)構(gòu)中尋找某個(gè)特定要求的數(shù)據(jù)元素。4.排序:(在線性結(jié)構(gòu)中)重新安排數(shù)據(jù)元素之間的邏輯順序關(guān)系,使之按某個(gè)關(guān)鍵字值由小到大或由大到小的次序排列。5.遍歷:按某一次序訪問(wèn)數(shù)據(jù)結(jié)構(gòu)中的每一個(gè)數(shù)據(jù)元素。6.1.4對(duì)數(shù)據(jù)結(jié)構(gòu)中數(shù)據(jù)元素的操作6
[例6.1]解一元二次方程ax2+bx+c=0.利用計(jì)算機(jī)解此方程,第一個(gè)問(wèn)題就是如何在計(jì)算機(jī)中表示該方程。分析該方程,可知決定方程的是方程的三個(gè)系數(shù)值:a、b、c,而它們的次序表示它們分別屬于那一項(xiàng),其他符號(hào)是為增加可讀性而引入的,因此,可用這三個(gè)系數(shù)的線性排列在計(jì)算機(jī)中表示該方程。例如:3x2-x+1=0表示為(3,-1,1)x2-3=0表示為(1,0,-3)在數(shù)據(jù)結(jié)構(gòu)中,將若干個(gè)數(shù)線性排列的數(shù)(元素)稱(chēng)為線性表,因此,一元二次方程ax2+bx+c=0就在計(jì)算機(jī)中表示為線性表(a,b,c)。解方程實(shí)質(zhì)上是對(duì)線性表(a,b,c)進(jìn)行操作。6.1.5數(shù)據(jù)結(jié)構(gòu)能解決什么問(wèn)題7定義變量X和一個(gè)線性表,如數(shù)組intS[3];
S[2],S[1],S[0]可以分別存放三個(gè)系數(shù)值輸入S[2],S[1],S[0]三個(gè)系數(shù)值輸入任意一個(gè)值X開(kāi)始S[2]*X*X+S[1]*X+S[0]<1E-5?輸出X結(jié)束YESNO8[例6-2]電話號(hào)碼查詢系統(tǒng)設(shè)有一個(gè)電話號(hào)碼薄,它記錄了N個(gè)人的名字和其相應(yīng)的電話號(hào)碼,假定按如下形式安排:(a1,b1)(a2,b2)…(ai,bi)其中ai,bi(i=1,2…n)分別表示某人的名字和對(duì)應(yīng)的電話號(hào)碼。要求設(shè)計(jì)一個(gè)算法,當(dāng)給定任何一個(gè)人的名字時(shí),該算法能夠打印出此人的電話號(hào)碼,如果該電話簿中根本就沒(méi)有這個(gè)人,則該算法也能夠報(bào)告沒(méi)有這個(gè)人的標(biāo)志。假定名字和其電話號(hào)碼邏輯上已安排成N元向量的形式,它的每個(gè)元素是一個(gè)數(shù)對(duì)(ai,bi),1≤i≤n。9[例6-3]家族成員的族譜表示一個(gè)家族的族譜就構(gòu)成了一個(gè)層次結(jié)構(gòu),在數(shù)據(jù)結(jié)構(gòu)中,稱(chēng)為樹(shù)。圖6-2給出了這種族譜關(guān)系。10一般般用用示示意意圖圖表表示示數(shù)數(shù)據(jù)據(jù)結(jié)結(jié)構(gòu)構(gòu)。。用小小圓圓圈圈代代表表數(shù)數(shù)據(jù)據(jù)元元素素,用小小圓圓圈圈之之間間的的連連線線代代表表小小圓圓圈圈對(duì)對(duì)應(yīng)應(yīng)的的數(shù)數(shù)據(jù)據(jù)元元素素具具有有的的關(guān)關(guān)系系,,如果果強(qiáng)強(qiáng)調(diào)調(diào)關(guān)關(guān)系系的的方方向向性性,,可可用用帶帶箭箭頭頭的的線線段段表表示示關(guān)關(guān)系系。。具體體地地講講,,若若d1和d2表示示兩兩個(gè)個(gè)數(shù)數(shù)據(jù)據(jù)元元素素,,它它們們具具有有關(guān)關(guān)系系<<d1,d2>,,則則表表示示為為如如圖圖6-3所所示示的的結(jié)結(jié)構(gòu)構(gòu)。。圖中中表表示示的的只只是是一一個(gè)個(gè)抽抽象象關(guān)關(guān)系系,,不不代代表表具具體體意意義義。。對(duì)對(duì)于于具具體體的的應(yīng)應(yīng)用用,,也也可可以以表表示示家家族族關(guān)關(guān)系系中中的的父父子子關(guān)關(guān)系系。。例例如如,,<<d1,d2>可代表d1是d2的父親。數(shù)數(shù)據(jù)結(jié)構(gòu)的的圖示116.2常用用的幾種數(shù)據(jù)據(jù)結(jié)構(gòu)根據(jù)數(shù)據(jù)元素素之間的關(guān)系系的不同,將將數(shù)據(jù)結(jié)構(gòu)的的邏輯結(jié)構(gòu)分分為集合結(jié)構(gòu)構(gòu)、線性結(jié)構(gòu)構(gòu)、樹(shù)狀結(jié)構(gòu)構(gòu)和圖結(jié)構(gòu)((圖6-4))。12
集合:數(shù)據(jù)元素間間除了“同屬屬于一個(gè)集合合”外,別無(wú)無(wú)其它關(guān)系。。
線性結(jié)構(gòu):數(shù)據(jù)元素間間存在一個(gè)對(duì)對(duì)一個(gè)的關(guān)系系。
樹(shù)形結(jié)構(gòu):數(shù)據(jù)元素間間存在一個(gè)對(duì)對(duì)多個(gè)的關(guān)系系。
圖或網(wǎng)狀結(jié)構(gòu)構(gòu):數(shù)據(jù)元素間間存在多個(gè)對(duì)對(duì)多個(gè)的關(guān)系系。6.2常用用的幾種數(shù)據(jù)據(jù)結(jié)構(gòu)131.棧(stack)棧是只能在某某一端插入和和刪除的特殊殊線性表。進(jìn)行刪除和插插入的一端稱(chēng)稱(chēng)棧頂,另一堆稱(chēng)棧底。插入一般稱(chēng)為為進(jìn)棧(Push),刪除則稱(chēng)為出棧(Pop)。棧也稱(chēng)為后進(jìn)進(jìn)先出表(LIFO:LastIn,FirstOut)。操作系統(tǒng)中的的中斷調(diào)用及及返回就是采采用棧結(jié)構(gòu)線線性結(jié)構(gòu)14隊(duì)列是限定在在一端進(jìn)行插插入,另一端端進(jìn)行刪除和和特殊線性表表。通常把隊(duì)列的的刪除和插入入分別稱(chēng)為出出隊(duì)和入隊(duì)。。允許出隊(duì)的的一端稱(chēng)為隊(duì)隊(duì)頭,允許入入隊(duì)的一端稱(chēng)稱(chēng)為隊(duì)尾。所所有需要進(jìn)隊(duì)隊(duì)的數(shù)據(jù)項(xiàng),,只能從隊(duì)尾尾進(jìn)入,隊(duì)列列中的數(shù)據(jù)項(xiàng)項(xiàng)只能從隊(duì)頭頭離去。由于于總是先入隊(duì)隊(duì)的元素先出出隊(duì)(先排隊(duì)隊(duì)的人先買(mǎi)完完?yáng)|西),這這種表也稱(chēng)為為先進(jìn)先表((FIFO::FirstIn,FirstOut))表。2.隊(duì)列151.鏈表是指指用一組任意意的存儲(chǔ)單元元來(lái)依次存放放線性表的數(shù)數(shù)據(jù)元素。2.在存儲(chǔ)每每個(gè)結(jié)點(diǎn)值的的同時(shí),必須須存儲(chǔ)指示其其后繼(或前前趨)結(jié)點(diǎn)的的地址(或位位置)信息,,這個(gè)信息稱(chēng)稱(chēng)為指針(pointer)或鏈(link)。如果鏈表表的每一個(gè)結(jié)結(jié)點(diǎn)只有一個(gè)個(gè)指針域,則則這種鏈表稱(chēng)稱(chēng)為單鏈表結(jié)結(jié)點(diǎn)結(jié)構(gòu),如如圖6-9(a)所示;;如果鏈表的的每一個(gè)結(jié)點(diǎn)點(diǎn)有兩個(gè)指針針域,則這種種鏈表稱(chēng)為雙雙鏈表結(jié)點(diǎn)結(jié)結(jié)構(gòu)。一個(gè)指指針域指向其其前趨結(jié)點(diǎn),,一個(gè)指針域域向其后繼結(jié)結(jié)點(diǎn)。如圖6-9(b)所示。3.鏈表16[例6.4]單循環(huán)鏈表的的應(yīng)用單循環(huán)鏈表的的一個(gè)典型例例子是約瑟夫環(huán)(JosephCircle),其描述如下下:編號(hào)為1,2,...,n的n個(gè)人人按順時(shí)針?lè)椒较驀蝗θ?,每人持有有一個(gè)密碼((正整數(shù))?!,F(xiàn)在給定一一個(gè)隨機(jī)數(shù)m>0,從編編號(hào)為1的人人開(kāi)始,按順順時(shí)針?lè)较?開(kāi)始順序報(bào)報(bào)數(shù),報(bào)到m時(shí)停止。報(bào)報(bào)m的人出圈圈,同時(shí)留下下他的密碼作作為新的m值值,從他在順順時(shí)針?lè)较蛏仙系南乱粋€(gè)人人開(kāi)始,重新新從1開(kāi)始報(bào)報(bào)數(shù),如此下下去,直至所所有的人出列列為止。17當(dāng)n和m較大時(shí),,用人工工求解約約瑟夫環(huán)環(huán)問(wèn)題是是相當(dāng)繁繁瑣的。。采用單循循環(huán)鏈表表就容易易解決。。其基本思思路是::n人圍成一一圈,把把一人看看成一個(gè)個(gè)結(jié)點(diǎn),,n人之間的的關(guān)系采采用鏈接接方式,,即每一一結(jié)點(diǎn)有有一個(gè)前前趨結(jié)點(diǎn)點(diǎn)和一個(gè)個(gè)后繼結(jié)結(jié)點(diǎn),每每一個(gè)結(jié)結(jié)點(diǎn)有一一個(gè)指針針指向下下一個(gè)結(jié)結(jié)點(diǎn),最最后一個(gè)個(gè)結(jié)點(diǎn)指指針指向向第一個(gè)個(gè)結(jié)點(diǎn)。。這就是是單循環(huán)環(huán)鏈的數(shù)數(shù)據(jù)結(jié)構(gòu)構(gòu)。當(dāng)m人出列時(shí)時(shí),將m結(jié)點(diǎn)的前前趨結(jié)點(diǎn)點(diǎn)指針指指向m結(jié)點(diǎn)的后后繼結(jié)點(diǎn)點(diǎn)指針,,即把m結(jié)點(diǎn)驅(qū)出出循環(huán)鏈鏈。181.樹(shù)的的定義樹(shù)是由一一個(gè)或多多個(gè)結(jié)點(diǎn)點(diǎn)組成的的有限集集合,如如圖6-12所所示。樹(shù)樹(shù)結(jié)構(gòu)19必有一個(gè)個(gè)特定的的稱(chēng)為根(ROOT)的的結(jié)點(diǎn),,根的每每個(gè)分支支稱(chēng)為子樹(shù)(sub-tree)),子樹(shù)樹(shù)也是一一棵樹(shù)樹(shù)中的每每一個(gè)結(jié)結(jié)點(diǎn)都可可以不止止一個(gè)直直接后繼繼,結(jié)點(diǎn)點(diǎn)的后繼繼結(jié)點(diǎn)稱(chēng)稱(chēng)為該結(jié)結(jié)點(diǎn)的““子結(jié)點(diǎn)點(diǎn)”(Children)除根結(jié)點(diǎn)點(diǎn)外的所所有結(jié)點(diǎn)點(diǎn)有且只只有一個(gè)個(gè)直接前前趨,結(jié)結(jié)點(diǎn)的前前趨結(jié)點(diǎn)點(diǎn)稱(chēng)為該該結(jié)點(diǎn)的的“父結(jié)結(jié)點(diǎn)”((Parent)同一父結(jié)結(jié)點(diǎn)的子子結(jié)點(diǎn)稱(chēng)稱(chēng)為“兄兄弟”((Sibling)結(jié)點(diǎn)下不不再有分分支的稱(chēng)稱(chēng)為樹(shù)葉葉(leaf)),或者者葉子結(jié)結(jié)點(diǎn)樹(shù)結(jié)構(gòu)的的特點(diǎn)20二叉樹(shù)的的特點(diǎn)::樹(shù)中的的每個(gè)結(jié)結(jié)點(diǎn)最多多只有兩兩棵子樹(shù)樹(shù),即樹(shù)樹(shù)中任何何結(jié)點(diǎn)的的度數(shù)不不得大于于2。二叉樹(shù)的的子樹(shù)有有左右之之分,稱(chēng)稱(chēng)為左子子樹(shù)和右右子樹(shù)。。而且子子樹(shù)的左左右次序序是重要要的,即即使在只只有一棵棵子樹(shù)的的情況下下,也應(yīng)應(yīng)分清楚楚。例如如圖6-13是是兩棵不不同的二二叉樹(shù)。。2.二叉叉樹(shù)21所謂遍歷歷二叉樹(shù)樹(shù),就是是按一定的的規(guī)則和和順序走走遍二叉叉樹(shù)的所所有結(jié)點(diǎn)點(diǎn),使每一一個(gè)結(jié)點(diǎn)點(diǎn)都被訪訪問(wèn)一次次,而且且只被訪訪問(wèn)一次次。二叉樹(shù)的的遍歷可可分為先序遍歷歷中序遍歷歷后序遍歷歷3.二叉叉樹(shù)的遍遍歷221.先序序遍歷遞遞歸算法法定義::若二叉樹(shù)樹(shù)非空,,則依次次執(zhí)行操操作:(1)訪問(wèn)問(wèn)根結(jié)點(diǎn)點(diǎn);(2)遍遍歷左左子樹(shù);;(3)遍遍歷右子子樹(shù)。ABDGECF2.中序遍歷歷遞歸算算法定義義:若二叉樹(shù)樹(shù)非空,,則依次次執(zhí)行操操作:(1)遍歷左左子樹(shù);;(2)訪問(wèn)問(wèn)根結(jié)點(diǎn)點(diǎn);(3)遍遍歷右子子樹(shù)。GDBEACF3.后序序遍歷遞遞歸算法法定義::若二叉樹(shù)樹(shù)非空,,則依次次執(zhí)行操操作:(1)遍歷左左子樹(shù);;(2)遍歷歷右子樹(shù)樹(shù);(3)訪訪問(wèn)根結(jié)結(jié)點(diǎn)。GDEBFCA23一個(gè)圖由由有限的的頂點(diǎn)((Vertices))和邊((Edge)組組成,所所以可形形式化地地用G=(V,E))代表一個(gè)個(gè)圖。圖圖中的結(jié)結(jié)點(diǎn)稱(chēng)為為頂點(diǎn),,頂點(diǎn)之之間的連連線代表表邊。圖圖結(jié)構(gòu)24圖(Graph)是由由非空的的頂點(diǎn)集集合和一一個(gè)描述述頂點(diǎn)之之間關(guān)系系――邊邊(或者者?。┑牡募辖M組成。其形式化化定義為為:G==(V,,E)V={vi|vi∈∈dataobject}E={(vi,vj)|vi,vj∈V∧P(vi,vj)}其中,G表示一一個(gè)圖,,V是圖圖G中頂頂點(diǎn)的集集合,E是圖G中邊的的集合,,集合E中P(vi,vj)表示頂頂點(diǎn)vi和頂點(diǎn)點(diǎn)vj之之間有一一條直接接連線,,即偶對(duì)對(duì)(vi,vj)表示示一條邊邊。圖圖結(jié)構(gòu)25下圖(無(wú)無(wú)向圖G1)給給出了一一個(gè)圖的的示例,,在該圖圖中:集合V=={v1,v2,v3,v4};集合E=={(v1,v3),(v1,v4),(v2,v3),(v2,v4),(V3,V4)}圖圖結(jié)構(gòu)26如果數(shù)據(jù)據(jù)結(jié)構(gòu)中中,數(shù)據(jù)據(jù)元素之之間不考考慮關(guān)系系問(wèn)題((無(wú)前趨趨/后繼繼之分)),則稱(chēng)稱(chēng)這種結(jié)結(jié)構(gòu)為集合。在集合合中,各各元素是是“平等等”的,,它們的的共同關(guān)關(guān)系是::都屬于于同一個(gè)個(gè)集合。。集合276.3算算法算算法的特特性算法是對(duì)對(duì)問(wèn)題求求解過(guò)程程的一種種描述,,是為解解決一個(gè)個(gè)或一類(lèi)類(lèi)問(wèn)題給給出的一一個(gè)確定定的、有有限長(zhǎng)的的操作序序列。1.有窮窮性2.確定定性3.可行行性4.有輸輸入5.有輸輸出28算法的五五個(gè)特性性(1)有窮性::對(duì)任何合合法的輸輸入值,,一個(gè)算算法必須須總是在在執(zhí)行有有窮步之之后結(jié)束束,且每每一步都都可在有有窮時(shí)間間內(nèi)完成成;(2)確定性::算法中每每一條指指令必須須有確切切的含義義,不會(huì)會(huì)產(chǎn)生二二義性,,對(duì)于相相同的輸輸入只能能得出相相同的輸輸出。(3)可行性::即算法中中描述的的操作都都可以通通過(guò)已經(jīng)經(jīng)實(shí)現(xiàn)的的基本運(yùn)運(yùn)算執(zhí)行行有限次次來(lái)實(shí)現(xiàn)現(xiàn)的。(4)輸入:一個(gè)算法法有0個(gè)個(gè)或多個(gè)個(gè)輸入,,這些輸輸入取自自于某個(gè)個(gè)特定的的數(shù)據(jù)對(duì)對(duì)象的集集合,它它可以使使用輸入語(yǔ)句句從外部提提供,也也可以在在算法內(nèi)內(nèi)通過(guò)賦初值給定。(5)輸出:一個(gè)算法法有一個(gè)個(gè)或多個(gè)個(gè)的輸出出,這些些輸出是是同輸入入有著某某些特定定關(guān)系的的量。29在設(shè)計(jì)算算法時(shí),,通常應(yīng)應(yīng)考慮以以下原則則:首先設(shè)計(jì)計(jì)的算法法必須是是“正確的”其次應(yīng)有有很好的的“可讀性”,還必必須具有有“健壯性”最后還應(yīng)應(yīng)考慮所所設(shè)計(jì)算算法的復(fù)復(fù)雜性,,即有““高效率與與低存儲(chǔ)儲(chǔ)量”。什什么是““好”的的算法30算法的正正確性所謂算法法的正確性,也稱(chēng)可可靠性或或有效性性,是指指:程序不含含語(yǔ)法錯(cuò)錯(cuò)誤。程序?qū)τ谟趲捉M輸輸入的數(shù)數(shù)據(jù)能夠夠得出滿滿足規(guī)格格說(shuō)明要要求的結(jié)結(jié)果。程序?qū)τ谟诰倪x選擇的典典型、苛苛刻而帶帶有刁難難性的幾幾組輸入入數(shù)據(jù)能能夠得出出滿足規(guī)規(guī)格說(shuō)明明要求的的結(jié)果。。程序?qū)τ谟谝磺泻虾戏ǖ妮斴斎霐?shù)據(jù)據(jù)都能產(chǎn)產(chǎn)生滿足足規(guī)格說(shuō)說(shuō)明要求求的結(jié)果果。31在算法是是正確的的前提下下,算法法的可讀性是擺在第第一位的的??勺x讀性好有有助于人人們對(duì)算算法的理理解,難難懂的程程序易隱隱藏較多多錯(cuò)誤,,難以調(diào)調(diào)試和修修改。算法的效率指的是算算法執(zhí)行行時(shí)計(jì)算算機(jī)資源源的消耗耗,它包包括運(yùn)行行時(shí)間代代價(jià)和存存儲(chǔ)空間間代價(jià)。。算法的健壯性指的是,,算法應(yīng)應(yīng)對(duì)非法法輸入的的數(shù)據(jù)做做出恰當(dāng)當(dāng)反映或或進(jìn)行相相應(yīng)處理理。它強(qiáng)強(qiáng)調(diào)的是是,如果果輸入非非法數(shù)據(jù)據(jù)時(shí),算算法應(yīng)能能加以識(shí)識(shí)別并做做出處理理,而不不是產(chǎn)生生誤動(dòng)作作或陷入入癱瘓。。32算法的復(fù)復(fù)雜性是是算法運(yùn)運(yùn)行所需需要的計(jì)計(jì)算機(jī)資資源的量量。算法法的復(fù)雜雜性是算算法效率率的度量量,是評(píng)評(píng)價(jià)算法法優(yōu)劣的的重要依依據(jù)。算法的復(fù)復(fù)雜性有有時(shí)間復(fù)雜雜性和空間復(fù)雜雜性之分。需要的時(shí)時(shí)間資源源的量,,即算法法的運(yùn)行行速度,,稱(chēng)作時(shí)間復(fù)雜雜性。需要的空空間(即即存儲(chǔ)器器)資源源的量稱(chēng)稱(chēng)作空間復(fù)雜雜性。算算法復(fù)雜雜性331.自然然語(yǔ)言自然語(yǔ)言言是人們們?nèi)粘K玫恼Z(yǔ)語(yǔ)言,如如漢語(yǔ)、、英語(yǔ)、、德語(yǔ)等等。例如,求求3個(gè)數(shù)中中最大者者的問(wèn)題題,可以以描述為為:①比較較前兩個(gè)個(gè)數(shù)。②將①①中較大大的數(shù)與與第三個(gè)個(gè)數(shù)進(jìn)行行比較。。③步驟驟②中較較大的數(shù)數(shù)即為所所求。算算法的表表示342.流程程圖流程圖是是描述算算法的常常用工具具。它采采用美國(guó)國(guó)國(guó)家標(biāo)標(biāo)準(zhǔn)化協(xié)協(xié)會(huì)ANSI((AmericanNationalStandardInstitute)規(guī)定定的一組組圖形符符號(hào)來(lái)表表示算法法起止框判斷框處理框輸入/輸出框注釋框流向線連接點(diǎn)353.偽代代碼偽代碼是是用介于于自然語(yǔ)語(yǔ)言和計(jì)計(jì)算機(jī)語(yǔ)語(yǔ)言之間間的文字字和符號(hào)號(hào)來(lái)描述述算法的的工具。。它不用用圖形符符號(hào),因因此書(shū)寫(xiě)寫(xiě)方便格格式緊湊湊,易于于理解,,便于向向計(jì)算機(jī)機(jī)程序設(shè)設(shè)計(jì)語(yǔ)言言過(guò)渡。。例:求兩兩個(gè)數(shù)的的較大者者,用偽偽代碼描描述算法法如下::FindthebiggerInput:twonumbers:a,b1.if(thefirstnumberaisgreaterthanorequaltothesecondnumberb)then1.1returnaelse1.2returnbendifend364.計(jì)算算機(jī)程序序設(shè)計(jì)語(yǔ)語(yǔ)言一般而言言,計(jì)算算機(jī)程序序設(shè)計(jì)語(yǔ)語(yǔ)言描述述的算法法是清晰晰的、簡(jiǎn)簡(jiǎn)明的,,最終也也能由計(jì)計(jì)算機(jī)處處理的,,然而也也不是完完善無(wú)缺缺。它需需要設(shè)計(jì)計(jì)者用特特定程序序設(shè)計(jì)語(yǔ)語(yǔ)言編寫(xiě)寫(xiě)的算法法,限制制了與他他人的交交流;容容易陷入入描述計(jì)計(jì)算步驟驟的細(xì)節(jié)節(jié)而忽視視算法的的本質(zhì)。。376.4程程序設(shè)設(shè)計(jì)方法法計(jì)計(jì)算機(jī)程程序的性性質(zhì)計(jì)算機(jī)程序包包含兩方面的的內(nèi)容:對(duì)象及對(duì)象之之間關(guān)系(數(shù)數(shù)據(jù)結(jié)構(gòu));;描述對(duì)這些對(duì)對(duì)象進(jìn)行處理理的加工規(guī)則則(算法)。。38目的性—程序有明確確的目的,程程序運(yùn)行時(shí)能能完成賦予它它的功能。分步性—程序?yàn)橥瓿沙善鋸?fù)雜的功功能,由一系系列計(jì)算機(jī)可可執(zhí)行的步驟驟組成。有序性—程序的執(zhí)行行步驟是有序序的,不可隨隨意改變程序序步驟的執(zhí)行行順序。有限性—程序是有限限的指令序列列,程序所包包含的步驟是是有限的。操作性—有意義的程程序總是對(duì)某某些對(duì)象進(jìn)行行操作,使其其改變狀態(tài),,完成其功能能。計(jì)算機(jī)程序具具有以下性質(zhì)質(zhì):39數(shù)據(jù)結(jié)構(gòu)是數(shù)數(shù)據(jù)構(gòu)造的邏邏輯表示形式式,算法是處處理問(wèn)題的方方法和步驟,,最后問(wèn)題的的解由計(jì)算機(jī)機(jī)程序給出。。這是程序員員在程序設(shè)計(jì)計(jì)時(shí)應(yīng)考慮的的主要問(wèn)題。。程程序設(shè)計(jì)計(jì)與數(shù)據(jù)結(jié)構(gòu)構(gòu)、算法之間間的關(guān)系401.程序的控制結(jié)結(jié)構(gòu)一個(gè)可以用順序、選擇、、循環(huán)和跳轉(zhuǎn)轉(zhuǎn)(如goto語(yǔ)句)四種程程序結(jié)構(gòu)解決決的問(wèn)題,也也一定能用順順序、選擇、、循環(huán)三種程程序結(jié)構(gòu)解決決。但確實(shí)存在這這樣的問(wèn)題,,它可以用順順序、選擇、、循環(huán)三種程程序結(jié)構(gòu)解決決,但不能用用其中任何兩兩種解決。換句話說(shuō),順順序、選擇、、循環(huán)三種程程序結(jié)構(gòu)構(gòu)成成了一個(gè)最小小完備集。我我們將這三種種程序結(jié)構(gòu)叫叫基本程序結(jié)構(gòu)構(gòu)。結(jié)結(jié)構(gòu)化程序序設(shè)計(jì)41三種基本結(jié)構(gòu)構(gòu)的圖示:順序結(jié)構(gòu)選擇結(jié)構(gòu)42循環(huán)結(jié)構(gòu)的圖圖示:當(dāng)型(While型)循循環(huán)結(jié)構(gòu)直到型(Until型)循環(huán)43順序程序設(shè)計(jì)計(jì)44分支結(jié)構(gòu)45循環(huán)結(jié)構(gòu)462.結(jié)構(gòu)化程程序設(shè)計(jì)方法法結(jié)構(gòu)化程序設(shè)設(shè)計(jì)方法主要要包括程序結(jié)結(jié)構(gòu)的自頂向向下和模塊化化設(shè)計(jì)方法。。47程序設(shè)計(jì)的一一般步驟如下下:1.分析問(wèn)題題對(duì)要解決的問(wèn)問(wèn)題,首先必必須分析清楚楚,明確題目目的要求,列列出所有已知知量,找出題題目的求解范范圍、解的精精度等。2.建立數(shù)學(xué)學(xué)模型對(duì)實(shí)際問(wèn)題進(jìn)進(jìn)行分析之后后,找出它的的內(nèi)在規(guī)律,,就可以建立立數(shù)學(xué)模型。。只有建立了了模型的問(wèn)題題,才能可能能利用計(jì)算機(jī)機(jī)來(lái)解決。3.確定算法法建立數(shù)學(xué)模型型后,還不能能著手編程序序,必須根據(jù)據(jù)數(shù)據(jù)結(jié)構(gòu),,確定解決問(wèn)問(wèn)題的算法。。一般確定算算法要注意::算法的邏輯結(jié)結(jié)構(gòu)盡可能簡(jiǎn)簡(jiǎn)單;算法所要求的的存貯量應(yīng)盡盡可能少;在滿足題目條條件要求下,,使所需的計(jì)計(jì)算量最小。程程序設(shè)計(jì)的的步驟484.編寫(xiě)程序序把整個(gè)程序看看作一個(gè)整體體,先全局后后局部,自頂頂向下,一層層一層分解處處理,如果某某些子問(wèn)題的的算法相同而而僅參數(shù)不同同,可以用子子程序來(lái)表示示。5.調(diào)試運(yùn)行行;6.分析結(jié)果果;7.寫(xiě)出程序序的文檔主要是對(duì)程序序中的變量、、函數(shù)或過(guò)程程作必要的說(shuō)說(shuō)明,解釋編編程思路,需需要時(shí)給出程程序流程圖,,并討論運(yùn)行行結(jié)果。499、靜夜四無(wú)無(wú)鄰,荒居居舊業(yè)貧。。。1月-231月-23Sunday,January1,202310、雨中中黃葉葉樹(shù),,燈下下白頭頭人。。。20:48:1820:48:1820:481/1/20238:48:18PM11、以我我獨(dú)沈沈久,,愧君君相見(jiàn)見(jiàn)頻。。。1月-2320:48:1820:48Jan-2301-Jan-2312、故人江海別別,幾度隔山山川。。20:48:1920:48:1920:48Sunday,January1,202313、乍見(jiàn)翻翻疑夢(mèng),,相悲各各問(wèn)年。。。1月-231月-2320:48:1920:48:19January1,202314、他鄉(xiāng)生白白發(fā),舊國(guó)國(guó)見(jiàn)青山。。。01一月月20238:48:19下下午20:48:191月-2315、比不了了得就不不比,得得不到的的就不要要。。。。一月238:48下午午1月-2320:48January1,202316、行動(dòng)動(dòng)出成成果,,工作作出財(cái)財(cái)富。。。2023/1/120:48:1920:48:1901January202317、做前,能夠夠環(huán)視四周;;做時(shí),你只只能或者最好好沿著以腳為為起點(diǎn)的射線線向前。。8:48:19下午8:48下下午20:48:191月-239、沒(méi)有失敗敗,只有暫暫時(shí)停止成成功!。1月-231月-23Sunday,January1,202310、很很多多事事情情努努力力了了未未必必有有結(jié)結(jié)果果,,但但是是不不努努力力卻卻什什么么改改變變也也沒(méi)沒(méi)有有。。。。20:48:1920:48:1920:481/1/20238:48:19PM11、成功就就是日復(fù)復(fù)一日那那一點(diǎn)點(diǎn)點(diǎn)小小努努力的積積累。。。1月-2320:48:1920:48Jan-2301-Jan-2312、世間成成事,不不求其絕絕對(duì)圓滿滿,留一一份不足足,可得得無(wú)限完完美。。。20:48:1920:48:1920:48Sunday,January1,202313、不知知香積積寺,,數(shù)里里入云云峰。。。1月-231月-2320:48:1920:48:19January1,202314、意意志志堅(jiān)堅(jiān)強(qiáng)強(qiáng)的的人人能能把把世世
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)境衛(wèi)生保安工作總結(jié)
- 印刷品包裝質(zhì)量檢測(cè)技術(shù)
- 2024年設(shè)備監(jiān)理師考試題庫(kù)附答案(奪分金卷)
- 2024年設(shè)備監(jiān)理師考試題庫(kù)帶答案ab卷 (一)
- 《高級(jí)財(cái)務(wù)會(huì)計(jì)》復(fù)習(xí)大綱
- 分布式能源系統(tǒng)合作開(kāi)發(fā)合同(2篇)
- 通關(guān)08 跨學(xué)科主題專(zhuān)練(解析版)
- 第4單元 經(jīng)濟(jì)大危機(jī)和第二次世界大戰(zhàn)(B卷·能力提升練)(解析版)
- 2025聘用勞動(dòng)合同標(biāo)準(zhǔn)版
- 2024年度天津市公共營(yíng)養(yǎng)師之三級(jí)營(yíng)養(yǎng)師能力測(cè)試試卷B卷附答案
- 西安信息職業(yè)大學(xué)《工程管理導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- CNC技理考(含答案)
- 電氣領(lǐng)域知識(shí)培訓(xùn)課件
- 金融產(chǎn)品分類(lèi)介紹
- 2024-2025學(xué)年上學(xué)期深圳初中語(yǔ)文七年級(jí)期末模擬卷2
- 河南省鄭州市2024-2025學(xué)年高一數(shù)學(xué)上學(xué)期期末考試試題含解析
- BOSS GT-6效果處理器中文說(shuō)明書(shū)
- 浙江省杭州市拱墅區(qū)2023-2024學(xué)年六年級(jí)(上)期末數(shù)學(xué)試卷
- 2024廣東煙草專(zhuān)賣(mài)局校園招聘筆試管理單位遴選500模擬題附帶答案詳解
- 2024房地產(chǎn)合同更名申請(qǐng)表
- 突發(fā)事件及自救互救學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
評(píng)論
0/150
提交評(píng)論