freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

數(shù)據(jù)結(jié)構(gòu)與算法第六章清華大學出版社趙玉蘭(編輯修改稿)

2025-05-26 08:38 本頁面
 

【文章內(nèi)容簡介】 V5 V3 V7 V6 V8 例 0 1 2 3 1 3 4 2 data firstout 1 6 7 2 ^ ^ ^ adjvex link 4 5 5 ^ 3 7 1 ^ 6 7 8 5 6 7 6 ^ ^ ^ 深度遍歷: V1? V3 ? V7 ? V6 ? V2 ? V4 ? V8 ? V5 54 圖的遍歷 算法分析 ?圖中有 n 個頂點, e 條邊。 ?如果用鄰接矩陣存儲圖,則查找每一個頂點的所有的邊,所需時間為 O(n),則遍歷圖中所有的頂點所需的時間為 O(n2)。 ?如果用鄰接表存儲圖,在每一個單鏈 表中可以找到某個頂點 v 的所有鄰接頂點 w。由于總共有 2e 個邊結(jié)點 (無向圖 ),所以掃描邊的時間為 O(e)。而且對所有頂點遞歸訪問 1次,所以遍歷圖的時間復雜性為 O(n+e)。 55 圖的遍歷 廣度優(yōu)先遍歷 BFS( Breadth First Search) 思路 ?在訪問了起始頂點 v 之后,由 v 出發(fā),依次訪問 v 的所有未被訪問過的鄰接點 w1, w2, …, wt ,然后再順序訪問 w1, w2, …, wt 的所有未被訪問過的鄰接點。再從這些訪問過的頂點出發(fā),再訪問它們的所有未被訪問過的鄰接點, … ,如此重復,直到圖中所有頂點都被訪問完為止。 56 圖的遍歷 例 廣度優(yōu)先搜索過程 廣度優(yōu)先生成樹 57 圖的遍歷 說明 ?廣度優(yōu)先遍歷是一種分層的搜索過程,每向前走一步可能訪問一批頂點,不像深度優(yōu)先搜索那樣有往回退的情況。因此,廣度優(yōu)先遍歷不是一個遞歸的過程,其算法也不是遞歸的。 ?為了實現(xiàn)逐層訪問,算法中使用了一個隊列,以記憶正在訪問的頂點,以便向下一層訪問。 ?與深度優(yōu)先遍歷過程一樣,為避免重復訪問,需要一個輔助數(shù)組 visited [ n],對被訪問過的頂點加以標記。 58 圖的遍歷 算法思想 ? 1)清隊列 Q; ? 2)對出發(fā)頂點 v 做 ?v 入隊;標記 v; ? 3)當 Q 不空反復做: ?出隊頭元素到 u; ?訪問 u; ?將 u 的每個未被訪問的鄰接點 w 入隊;標記 w。 59 圖的遍歷 廣度優(yōu)先搜索算法 void BFS (int v){ //廣度優(yōu)先求圖的連通分量 Q=new Queue( ); //清隊列 Q (v); //每次從尚未訪問過的頂點中選取一個頂點 v visited[v]=1; //標記 v while (!()){ //Q不空 u=(); //出隊頭元素到 u visited(u); //訪問 u for (w=FirstAdjVex(u)。 w。 w=NextAdjVex(u, w)) if (!visited[w]) { (w); //將 u的每個未被訪問的鄰接點 w 入隊 visited[w]=1; } } }// BFS 60 圖的遍歷 ? BFS從出發(fā)點只能遍歷一個連通分量,若對任意圖的遍歷需要對每個分量中一個未被訪問的頂點為出發(fā)點進行 BFS遍歷。 void BFSTraverse(){ //廣度優(yōu)先求圖的連通分量 int visited[n]; //設(shè)置訪問標志數(shù)組 for (v=0; vn; v++) visited[v]=0; //初始化訪問標志 for (v=0; vn; v++) if (!visited[v]) BFS( v); } // BFSTraverse 61 圖的遍歷 例,廣度優(yōu)先遍歷序列,入隊序列,出隊序列。 V1 V3 V2 V4 V5 V6 V7 V8 遍歷序列: V1 V2 V3 V4 V5 V5 V6 V6 V7 V7 V8 V8 V4 V1 V2 V3 62 圖的遍歷 算法分析 ?如果用鄰接矩陣存儲圖,則對于每一個被訪問過的頂點,循環(huán)要檢測矩陣中的 n 個元素,總的時間代價為 O(n2)。 ?如果用鄰接表存儲圖,則循環(huán)的總時間代價為 D0 + D1 + … + D n1 = O(e),其中的 Di 是頂點 i 的度。而且對所有頂點訪問 1次,所以遍歷圖的時間復雜性為 O(n+e)。 63 圖的遍歷 DFS 與 BFS 之比較 ?空間復雜度相同,都是 O(n)(借用了堆棧或隊列); ?時間復雜度只與存儲結(jié)構(gòu)(鄰接矩陣或鄰接表)有關(guān),而與搜索路徑無關(guān)。 64 無向圖的應(yīng)用 —— 最小生成樹 生成樹 ?包含連通無向圖中全部頂點的極小連通子圖( n 個頂點、 n1 條邊) ?一個連通圖的生成樹不唯一 ?使用不同的遍歷圖的方法,可以得到不同的生成樹 ?從不同的頂點出發(fā),也可能得到不同的生成樹 ?對于非連通圖,通過圖的遍歷,得到的是生成森林 65 無向圖的應(yīng)用 —— 最小生成樹 例 ( a) 深度優(yōu)先生成樹 ( b) 廣度優(yōu)先生成樹 V1 V3 V2 V4 V5 V6 V7 V8 V1 V3 V2 V4 V5 V6 V7 V8 66 無向圖的應(yīng)用 —— 最小生成樹 最小生成樹 MST( Minimumcost Spanning Tree) ?連通無向網(wǎng)中 邊權(quán)之和 最小的生成樹 最小生成樹 MST的典型用途 ?假設(shè)在 7 個城市之間要建立通信網(wǎng)絡(luò)線,要求使得每個城市之間連通且費用最少。 數(shù)學模型 連通網(wǎng) —— 表示 7個城市間的通信網(wǎng) ?頂點 —— 表示城市 ?邊 ——— 表示城市間的通信線路 ?邊的權(quán)值 — 表示線路的經(jīng)濟代價 28 1 2 3 4 5 6 7 10 16 14 18 12 25 24 22 67 無向圖的應(yīng)用 —— 最小生成樹 構(gòu)造最小生成樹的準則 ?必須只使用該網(wǎng)絡(luò)中的邊來構(gòu)造最小生成樹; ?必須使用且僅使用 n1 條邊來連接網(wǎng)絡(luò)中的 n 個頂點; ?不能使用產(chǎn)生回路的邊。 求一個連通無向網(wǎng)中最小生成樹的方法 ? Prim 算法 ? Kruskal 算法 都是利用 MST的性質(zhì) 構(gòu)造最小生成樹 68 無向圖的應(yīng)用 —— 最小生成樹 最小生成樹的性質(zhì) ?若集合 U 是集合 V 的一個非空子集,若 (u, v) 是一條具有最小權(quán)值的邊,其中 u?U, v?VU;則:(u, v) 必在最小生成樹上。 U VU 69 無向圖的應(yīng)用 —— 最小生成樹 Prim 算法 ? Prim 算法的基本思想 ?設(shè)連通 N={ V, E }, T 是 N 的最小生成樹中邊的集合, U 是生成樹的頂點集合。 ?( 1) T={ } , U={ u } ( u 為任一頂點); ?( 2)在所有 u∈ U, v∈ VU 的邊 (u, v)∈ E 中找一條代價最小的邊 (u, v) 加入集合 T 中,同時 v 加入 U; ?( 3)重復( 2),直到 U=V 為止。 70 無向圖的應(yīng)用 —— 最小生成樹 ?例 0 1 2 6 3 4 5 28 16 12 22 25 10 25 14 18 T = { } U = { 0 } Min{10, 28}=10 (0,5) , 5 {25 }=25, (5,4) , 4 {28, 25, 22}=22 , (4,3) , 3 Min , , 18, 12}=12 , (3,2) , 2 , , 18, 16}=16 , (2,1) , 1 {25, 18, 14}=14 , (1,6) , 6 U=V,算法結(jié)束 71 無向圖的應(yīng)用 —— 最小生成樹 ? Prim 算法的實現(xiàn) ?圖的存儲:鄰接矩陣 ?在構(gòu)造過程中,還設(shè)置了一個輔助數(shù)組 closedge: ? 每個元素 closedge[v]有兩個域 – lowcost:存放生成樹頂點集合內(nèi)頂點到生成樹外各頂點v的各邊上的當前最小權(quán)值 – adjvex:記錄生成樹頂點集合外各頂點距離集合內(nèi)哪個頂點最近(即權(quán)值最小) 72 無向圖的應(yīng)用 —— 最小生成樹 ?從頂點 0出發(fā)利用 Prim算法構(gòu)造最小生成樹過程中輔助數(shù)組各分量的值的變化 i 1 2 3 4 5 6 closedge adjvex lowcost 0 28 0 ∞ 0 ∞ 0 ∞ 0 10 0 ∞ 525 422 424312 318 216i 1 2 3 4 5 6 edge adjvex lowcost 1140 1 2 3 4 5 6 U 1 0 0 0 0 0 0 5 25 0 10 114 22 13 12 12 16 11 14 173 無向圖的應(yīng)用 —— 最小生成樹 ?利用 Prim 算法求最小生成樹的算法 class AddArray{ int adjvex。 float lowcost。 }。// AddArray void MinSpanTree_Prim (int u, AddArray closedge[], AddArray edge[], AdjMatrix G){ // 設(shè)圖以鄰接矩陣存儲,用 Prim算法從頂點 u出發(fā)構(gòu)造網(wǎng) G的最小生成樹且保存到數(shù)組 edge中 for(v=0; vn; v++) U[v]=0; U[u]=1; for (v=0; v n; v++) if( u!=v) { closedge[v].adjvex=u。 74 無向圖的應(yīng)用 —— 最小生成樹 closedge[v].lowcost=[u][v]。 } for (t=1; tn; t++){ //選擇其余的 n1個頂點 k=minimum(closedge); // 求出 T的下一個頂點 k頂點 u=closedge[k].adjvex; edge[k].lowcost=[k][u]。 //保存選中邊的權(quán)值 edge[k].adjvex=u。 //保存選中邊的頂點 U[k]=1; for (j=0; jn; j++) if (U[j]==0 amp。amp。 closedge[j].lowcost[k][j]){ closedge[j].lowcost=[k][j]; closedge[j].adjvex=k; } }// for } // MinSpanTree_Prim 75 無向圖的應(yīng)用 —— 最小生成樹 ? Prime 算法分析 ?設(shè)連通無向網(wǎng)有 n 個頂點,則該算法的時間復雜度為O(n2) ?適用于稠密的網(wǎng)絡(luò) 76 無向圖的應(yīng)用 —— 最小生成樹 Kruscal 算法 ?基本思想 ?先構(gòu)造一個只含 n 個頂點、不含有邊的零圖 T ,然后從權(quán)值最小的邊開始,若它的添加不使 T 產(chǎn)生回路,則在 T 上加上這條邊,如此重復,直至加上 n1 條邊為止。
點擊復制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1