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

正文內(nèi)容

軟件綜合實(shí)習(xí)報(bào)告合集(專業(yè)版)

  

【正文】 在這個(gè)算法的實(shí)現(xiàn)過(guò)程中,邊通分量的查找雖然是深度優(yōu) 先搜索為主,但是是以最小生成樹(shù)的的生成過(guò)程為主,因此這里所采用的畫(huà)圖操做運(yùn)行的情況和使用一般的方法實(shí)現(xiàn) kruskal 算法的運(yùn)行過(guò)程是一樣的,在這里不再給予詳細(xì)的說(shuō)明,如有必要?jiǎng)t可以參照 kruskal的生成最小生成樹(shù)的過(guò)程。 設(shè)計(jì)與實(shí)現(xiàn) Kruskal 算法利用并查集實(shí)現(xiàn)查找、合并的設(shè)計(jì)與實(shí)現(xiàn)也是首先選擇權(quán)值最小的邊,其次是利用并查集來(lái)對(duì)所要選擇的那些頂點(diǎn)進(jìn)行查找、合并。 ( 3)在圖 G的邊的集合 E中按存儲(chǔ)次序選擇權(quán)值最小的邊,即( 6,7)由于邊( 6,7)在( 2,3)后面存儲(chǔ),所以后選擇 邊( 6,7),其權(quán)重為 1。因此首先將圖 G 的頂點(diǎn)集合 V 分為 n 個(gè)等價(jià)類(lèi),每個(gè)等價(jià)類(lèi)包括一個(gè)頂點(diǎn);然后以權(quán)值的大小為順序處理各條邊,如果某條邊連接兩個(gè)不同等價(jià)類(lèi)的頂點(diǎn),則這條邊被添加到 MST(選取的邊不與前面選取的邊構(gòu)成回路),兩個(gè)等價(jià)類(lèi)被合并為一個(gè);反復(fù)執(zhí)行此過(guò)程,直到只剩下一個(gè)等價(jià)類(lèi)。 當(dāng)最小生成樹(shù)生成完畢時(shí),則調(diào)用 Draw( E)函數(shù)畫(huà)出生成的過(guò)程。選出滿足該條件的邊,將 vj 加入 V(MST), (vi,vj)加入 E(MST),之后畫(huà)出相應(yīng)的邊和新添加進(jìn)去的頂點(diǎn)。 這里主要分為六個(gè)模塊,即 prime 算法模塊、 kruskal 算法模塊、用并查集實(shí)現(xiàn) kruskal算法的模塊、 kruskal算法和深度優(yōu)先搜索算法結(jié)合的模塊、 kruskal 算法和廣度優(yōu)先搜索算法結(jié)合的模塊以及畫(huà)圖操作的相關(guān)模塊。這就需要找到帶權(quán)的最小生成樹(shù)。對(duì)于使用 kruskal 算法和深度優(yōu)先搜索結(jié)合的算法,對(duì)邊的遍歷至多是 e 此故其總代價(jià)為 O(n^2*e)。 圖( 3) 通過(guò)上面 prime 算法的解析結(jié)果和運(yùn)行結(jié)果發(fā)現(xiàn)其運(yùn)行結(jié)果與分析中應(yīng)該得到的結(jié)果是一致的,由于畫(huà)圖和判斷中采用的有延長(zhǎng)運(yùn)行時(shí)間的函數(shù),因此這里只通過(guò)理論分析得出 prime算法的運(yùn)行效率。因此主要包含兩個(gè)方面,即隊(duì)列這一數(shù)據(jù)結(jié)構(gòu)中相關(guān)函數(shù)的設(shè)計(jì)與實(shí)現(xiàn),以及如何實(shí)現(xiàn)深度優(yōu)先搜索算法判斷變量通分量的設(shè)計(jì)與實(shí)現(xiàn)。 ( 1)棧: 這里使用到的與棧相關(guān)的操作主要有棧中數(shù)據(jù)的初始化StackInitiate、將數(shù)據(jù)壓入棧的操作 StackPush、將數(shù)據(jù)彈出棧的操作 StackPop、判斷棧是否為空的操作 StackNotEmpty 和得到棧頂元素的操作 StackTop。 ( 2)繼續(xù)向下查找得到邊( 6,7),判斷點(diǎn) 6 和點(diǎn) 7 是否已經(jīng)訪問(wèn)過(guò)了,由于數(shù)組 check 中相應(yīng)的值為 0,因此合并這兩個(gè)結(jié)點(diǎn),得到新的集合 { 7}。 ( 2)初始化過(guò)程:為了方便并查集的描述與實(shí)現(xiàn),通常把先后加入到一個(gè)集合中的元素表示成一個(gè)樹(shù)形結(jié)構(gòu),并用根節(jié)點(diǎn)來(lái)代表這個(gè)集合。此時(shí)集合變?yōu)?{1}、 { 4}、 {5}、 { 7}。 ( 4)如果不符合( 2)中的判斷則不斷的重復(fù)直到選取的邊等于n1。在 n 個(gè)頂點(diǎn)的圖中,選夠 n1條邊即可。 ( 4)集合 V(MST)此時(shí)已經(jīng)有四個(gè)頂點(diǎn)了,即 4,找到與之相連的符合條件的邊 (v4,v5)將權(quán)值為 3的邊添加到 E(MST)中,并將頂點(diǎn) 5 添加到 V(MST)中并畫(huà)出此邊。在這些算法運(yùn)行過(guò)程中實(shí)現(xiàn)的畫(huà)圖操作主要通過(guò)調(diào)用一個(gè)公用的函數(shù)進(jìn)行畫(huà)圖的相關(guān)操作。 測(cè)試數(shù)據(jù)如下: 圖( 1) 問(wèn)題分析通過(guò)問(wèn)題的描述,可知這一道題目主要涉及,面向?qū)ο蟮姆治雠c設(shè)計(jì),數(shù)據(jù)結(jié)構(gòu)和算法。通過(guò)這些利用知識(shí)實(shí)現(xiàn)Kruskal 算法和 Prim 算法從而得到圖的最小生成樹(shù)。 二.詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) Prime 算法的基本思想是以圖中的某一個(gè)頂點(diǎn)作為起始頂點(diǎn),然后從起始頂點(diǎn)出發(fā)不斷的從還沒(méi)有遍歷到的頂點(diǎn)中選擇與已經(jīng)遍歷到的頂點(diǎn)存在之間權(quán)值最小邊的頂點(diǎn),并將新遍歷的點(diǎn)不斷的添加到已經(jīng)遍歷的頂點(diǎn)集合中。 ( 5)集合 V(MST)此時(shí)已經(jīng)有五個(gè)頂點(diǎn)了,即 5,找到與之相連的符合條件的邊 (v4,v6)將權(quán)值為 4 的邊添加到 E(MST)中,并將頂點(diǎn) 6 添加到 V(MST)中并畫(huà)出此邊。具體如下: ( 1) 構(gòu)造一個(gè)只有 n 個(gè)頂點(diǎn)沒(méi)有邊的非連通圖 T,圖中的每個(gè)頂點(diǎn)為一個(gè)連通分量。 ( 5)當(dāng)最小生成樹(shù)生成完畢時(shí),則調(diào)用 Draw( E)函數(shù)畫(huà)出生成的過(guò)程。通過(guò)判斷畫(huà)出發(fā)生改變的集合 { 4}。這里定義一個(gè) parent[n]的數(shù)組, parent[i]中存儲(chǔ)的就是結(jié)點(diǎn)i 所在的樹(shù)中的結(jié)點(diǎn) i父親結(jié)點(diǎn)的序號(hào),并查集的初始化中所有的 結(jié)點(diǎn)的 parent值均為 1,即每個(gè)結(jié)點(diǎn)就是根節(jié)點(diǎn),只包含它本身這一個(gè)元素。同時(shí)通過(guò)深度優(yōu)先搜索對(duì)這兩個(gè)結(jié)點(diǎn)分別進(jìn)行判斷及標(biāo)記已經(jīng)訪問(wèn)過(guò)了。 ( 2)查找與合并:在深度優(yōu)先搜索中首先判斷是否需要標(biāo)記此節(jié)點(diǎn),如果需要標(biāo)記此節(jié)點(diǎn)則將此節(jié)點(diǎn)標(biāo)記為以訪問(wèn)過(guò),并添加到已經(jīng)訪問(wèn)過(guò)的結(jié)點(diǎn)的集合中,并將相應(yīng)的邊存入 E[]中;如果是要進(jìn)行判斷兩個(gè)結(jié)點(diǎn)是不是都已經(jīng)訪問(wèn) 過(guò)了,及是否屬于同一個(gè)集合利用棧來(lái)不斷的搜索其中一個(gè)結(jié)點(diǎn)所在的集合中是否有另一個(gè)結(jié)點(diǎn),如果存在則舍棄當(dāng)前所選擇的邊,否則選擇此邊為最小生成樹(shù)的一邊。由于對(duì)隊(duì)列已經(jīng)比較熟悉,在這里僅作簡(jiǎn)要的說(shuō)明。 圖 (4) 通過(guò)上面 kruskal 算法的解析結(jié)果和運(yùn)行結(jié)果發(fā) 現(xiàn)其運(yùn)行結(jié)果與分析中應(yīng)該得到的結(jié)果是一致的,由于畫(huà)圖和判斷中采用的有延長(zhǎng)運(yùn)行時(shí)間的函數(shù),因此這里只通過(guò)理論分析得出 kruskal 算法的運(yùn)行效率。 四.總結(jié)這個(gè)題目的主要要求是通過(guò)使用不同的算法求出圖的最小生成樹(shù),并且通過(guò)畫(huà)圖動(dòng)態(tài)的顯示出來(lái)其不同的算法在求解最小生成樹(shù)時(shí)的運(yùn)行步驟。 基本的要求是實(shí)現(xiàn)兩種算法:通過(guò)實(shí)現(xiàn) Kruskal 算法和 Prim 算法來(lái)得到圖的最小生成樹(shù)。設(shè)計(jì)與實(shí)現(xiàn)中由于所體現(xiàn)的重點(diǎn)不同,因此下面的說(shuō)明主要圍繞著此題的重點(diǎn),即最小生成樹(shù)的生成過(guò)程。 下面主要通過(guò)題目中給出的例子(如圖 1)對(duì) prime 算法進(jìn)行詳細(xì)的解析: ( 1)將 1 作為起始頂點(diǎn)添加到 V(MST),找到與之相連的符合條件的邊 (v1,v2),將權(quán)值為 5 的邊添加到 E(MST)中,并將頂點(diǎn) 2 添加到V(MST)中并畫(huà)出此邊。 動(dòng)態(tài)演示模塊 Kruskal 算法通常是在已知 V(MST)=V(G), E(MST)的初態(tài)為空時(shí)對(duì)圖 G 進(jìn)行相關(guān)處理的到最小生成樹(shù)的。 kruskal 算法的設(shè)計(jì)與實(shí)現(xiàn)如下所述(具 體的代碼實(shí)現(xiàn)見(jiàn)附錄): ( 1)對(duì)所畫(huà)區(qū)域進(jìn)行刷新。此時(shí)集合變?yōu)?{1}、 { 3}、 {4}、 {5}、 { 7}。在 Kruskal 使用并查集時(shí)首先對(duì)其進(jìn)行邊集合的排序,接著利用并查集對(duì)圖 G 中的頂點(diǎn)進(jìn)行初始化,每一個(gè)頂點(diǎn)當(dāng)做一個(gè)集合,同時(shí)給其一個(gè)相關(guān)的變量標(biāo)志其集合中頂點(diǎn)的數(shù)目;然后利用并查集判斷此時(shí)的頂點(diǎn)所在集合是不是相同,如果不相同則合并這兩個(gè)頂點(diǎn)所在的集合。對(duì)于深度優(yōu)先搜索方法的實(shí)現(xiàn)這里使用的方法是通過(guò)利用棧這一數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)的。其基本思想是:對(duì)于一個(gè)無(wú)向連通圖,從某一個(gè)起始結(jié)點(diǎn) vi 出發(fā),訪問(wèn)與它相連的一個(gè)結(jié)點(diǎn) vj,且 vi、 vj這兩個(gè)結(jié)點(diǎn)之間的邊( vi、 vj)是所有以 vi 為連接結(jié)點(diǎn)的邊中權(quán)值最小的;然后再?gòu)?vj 出發(fā)尋找與 vj 相連的頂點(diǎn),且它們之間的邊是所有以 vi 為連接結(jié)點(diǎn)的邊中權(quán)值最小的,不斷的重復(fù)直到找到訪問(wèn)完所有的結(jié)點(diǎn)為止。 至此 kruskal 算法利用并查集查找、合并的過(guò)程結(jié)束,通過(guò)kruskal算法得到最小生成樹(shù)及生成過(guò)程,其最小生成樹(shù)的權(quán)值為 16。通過(guò)判斷畫(huà)出發(fā)生改變的集合 { 3}。 模塊設(shè)計(jì)與實(shí)現(xiàn) Kruskal 算法的實(shí)現(xiàn)主要包含兩個(gè)部分,即帶權(quán)值的邊的排序和判斷選取的邊的兩個(gè)頂點(diǎn)是否屬于同一個(gè)連通分量。 存 第 k 個(gè)頂點(diǎn)的數(shù)據(jù)和相應(yīng)邊的權(quán)值到 MST 中,并將lowCost[k]置為 1,表示第 k 個(gè)頂點(diǎn)從集合 V(G)- V(MST)加入了集合V(MST)中 當(dāng)?shù)?k 個(gè)頂點(diǎn)加入到集合 V(MST)后,若存在一條邊 (k,j),其中 k 是集合 V(MST)的頂點(diǎn), j是集合 V(G)- V(MST)的頂點(diǎn),且邊 (k,j)權(quán)值較原先 lowCost[j]的代價(jià)更小,則用這個(gè)權(quán)值修正原先 lowCost[j]中的權(quán)值。 ( 2) (vi,vj)是關(guān)聯(lián)于 V(MST)中頂點(diǎn)的邊中權(quán)值最小的邊。 在深度優(yōu)先搜索算法( BreadthFirstSearch)中使用 了棧這一數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)邊的連通分量的查詢,對(duì)廣度優(yōu)先搜索算法(DepthFirstSearch)的實(shí)現(xiàn)使用了隊(duì)列這一數(shù)據(jù)結(jié)構(gòu),這里的隊(duì)列和棧都是通過(guò)編程實(shí)現(xiàn)。例如:要在 n 個(gè)城市之間鋪設(shè)光纜,主要目標(biāo)是要使這 n 個(gè)城市的任意兩個(gè)之間都可以通信,但鋪設(shè)光纜的費(fèi)用很高,且各個(gè)城市之 間鋪設(shè)光纜的費(fèi)用不同;另一個(gè)目標(biāo)是要使鋪設(shè)光纜的總費(fèi)用最低。 Kruskal 運(yùn)用并查集實(shí)現(xiàn)中使用了路徑壓縮, Find 和 UNION 函數(shù)幾乎是常數(shù)假設(shè)可能對(duì)幾乎所有邊都判斷過(guò)了,則最壞情況下算法時(shí)間代價(jià)為 O(eloge),即堆排序的時(shí)間通常情況下只找了接近頂點(diǎn)數(shù)目那么多邊的情況下, MST就已經(jīng)生成,時(shí)間代價(jià)接近于 O(nloge) 深度優(yōu)先搜索對(duì)每一條邊處理一次,每個(gè)頂點(diǎn)訪問(wèn)一次以鄰接矩陣作存儲(chǔ)結(jié)構(gòu):處理所有的邊需 O(nn^2)的時(shí)間,故總代價(jià)為 O(n^2)。通過(guò)觀察可知這六條邊應(yīng)為( 2,3)、( 6,7)、( 2,4)、( 4,5)、( 4,6)、( 1,2)。 廣度優(yōu)先搜索的實(shí)現(xiàn)主要利用隊(duì)列這一數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)。由于對(duì)棧已經(jīng) 比較熟悉,在這里僅作簡(jiǎn)要的說(shuō)明。同時(shí)通過(guò)深度優(yōu)先搜索對(duì)這兩個(gè)結(jié)點(diǎn)分別進(jìn)行判斷及標(biāo)記已經(jīng)訪問(wèn)過(guò)了。 ( 1)對(duì)所畫(huà)區(qū)域進(jìn)行刷新。 ( 4)在圖 G 的邊的集合 E 中選擇權(quán)值最小的邊( 2,4)并 畫(huà)出此邊,其權(quán)重為 2。 ( 3)判斷找到的邊的數(shù)目是否小于頂點(diǎn)的數(shù)目減一,即 n1,如果是則從沒(méi)有被選中的邊中選取權(quán)值最小的邊,如果放入存儲(chǔ)邊的集合中不構(gòu)成回路則添加進(jìn)去,否則舍去此邊。每次挑選邊成功了即畫(huà)出此邊。 ( 3)集合 V(MST)此時(shí)已經(jīng)有三個(gè)頂點(diǎn)了,即 3,找到與之相連的符合條件的邊 (v2,v4)將權(quán)值為 2 的邊添加到 E(MST)中,并將頂點(diǎn) 4 添加到 V(MST)中并畫(huà)出此邊。 對(duì)于算法運(yùn)行時(shí)的動(dòng)態(tài)顯示運(yùn)行過(guò)程這一要求主要通過(guò)將相關(guān)的畫(huà)圓、畫(huà)線等相關(guān)畫(huà)圖 的操作扦插到相關(guān)的算法中,在算法的運(yùn)行過(guò)程中再通過(guò)對(duì)相關(guān)條件的判斷從而決定是否執(zhí)行畫(huà)圓、畫(huà)線等操作。較高的要求是在邊通分量的查詢與合并的過(guò)程中,采用廣度優(yōu)先搜索算法( BreadthFirstSearch)、深度優(yōu)先搜索算法 (DepthFirstSearch)和并查集( UnionFindSet)這三種方法,并進(jìn)行分析和比較算法時(shí)間復(fù)雜度。除此之外,在最小生成樹(shù)的求解過(guò)程中會(huì)對(duì)邊通分量進(jìn)行查詢和合并,由題可知要對(duì)邊 通 分 量 進(jìn) 行 查 詢 和 合 并 要 使 用 廣 度 優(yōu) 先 搜 索 算 法( BreadthFirstSearch)、深度優(yōu)先搜索算法 (DepthFirstSearch)和并查集( UnionFindSet)這三種方法。通過(guò)這樣的一個(gè)遍歷過(guò)程與畫(huà)圖的相 關(guān)操作結(jié)合來(lái)實(shí)現(xiàn)最小生成樹(shù)生成過(guò)程的動(dòng)態(tài)演示。 ( 6)集合 V(MST)此時(shí)已經(jīng)有六個(gè)頂點(diǎn)了,即 6,找到與之相連的符合條件的邊 (v6,v7)將權(quán)值為 1 的邊添加到 E(MST)中,并將頂點(diǎn) 7 添加到 V(MST)中并畫(huà)出此邊。 ( 2) 在原圖 G 中的邊中選擇具有最小權(quán)值的邊,若該邊的兩個(gè)頂點(diǎn)落在不同的連通分量上,則將此邊加入到 T 中;否則,則將此邊舍去(此后永不選入此邊),重新選擇一條權(quán)值最小的邊并進(jìn)行畫(huà)圖的操作處理。 lkruskal算法動(dòng)態(tài)演示模塊 基本思想并查集處理問(wèn)題的主要思想是在處理時(shí)使用搜索與合并運(yùn)算對(duì)相關(guān)集合進(jìn)行處理。 ( 5)在圖 G 的邊的集合 E 中選擇權(quán)值最小的邊( 4,5)并畫(huà)出此邊,其權(quán)重為 3。 ( 3)查找:主要是查找并返回結(jié)點(diǎn) i 所屬集合的根節(jié)點(diǎn)。 ( 3)繼續(xù)向下查找得到邊( 2,4),判斷點(diǎn) 2 和點(diǎn) 4 是否已經(jīng)訪問(wèn)過(guò)了得知點(diǎn) 2 已經(jīng)被訪問(wèn)過(guò)了,點(diǎn) 4沒(méi)有,因此得到新的集合 {2,、 4}。 下面給出 kruakal 算法利用深度優(yōu)先搜索進(jìn)行邊連通分量查詢和合并從而得到最小生成樹(shù)的的設(shè)計(jì)與實(shí)現(xiàn)步驟: ( 1)對(duì)所畫(huà)區(qū)域進(jìn)行刷新。 ( 1)隊(duì)列: 這里使用到的與隊(duì)列相關(guān)的操作主要有棧中數(shù)據(jù)的初始化QueueInitiate、將數(shù)據(jù)存入隊(duì)列的操作 QueueAppend、將數(shù)據(jù) 從隊(duì)列中刪除的操作 QueueDelete、
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1