




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)表達(dá)一種非線性邏輯關(guān)系具有“頂點(diǎn)”和“頂點(diǎn)之間關(guān)系”兩類要素:頂點(diǎn)的前驅(qū)和后繼數(shù)目無(wú)限制頂點(diǎn)之間關(guān)系是任意的任意2頂點(diǎn)之間均可能直接或間接關(guān)聯(lián)應(yīng)用場(chǎng)合——非常廣泛:邏輯推理戰(zhàn)場(chǎng)支援體系產(chǎn)品裝配活動(dòng)
預(yù)警機(jī)
偵察機(jī)
戰(zhàn)斗機(jī)
地面雷達(dá)SEAD飛機(jī)
通信衛(wèi)星
電子干擾機(jī)
導(dǎo)航衛(wèi)星1第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)定義:一種復(fù)雜的非線性數(shù)據(jù)結(jié)構(gòu),由頂點(diǎn)集合及頂點(diǎn)間的關(guān)系(也稱弧或邊)集合組成??梢员硎緸椋?/p>
G=(V,{<VR>})
其中:
V
是頂點(diǎn)的有窮非空集合;
<VR>是頂點(diǎn)之間關(guān)系的有窮集合,也叫做弧或邊集合。
弧是頂點(diǎn)的有序?qū)?,邊是頂點(diǎn)的無(wú)序?qū)Α?第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)基本術(shù)語(yǔ):有向圖無(wú)向圖
頂點(diǎn):圖中的數(shù)據(jù)元素。
v2v1v3v4G1v2v1v3v4v5G2
?。喝?lt;v,w>∈VR,則<v,w>表示從v到w的一條弧,且稱v
為弧尾,稱w
為弧頭,此時(shí)的圖稱為有向圖。
G1=(V1,{A1})V1={v1,v2,v3,v4}
A1={<v1,v2>,<v1,v3>,<v3,v4>,<v4,v1>}
邊:若<v,w>∈VR必有<w,v>∈VR,則以無(wú)序?qū)?v,w)代表這兩個(gè)有序?qū)?,表示v和w之間的一條邊,此時(shí)的圖稱為無(wú)向圖。
G2=(V2,{E2})V2={v1,v2,v3,v4,v5}
E2={(v1,v2),(v1,v4),(v2,v3),(v2,v5),(v3,v4),(v3,v5)}3第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)基本術(shù)語(yǔ):
無(wú)向圖中邊的取值范圍:0≤e≤n(n-1)/2。(用n表示圖中頂點(diǎn)數(shù)目,用e
表示邊的數(shù)目。且不考慮頂點(diǎn)到其自身的邊。)
完全圖:有
n(n-1)/2條邊的無(wú)向圖(即:無(wú)向圖中每?jī)蓚€(gè)頂點(diǎn)之間都存在著一條邊)稱為完全圖。
有向完全圖:有
n(n-1)條弧的有向圖(即:有向圖中每?jī)蓚€(gè)頂點(diǎn)之間都存在著方向相反的兩條?。┓Q為有向完全圖。v2v1v3v4v5
有向圖中弧的取值范圍:0≤e≤n(n-1)。(用n表示圖中頂點(diǎn)數(shù)目,用e
表示弧的數(shù)目。且不考慮頂點(diǎn)到其自身的弧。)
v2v1v3v44第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)基本術(shù)語(yǔ):
稀疏圖:含有很少條邊或弧的圖。
稠密圖:含有很多條邊或弧的接近完全圖的圖。
權(quán):與圖的邊或弧相關(guān)的數(shù),這些數(shù)可以表示從一個(gè)頂點(diǎn)到另一個(gè)頂點(diǎn)的距離或耗費(fèi)。
網(wǎng):邊或弧帶有權(quán)值的圖。北京國(guó)際上海虹橋570675虹橋機(jī)場(chǎng)交大徐匯19.055第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)基本術(shù)語(yǔ):v3v4v5
子圖:如果圖
G=(V,{E})和
G′=(V
′,{E′}),滿足:V
′V且E′E,則稱G′為G
的子圖。v2v1v3v4v2v1v3v4v5v1v1v3v2v1v4v2v1v5v2v1v4v5v2v1v5
鄰接點(diǎn):若(v,v′)是一條邊,則稱頂點(diǎn)v和v′互為鄰接點(diǎn),或稱v和v′相鄰接;稱邊(v,v′)依附于頂點(diǎn)v
和v′,或稱(v,v′)與頂點(diǎn)v
和v′相關(guān)聯(lián)。
若<v,v′>是一條弧,則稱頂點(diǎn)v
鄰接到
v′,頂點(diǎn)v′鄰接自頂點(diǎn)v。并稱弧
<v,v′>與頂點(diǎn)v
和v′相關(guān)聯(lián)。v2v1v4第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)基本術(shù)語(yǔ):
度:無(wú)向圖中頂點(diǎn)v
的度是和v
相關(guān)聯(lián)的邊的數(shù)目,記為:TD(v)。v2v1v3v4v5
入度:有向圖中以頂點(diǎn)v
為頭的弧的數(shù)目稱為v
的入度,記為:ID(v)。
出度:有向圖中以頂點(diǎn)v
為尾的弧的數(shù)目稱為v
的出度,記為:OD(v)。
度:入度和出度之和,即:TD(v)=ID(v)+OD(v)。v2v1v3v4
如果頂點(diǎn)vi
的度為T(mén)D(vi),則一個(gè)有n
個(gè)頂點(diǎn)
E條邊(?。┑膱D,滿足如下關(guān)系:第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)基本術(shù)語(yǔ):
路徑:從頂點(diǎn)v
到v′的路徑是一個(gè)頂點(diǎn)序列(v=vi,0,vi,1,…,vi,m=v′),滿足
(vi,j-1,vi,j)VR
或<vi,j-1,vi,j>VR,(1jm)。對(duì)于有向圖,路徑也是有向的。
v2v1v3v4v5v2v1v3v4
路徑長(zhǎng)度:路徑上邊或弧的數(shù)目。
回路(環(huán)):第一個(gè)頂點(diǎn)和最后一個(gè)頂點(diǎn)相同的路徑。
簡(jiǎn)單路徑:序列中頂點(diǎn)(兩端點(diǎn)除外)不重復(fù)出現(xiàn)的路徑。
簡(jiǎn)單回路(簡(jiǎn)單環(huán)):前后兩端點(diǎn)相同的簡(jiǎn)單路徑。
連通:從頂點(diǎn)v
到
v′有路徑,則說(shuō)
v
和
v′是連通的。
連通圖:圖中任意兩個(gè)頂點(diǎn)都是連通的。
v2v1v3v4v5
非連通圖:有n
個(gè)頂點(diǎn)和小于n-1條邊的圖。第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)基本術(shù)語(yǔ):
連通分量:無(wú)向圖的極大連通子圖(不存在包含它的更大的連通子圖);任何連通圖的連通分量只有一個(gè),即其本身;非連通圖有多個(gè)連通分量(非連通圖的每一個(gè)連通部分)。v2v1v3v4v5v2v1v3v4v5
強(qiáng)連通圖:任意兩個(gè)頂點(diǎn)都連通的有向圖。v2v1v3v4
強(qiáng)連通分量:有向圖的極大強(qiáng)連通子圖;任何強(qiáng)連通圖的強(qiáng)連通分量只有一個(gè),即其本身;非強(qiáng)連通圖有多個(gè)強(qiáng)連通分量。v2v1v3v4v2v1v3v4第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)基本術(shù)語(yǔ):
生成樹(shù):所有頂點(diǎn)均由邊連接在一起,但不存在回路的圖。v2v1v3v4v5v2v1v3v4v5v2v1v3v4v5v2v1v3v4v5性質(zhì):一個(gè)圖可以有許多棵不同的生成樹(shù)所有生成樹(shù)具有以下共同特點(diǎn):
生成樹(shù)的頂點(diǎn)個(gè)數(shù)與圖的頂點(diǎn)個(gè)數(shù)相同;生成樹(shù)是圖的極小連通子圖;一個(gè)有n
個(gè)頂點(diǎn)的連通圖的生成樹(shù)有
n-1條邊;
生成樹(shù)中任意兩個(gè)頂點(diǎn)間的路徑是唯一的;
在生成樹(shù)中再加一條邊必然形成回路。
含n
個(gè)頂點(diǎn)
n-1條邊的圖不一定是生成樹(shù)。
v2v1v3v4v5第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)基本術(shù)語(yǔ):
生成森林:對(duì)于非連通圖,其每個(gè)連通分量可以構(gòu)造一棵生成樹(shù),合成起來(lái)就是一個(gè)生成森林。
有向樹(shù):如果一個(gè)有向圖恰有一個(gè)頂點(diǎn)的入度為0,其余頂點(diǎn)的入度均為1,則是一棵有向樹(shù)。
有向圖的生成森林:由若干棵有向樹(shù)組成,含有圖中全部頂點(diǎn),但只有足以構(gòu)成若干棵不相交的有向樹(shù)的弧。B
A
CF
ED
B
A
DF
EC
第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu):1、多重鏈表法v1v2^^v4^v3^^v1
v2
v4^
v5^
v3v2v1v3v4G1v2v1v3v4v5G2第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu):2、鄰接矩陣法(數(shù)組存儲(chǔ))
對(duì)于一個(gè)具有n
個(gè)頂點(diǎn)的圖,可用兩個(gè)數(shù)組存儲(chǔ)。其中一個(gè)一維數(shù)組存儲(chǔ)數(shù)據(jù)元素(頂點(diǎn))的信息,另一個(gè)二維數(shù)組(圖的鄰接矩陣)存儲(chǔ)數(shù)據(jù)元素之間的關(guān)系(邊或?。┑男畔?。
鄰接矩陣:設(shè)G=(V,{VR})是具有n
個(gè)頂點(diǎn)的圖,頂點(diǎn)的順序依次為
{v1,v2,…,vn},則G的鄰接矩陣是具有如下性質(zhì)的n
階方陣:
第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)v2v1v3v4G1v2v1v3v4v5G2v1
v2
v3
v4
v1
v2v3v4v1
v2v3v4v5基本性質(zhì):
無(wú)向圖的鄰接矩陣對(duì)稱,可壓縮存儲(chǔ);有n
個(gè)頂點(diǎn)的無(wú)向圖需存儲(chǔ)空間為
n(n-1)/2。
有向圖鄰接矩陣不一定對(duì)稱;有
n
個(gè)頂點(diǎn)的有向圖需存儲(chǔ)空間
為
n2,空間復(fù)雜度為O(n2),用于稀疏圖時(shí)空間浪費(fèi)嚴(yán)重。
無(wú)向圖中頂點(diǎn)
vi
的度
TD(vi)是鄰接矩陣中第
i
行
1的個(gè)數(shù)。
有向圖中
頂點(diǎn)
vi
的出度是鄰接矩陣中第
i
行
1的個(gè)數(shù)。頂點(diǎn)
vi
的入度是鄰接矩陣中第
i
列
1的個(gè)數(shù)。第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)網(wǎng)的鄰接矩陣:
v2v1v3v4v5v65489755613v1
v2
v3
v4
v5v6v1
v2v3v4v5v6第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu):3、鄰接表法頭結(jié)點(diǎn)datafirstarc表結(jié)點(diǎn)adjvexnextarcinfov2v1v3v4v5G2v1v3v4v2v5012343^142^043^12^02^1鏈域,指示下一條邊或弧。
特點(diǎn):
若無(wú)向圖中有n
個(gè)頂點(diǎn)、e
條邊,則其鄰接表需n
個(gè)頭結(jié)點(diǎn)和2e
個(gè)表結(jié)點(diǎn)。適宜存儲(chǔ)稀疏圖。
無(wú)向圖中頂點(diǎn)vi
的度為第i
個(gè)單鏈表中的結(jié)點(diǎn)數(shù)。
鄰接點(diǎn)域,存放與
vi
鄰接的頂點(diǎn)在表頭數(shù)組中的位置。
第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)有向圖的鄰接表:
v2v1v3v4G101232^13^^0v1v3v4v2^0123^30^^2v1v3v4v2^0鄰接表逆鄰接表
頂點(diǎn)vi
的出度為第i
個(gè)單鏈
表中的結(jié)點(diǎn)個(gè)數(shù)。
特點(diǎn):
頂點(diǎn)vi的入度為整個(gè)單鏈表
中鄰接點(diǎn)域值是
i-1的結(jié)點(diǎn)
個(gè)數(shù)。找出度易,找入度難。找入度易,找出度難。
頂點(diǎn)vi
的入度為第i
個(gè)單鏈
表中的結(jié)點(diǎn)個(gè)數(shù)。
頂點(diǎn)vi的出度為整個(gè)單鏈表
中鄰接點(diǎn)域值是
i-1的結(jié)點(diǎn)
個(gè)數(shù)。第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)基本操作類型:構(gòu)造圖結(jié)構(gòu)銷毀圖結(jié)構(gòu)訪問(wèn)頂點(diǎn):獲取頂點(diǎn)位置、獲取頂點(diǎn)數(shù)值、獲取頂點(diǎn)的鄰接點(diǎn)頂點(diǎn)賦值插入頂點(diǎn)刪除頂點(diǎn)添加邊或弧刪除邊或弧遍歷頂點(diǎn):深度優(yōu)先、廣度優(yōu)先
……
18第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)基本操作——遍歷:從圖的任意指定頂點(diǎn)出發(fā),依照某種規(guī)則去訪問(wèn)圖中所有頂點(diǎn),且每個(gè)頂點(diǎn)僅被訪問(wèn)一次,這一過(guò)程叫做圖的遍歷。按照深度優(yōu)先和廣度優(yōu)先規(guī)則:深度優(yōu)先遍歷法(Depth_FirstSearch——DFS)廣度優(yōu)先遍歷法(Breadth_FristSearch——BFS)V1V2V4V5V3V7V6V8第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)圖的深度優(yōu)先遍歷(DFS)——與樹(shù)的“先序遍歷”類似方法:1、訪問(wèn)指定的起始頂點(diǎn);
2、若當(dāng)前訪問(wèn)的頂點(diǎn)的鄰接頂點(diǎn)有未被訪問(wèn)的,則任選一個(gè)訪問(wèn)之;反之,退回到最近訪問(wèn)過(guò)的頂點(diǎn);直到與起始頂點(diǎn)相通的全部頂點(diǎn)都訪問(wèn)完畢;
3、若此時(shí)圖中尚有頂點(diǎn)未被訪問(wèn),則再選其中一個(gè)頂點(diǎn)
作為起始頂點(diǎn)并訪問(wèn)之,轉(zhuǎn)
2;反之,遍歷結(jié)束。例:
V1頂點(diǎn)訪問(wèn)次序:V2V4V8V5V3V6V7
V1V2V5V8V4V3V6V7
V1V2V4V8V5V3V7V6
V1V2V5V8V4V3V7V6
V1V3V6V7V2V4V8V5
V1V2V4V5V3V7V6V8注:通常為每個(gè)頂點(diǎn)設(shè)立一個(gè)“訪問(wèn)標(biāo)志”,以解決鄰接頂點(diǎn)是否已經(jīng)訪問(wèn)問(wèn)題。第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)
1370V1V2V4V8V5V301234567^^V1V2V3V4V5V6V7V82^13^156^7^7^6^00000000012345672V65V76V1V2V4V5V3V7V6V8411111111有向圖深度優(yōu)先遍歷舉例:第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)圖的廣度優(yōu)先遍歷(BFS)例:
頂點(diǎn)訪問(wèn)次序:V1V2V4V5V3V7V6V8注:通常為每個(gè)頂點(diǎn)設(shè)立一個(gè)“訪問(wèn)標(biāo)志”,以解決鄰接頂點(diǎn)是否已經(jīng)訪問(wèn)問(wèn)題。
方法:從圖的某一結(jié)點(diǎn)出發(fā),首先依次訪問(wèn)該結(jié)點(diǎn)的所有鄰接頂點(diǎn)Vi1,Vi2,…,Vin
再按這些頂點(diǎn)被訪問(wèn)的先后次序依次訪問(wèn)與它們相鄰接的所有未被訪問(wèn)的頂點(diǎn),重復(fù)此過(guò)程,直至所有頂點(diǎn)均被訪問(wèn)為止。V1V2V3V4V5V6V7V8
V1V3V2V7V6V5V4V8
V1V2V3V5V4V7V6V8
第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)圖應(yīng)用舉例——裝配活動(dòng)建模第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)鄰接矩陣表達(dá):第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖(Graph)結(jié)構(gòu)第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖結(jié)構(gòu)習(xí)題:1、在一個(gè)圖中,所有頂點(diǎn)的度數(shù)之和與所有邊數(shù)之間存在什么關(guān)系?2、在一個(gè)有向圖中,所有頂點(diǎn)的入度之和與所有頂點(diǎn)的出度之和之間存在什么關(guān)系?3、一個(gè)有n個(gè)頂點(diǎn)的無(wú)向圖最多有多少條邊?4、具有6個(gè)頂點(diǎn)的無(wú)向圖至少應(yīng)有多少條邊才能確保是一個(gè)連通圖?5、對(duì)于一個(gè)具有n個(gè)頂點(diǎn)和e條邊的無(wú)向圖,若采用鄰接表表示,則表頭數(shù)組的大小是多少?所有鄰接表中的結(jié)點(diǎn)總數(shù)是多少?第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法圖結(jié)構(gòu)習(xí)題:6、根據(jù)右圖,寫(xiě)出其鄰接矩陣表達(dá)式;并從v2出發(fā)按深度優(yōu)先搜索和廣度優(yōu)先搜索算法遍歷得到所有可能的頂點(diǎn)序列7、一個(gè)有向圖的鄰接表如右圖所示,畫(huà)出該圖的邏輯結(jié)構(gòu),并求出根據(jù)深度優(yōu)先搜索算法從頂點(diǎn)v1出發(fā)遍歷得到的頂點(diǎn)序列第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法排序——其他算法的基礎(chǔ)之一主要內(nèi)容:1、插入排序(直接插入排序、折半插入排序、希爾排序);2、交換排序(起泡排序、快速排序);3、選擇排序(簡(jiǎn)單選擇排序);
內(nèi)部排序和外部排序:若整個(gè)排序過(guò)程不需要訪問(wèn)外存便能完成,則稱此類排序問(wèn)題為內(nèi)部排序;若參加排序的記錄數(shù)量很大,整個(gè)序列的排序過(guò)程不可能在內(nèi)存中完成,則稱此類排序問(wèn)題為外部排序。29第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法排序
定義:將數(shù)據(jù)元素的一個(gè)任意序列,重新排列成一個(gè)按關(guān)鍵字有序的序列。例:將關(guān)鍵字序列:52,49,80,36,14,58,61,23調(diào)整為:14,23,36,49,52,58,61,80
按主關(guān)鍵字排序則結(jié)果惟一。按次關(guān)鍵字排序則結(jié)果可以不惟一(有相同關(guān)鍵字)
設(shè)Ki、Kj
(1≤i≤n,1≤j≤n,i≠j)分別為記錄Ri、Rj
的關(guān)鍵字,且Ki=Kj
,在排序前的序列中Ri
領(lǐng)先于Rj(即i<j)。若在排序后的序列中Ri
仍領(lǐng)先于Rj,則稱所用的排序方法穩(wěn)定;反之,則稱所用的排序方法不穩(wěn)定。例:設(shè)排序前的關(guān)鍵字序列為:52,49,80,36,14,58,36,23
若排序后的關(guān)鍵字序列為:14,23,36,36,49,52,58,80,則排序方法是穩(wěn)定的。若排序后的關(guān)鍵字序列為:14,23,36,36,49,52,58,80,則排序方法是不穩(wěn)定的。30第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法排序1、插入排序有序序列R[1..i-1]R[i]無(wú)序序列R[i..n](1)一趟直接插入排序的基本思想:有序序列R[1..i]無(wú)序序列R[i+1..n]實(shí)現(xiàn)“一趟插入排序”可分三步進(jìn)行:3步.將R[i]插入(復(fù)制)到R[j+1]的位置上。2步.將R[j+1..i-1]中的所有記錄均后移一個(gè)位置;1步.在R[1..i-1]中查找R[i]的插入位置,
R[1..j].keyR[i].key<R[j+1..i-1].key;
排序過(guò)程:先將序列中第
1
個(gè)記錄看成是一個(gè)有序子序列,
然后從第
2
個(gè)記錄開(kāi)始,逐個(gè)進(jìn)行插入,直至整個(gè)序列有序。
31第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法排序比較次數(shù)和移動(dòng)次數(shù)均約為:T(n)=O(n2)時(shí)間復(fù)雜度:比較次數(shù):移動(dòng)次數(shù):0最好的情況:待排序記錄按關(guān)鍵字從小到大排列(正序)比較次數(shù):移動(dòng)次數(shù):最壞的情況:待排序記錄按關(guān)鍵字從大到小排列(逆序)
一般情況:待排序記錄是隨機(jī)的,取平均值。
空間復(fù)雜度:S(n)=O(1)直接插入排序是穩(wěn)定排序54321第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法排序(2)折半插入排序:用折半查找方法確定插入位置的排序T(n)=O(n2)時(shí)間復(fù)雜度:空間復(fù)雜度:S(n)=O(1)穩(wěn)定性:折半插入排序是穩(wěn)定排序僅減少了比較次數(shù),移動(dòng)次數(shù)不變。第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法排序(3)希爾排序:基本思想是對(duì)待排序列先作“宏觀”調(diào)整,再作“微觀”調(diào)整第二趟希爾排序第三趟分組,設(shè)d3=1
排序過(guò)程:先取一個(gè)正整數(shù)d1<n,把所有相隔
d1
的記錄放
在一組內(nèi),組內(nèi)進(jìn)行直接插入排序;然后取
d2<d1,重復(fù)上述分
組和排序操作;直至
di=1,即所有記錄放進(jìn)一個(gè)組中排序?yàn)橹埂?/p>
其中
di
稱為增量。例:49386597761327495504第一趟希爾排序1327495504493865977613044938274955659776第三趟希爾排序第一趟分組,設(shè)d1=54938
6597761327
495504
13274955044938659776第二趟分組,設(shè)d2=304132738494955657697第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法排序希爾排序特點(diǎn):
分組不是簡(jiǎn)單的“逐段分割”,而是將相隔某個(gè)增量的記錄組成一個(gè)子序列。
增量序列取法希爾最早提出的選法是d1=n/2,di+1=di/2??伺?Knuth)提出的選法是di+1=(di-1)
/3。還有其他不同的取法。。
1)、沒(méi)有除1以外的公因子;
2)、最后一個(gè)增量值必須為1。
希爾排序可提高排序速度
1)、記錄跳躍式前移,在進(jìn)行最后一趟排序時(shí),已基本有序。
2)、分組后n
值減小,n2更小,而
T(n)=O(n2),所以
T(n)從
總體上看是減小了。
第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法排序1、交換排序
(1)冒泡法3、重復(fù)直到
“在一趟排序
過(guò)程中沒(méi)有進(jìn)行過(guò)交換記錄的操
作”或“僅第一二個(gè)交換過(guò)”為止。
1、比較第一個(gè)記錄與第二個(gè)記錄,若關(guān)鍵字為逆序則交換;然
后比較第二個(gè)記錄與第三個(gè)記錄;
依次類推,直至第
n-1個(gè)記錄和第
n
個(gè)記錄比較為止——第一趟冒泡
排序,結(jié)果關(guān)鍵字最大的記錄被安
置在最后一個(gè)記錄上。
2、對(duì)前
n-1個(gè)記錄進(jìn)行第二
趟冒泡排序,結(jié)果使關(guān)鍵字次大的
記錄被安置在第
n-1個(gè)記錄位置。
初始關(guān)鍵字第一趟排序979727384965761327499738496513274976第二趟排序384913274965第三趟排序3813274949
第四趟排序13273849第五趟排序132738第六趟排序4938659776132749第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法排序
時(shí)間復(fù)雜度:
最好情況(正序)比較次數(shù):n-1移動(dòng)次數(shù):0
T(n)=O(n)
最壞情況(逆序)比較次數(shù):移動(dòng)次數(shù):
T(n)=O(n2)
空間復(fù)雜度:S(n)=O(1)
穩(wěn)定性:穩(wěn)定排序第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法排序s一般取第一個(gè)記錄
基本思想:任選一個(gè)記錄,以它的關(guān)鍵字作為“樞軸”,凡關(guān)鍵字小于樞軸的記錄均移至樞軸之前,凡關(guān)鍵字大于樞軸的記錄均移至樞軸之后。(2)一趟快速排序(一次劃分)lowhigh設(shè)R[s]=52為樞軸。例:
5252498036145861972375t
附設(shè)兩個(gè)指針low和high,從high所指位置起向前搜索找到第一個(gè)關(guān)鍵字小于樞軸的關(guān)鍵字的記錄與樞軸記錄交換,然后從low+1所指位置起向后搜索找到第一個(gè)關(guān)鍵字大于樞軸的關(guān)鍵字的記錄與樞軸記錄交換,重復(fù)這兩步直至low=high為止。high23lowlow80highhighhighhigh14lowlow52第二部分?jǐn)?shù)據(jù)結(jié)構(gòu)與算法排序(3)快速排序——首先對(duì)無(wú)序的記錄序列進(jìn)行“一次劃分”,之后分別對(duì)分割所得兩個(gè)子序列“遞歸”進(jìn)行一趟快速排序快速排序過(guò)程無(wú)序的記錄序列無(wú)序記錄子序列(1)無(wú)序子序列(2)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度企業(yè)并購(gòu)融資借款合同概念與風(fēng)險(xiǎn)防范
- 2025年度林業(yè)資源恢復(fù)承包合同
- 二零二五年度個(gè)體店面轉(zhuǎn)讓及消費(fèi)者權(quán)益保障協(xié)議
- 2025年度電子商務(wù)合同法爭(zhēng)議解決與法律顧問(wèn)服務(wù)合同
- 2025年度汽車美容店員工福利待遇及保障合同樣本
- 二零二五年度養(yǎng)殖場(chǎng)勞務(wù)合同(養(yǎng)殖產(chǎn)業(yè)鏈一體化)
- 二零二五年度技術(shù)合伙人股權(quán)合作與技術(shù)培訓(xùn)協(xié)議
- 二零二五年度安置房產(chǎn)權(quán)交易與配套設(shè)施移交合同
- 二零二五年度教育品牌使用權(quán)授權(quán)合同
- 2025年度電工安全風(fēng)險(xiǎn)評(píng)估與預(yù)防合同協(xié)議
- 2025年服裝制版師(中級(jí))職業(yè)技能鑒定考試題(附答案)
- 部編版六年級(jí)下冊(cè)道德與法治全冊(cè)教案教學(xué)設(shè)計(jì)
- 物流無(wú)人機(jī)垂直起降場(chǎng)選址與建設(shè)規(guī)范
- 前列腺癌的診斷與治療課件
- 產(chǎn)品開(kāi)發(fā)的變更流程
- 氣管鏡科室講課ppt課件(PPT 69頁(yè))
- 無(wú)創(chuàng)呼吸機(jī)的應(yīng)用(飛利浦偉康V60)課件
- 口腔修復(fù)學(xué)-第七章-牙列缺失的全口義齒修復(fù)
- 對(duì)于二氧化碳傳感器的現(xiàn)狀及發(fā)展趨勢(shì)的淺分析
- 麥語(yǔ)言函數(shù)手冊(cè)參考模板
- 知情同意書(shū)-北京大學(xué)腫瘤醫(yī)院
評(píng)論
0/150
提交評(píng)論