日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

詳解Java實現(xiàn)拓撲排序算法

瀏覽:1211日期:2022-08-10 14:27:20
目錄一、介紹二、拓撲排序算法分析三、拓撲排序代碼實現(xiàn)一、介紹

百科上這么定義的:

對一個有向無環(huán)圖(Directed Acyclic Graph簡稱DAG)G進行拓撲排序,是將G中所有頂點排成一個線性序列,使得圖中任意一對頂點u和v,若邊<u,v>∈E(G),則u在線性序列中出現(xiàn)在v之前。通常,這樣的線性序列稱為滿足拓撲次序(Topological Order)的序列,簡稱拓撲序列。簡單的說,由某個集合上的一個偏序得到該集合上的一個全序,這個操作稱之為拓撲排序。

為什么會有拓撲排序?拓撲排序有何作用?

舉個例子,學習java系列的教程

代號 科目 學前需掌握 A1 javaSEA2 htmlA3 Jsp A1,A2 A4 servlet A1 A5 ssm A3,A4 A6 springboot A5

就比如學習java系類(部分)從java基礎(chǔ),到j(luò)sp/servlet,到ssm,到springboot,springcloud等是個循序漸進且有依賴的過程。在jsp學習要首先掌握java基礎(chǔ)和html基礎(chǔ)。學習框架要掌握jsp/servlet和jdbc之類才行。那么,這個學習過程即構(gòu)成一個拓撲序列。當然這個序列也不唯一,你可以對不關(guān)聯(lián)的學科隨意選擇順序(比如html和java可以隨便先開始哪一個。)

那上述序列可以簡單表示為:

詳解Java實現(xiàn)拓撲排序算法

其中五種均為可以選擇的學習方案,對課程安排可以有參考作用,當然,五個都是拓撲序列。只是選擇的策略不同!

一些其他注意:

DGA:有向無環(huán)圖AOV網(wǎng):數(shù)據(jù)在頂點 可以理解為面向?qū)ο驛OE網(wǎng):數(shù)據(jù)在邊上,可以理解為面向過程!

而我們通俗一點的說法,就是按照某種規(guī)則將這個圖的頂點取出來,這些頂點能夠表示什么或者有什么聯(lián)系。

規(guī)則:

圖中每個頂點只出現(xiàn)一次。 A在B前面,則不存在B在A前面的路徑。(不能成環(huán)!!!!) 頂點的順序是保證所有指向它的下個節(jié)點在被指節(jié)點前面!(例如A—>B—>C那么A一定在B前面,B一定在C前面)。所以,這個核心規(guī)則下只要滿足即可,所以拓撲排序序列不一定唯一!二、拓撲排序算法分析

詳解Java實現(xiàn)拓撲排序算法

正常步驟為(方法不一定唯一):

從DGA圖中找到一個沒有前驅(qū)的頂點輸出。(可以遍歷,也可以用優(yōu)先隊列維護) 刪除以這個點為起點的邊。(它的指向的邊刪除,為了找到下個沒有前驅(qū)的頂點) 重復上述,直到最后一個頂點被輸出。如果還有頂點未被輸出,則說明有環(huán)!

對于上圖的簡單序列,可以簡單描述步驟為:

1:刪除1或2輸出

詳解Java實現(xiàn)拓撲排序算法

2:刪除2或3以及對應(yīng)邊

詳解Java實現(xiàn)拓撲排序算法

3:刪除3或者4以及對應(yīng)邊

詳解Java實現(xiàn)拓撲排序算法

4:重復以上規(guī)則步驟

詳解Java實現(xiàn)拓撲排序算法

這樣就完成一次拓撲排序,得到一個拓撲序列,但是這個序列并不唯一!從過程中也看到有很多選擇方案,具體得到結(jié)果看你算法的設(shè)計了。但只要滿足即是拓撲排序序列。

另外觀察 1 2 4 3 6 5 7 9這個序列滿足我們所說的有關(guān)系的節(jié)點指向的在前面,被指向的在后面。如果完全沒關(guān)系那不一定前后(例如1,2)

三、拓撲排序代碼實現(xiàn)

對于拓撲排序,如何用代碼實現(xiàn)呢?對于拓撲排序,雖然在上面詳細介紹了思路和流程,也很通俗易懂。但是實際上代碼的實現(xiàn)還是很需要斟酌的,如何在空間和時間上能夠得到較好的平衡且取得較好的效率?

首先要考慮存儲。對于節(jié)點,首先他有聯(lián)通點這么多屬性。遇到稀疏矩陣還是用鄰接表比較好。因為一個節(jié)點的指向節(jié)點較少,用鄰接矩陣較浪費資源。

另外,如果是1,2,3,4,5,6這樣的序列求拓撲排序,我們可以考慮用數(shù)組,但是如果遇到1,2,88,9999類似數(shù)據(jù),可以考慮用map中轉(zhuǎn)一下。

我們具體的代碼思想為:

新建node類,包含節(jié)點數(shù)值和它的指向(這里直接用list集合替代鏈表了) 一個數(shù)組包含node(這里默認編號較集中)。初始化,添加每個節(jié)點指向的時候同時被指的節(jié)點入度+1!(A—>C)那么C的入度+1; 掃描一遍所有node。將所有入度為0的點加入一個棧(隊列)。 當棧(隊列)不空的時候,拋出其中任意一個node(棧就是尾,隊就是頭,順序無所謂,上面分析了只要同時入度為零可以隨便選擇順序)。將node輸出,并且node指向的所有元素入度減一。如果某個點的入度被減為0,那么就將它加入棧(隊列)。 重復上述操作,直到棧為空。

這里主要是利用棧或者隊列儲存入度只為0的節(jié)點,只需要初次掃描表將入度為0的放入棧(隊列)中。

這里你或許會問為什么。 因為節(jié)點之間是有相關(guān)性的,一個節(jié)點若想入度為零,那么它的父節(jié)點(指向節(jié)點)肯定在它為0前入度為0,拆除關(guān)聯(lián)箭頭。從父節(jié)點角度,它的這次拆除聯(lián)系,可能導致被指向的入讀為0,也可能不為0(還有其他節(jié)點指向兒子)

至于具體demo:

package 圖論;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.List;import java.util.Queue;import java.util.Stack;public class tuopu {static class node{int value;List<Integer> next;public node(int value) {this.value=value;next=new ArrayList<Integer>();}public void setnext(List<Integer>list) {this.next=list;}}public static void main(String[] args) {// TODO Auto-generated method stubnode []nodes=new node[9];//儲存節(jié)點int a[]=new int[9];//儲存入度List<Integer>list[]=new ArrayList[10];//臨時空間,為了存儲指向的集合for(int i=1;i<9;i++){nodes[i]=new node(i);list[i]=new ArrayList<Integer>();}initmap(nodes,list,a);//主要流程//Queue<node>q1=new ArrayDeque<node>();Stack<node>s1=new Stack<node>();for(int i=1;i<9;i++){//System.out.print(nodes[i].next.size()+' 55 ');//System.out.println(a[i]);if(a[i]==0) {s1.add(nodes[i]);}}while(!s1.isEmpty()){node n1=s1.pop();//拋出輸出 System.out.print(n1.value+' ');List<Integer>next=n1.next;for(int i=0;i<next.size();i++){a[next.get(i)]--;//入度減一if(a[next.get(i)]==0)//如果入度為0{s1.add(nodes[next.get(i)]);}}}}private static void initmap(node[] nodes, List<Integer>[] list, int[] a) {list[1].add(3);nodes[1].setnext(list[1]);a[3]++;list[2].add(4);list[2].add(6);nodes[2].setnext(list[2]);a[4]++;a[6]++;list[3].add(5);nodes[3].setnext(list[3]);a[5]++;list[4].add(5);list[4].add(6);nodes[4].setnext(list[4]);a[5]++;a[6]++;list[5].add(7);nodes[5].setnext(list[5]);a[7]++;list[6].add(8);nodes[6].setnext(list[6]);a[8]++;list[7].add(8);nodes[7].setnext(list[7]);a[8]++;}}

輸出結(jié)果

2 4 6 1 3 5 7 8

詳解Java實現(xiàn)拓撲排序算法

當然,上面說過用棧和隊列都可以!如果使用隊列就會得到1 2 3 4 5 6 7 8 的拓撲序列

以上就是詳解Java實現(xiàn)拓撲排序算法的詳細內(nèi)容,更多關(guān)于Java實現(xiàn)拓撲排序算法的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩欧美一区二区三区在线视频| 国内不卡的一区二区三区中文字幕| 久久久久黄色| 国产精品mv在线观看| 亚洲最新无码中文字幕久久| 日本a级不卡| 亚洲小说欧美另类婷婷| 日韩精品专区| 欧洲av不卡| 日韩精品1区| 国产一区观看| 久久精品亚洲人成影院| 欧美日韩精品免费观看视欧美高清免费大片| 中文字幕亚洲影视| 青青草国产成人99久久| 青青草伊人久久| 亚洲精品护士| 日韩不卡在线观看日韩不卡视频| 在线观看亚洲精品福利片| 视频精品一区二区| 999国产精品永久免费视频app| 亚洲黄页一区| 中文不卡在线| 蜜臀国产一区二区三区在线播放| 日韩欧美久久| 欧美有码在线| 久久亚洲国产精品尤物| 久久婷婷丁香| 亚洲欧美不卡| 日本一区二区三区视频在线看| 日韩国产欧美在线播放| 麻豆国产一区| 日本欧美不卡| 国产麻豆综合| 青青草国产精品亚洲专区无| 天堂久久av| 尹人成人综合网| 日韩激情一区| 亚洲精品乱码| 午夜久久免费观看| 日本美女一区| 99久久亚洲精品蜜臀| 日韩.com| 亚洲爱爱视频| 欧美在线观看天堂一区二区三区| 日韩精品国产欧美| 国产精品久久久久久久久久白浆| 91亚洲一区| 亚洲毛片在线免费| 国产自产自拍视频在线观看| 在线免费观看亚洲| 国产欧美一区二区三区精品酒店| 视频在线观看91| 国产一区二区三区探花| 午夜亚洲一区| 免费高潮视频95在线观看网站| 日韩一区二区三区在线看| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 国产aⅴ精品一区二区四区| 夜夜嗨av一区二区三区网站四季av| 国产精品三p一区二区| 在线精品一区二区| 亚洲激情欧美| 丝袜美腿诱惑一区二区三区| 国产高清日韩| 青草久久视频| 亚洲美女91| 中文在线一区| 91精品国产调教在线观看| 日韩av片子| 激情不卡一区二区三区视频在线| 亚洲+小说+欧美+激情+另类| 国产成人久久精品一区二区三区| 国产66精品| 久久wwww| 精品久久久中文字幕| 日本综合字幕| 国产高清不卡| 精品国产乱码久久久久久樱花| 欧美日韩国产高清| av免费不卡国产观看| 久久99国产精品视频| 国产99在线| 欧美一区91| 亚洲精品福利| 狠狠久久婷婷| 日韩综合一区| 日本不卡不码高清免费观看 | 在线精品视频一区| 欧美日韩国产传媒| 日本蜜桃在线观看视频| 色爱综合网欧美| 国产精品白丝一区二区三区| 国产高清视频一区二区| 日韩精品乱码av一区二区| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美羞羞视频| 久久国产精品久久久久久电车| 激情婷婷久久| 国产第一亚洲| 成人在线免费观看网站| 国产精品视频一区二区三区四蜜臂 | 久久这里只有| 青青国产精品| 日韩一区中文| 福利一区二区三区视频在线观看| 亚洲日韩中文字幕一区| 日韩视频精品在线观看| 日韩av首页| 日韩欧美高清一区二区三区| 亚洲性视频在线| 在线国产精品一区| 日韩一区二区三区高清在线观看| 亚洲另类av| 国产一精品一av一免费爽爽| 国产精品亲子伦av一区二区三区| 久久亚州av| 久久免费福利| 精品深夜福利视频| 久久中文字幕av| 国产成人精品一区二区三区在线| 亚洲国内欧美| 精品国产亚洲日本| 成人午夜网址| 热三久草你在线| 久久激情婷婷| 欧美99久久| 亚洲一二三区视频| 视频一区日韩| 欧美成人精品午夜一区二区| 欧美激情视频一区二区三区免费 | 婷婷综合五月| 免费在线看一区| 婷婷亚洲精品| 国产精品成人国产| 国产成人久久精品麻豆二区| 五月天激情综合网| 蜜臀a∨国产成人精品| 久久99久久久精品欧美| 精品三级久久| 亚洲三级视频| 国产美女视频一区二区| 中文字幕在线视频久| 日韩不卡在线| 国产成人久久精品一区二区三区| 欧美日韩中文一区二区| 91亚洲精品在看在线观看高清| 国产福利一区二区精品秒拍| 亚洲视频综合| 久久亚洲风情| 老鸭窝一区二区久久精品| 日韩中文字幕高清在线观看| 免费看黄色91| 欧美精品91| 中文字幕系列一区| 性感美女一区二区在线观看| 午夜亚洲福利在线老司机| 麻豆视频久久| 激情综合在线| 久久久久久久久成人| 欧美+亚洲+精品+三区| 欧美激情综合| 欧美日韩高清| 精品日韩在线| 精品一区亚洲| 国产精品a级| 久久久久国产精品一区二区| 日韩精品免费视频人成| 国产一区二区久久久久| 亚洲欧美在线综合| 久久影院午夜精品| 国产麻豆精品| 国产一区日韩一区| 国内精品亚洲| 国产精品日本| 日韩一区二区三区在线免费观看| 亚洲欧洲日韩精品在线| 1024精品久久久久久久久| 国产伦精品一区二区三区在线播放| 欧美aa一级| 日韩av一区二区三区| 日韩视频一区二区三区在线播放免费观看| 国产精品一区二区中文字幕| 蜜桃久久av一区| 国产成年精品| 国产精品久一| 久久亚洲影院| 日韩av福利| 国产精品亚洲二区| 视频一区二区三区在线| 国产精品久久久久久久久免费高清| 美女国产精品| 激情欧美亚洲| 欧洲亚洲一区二区三区| 男人天堂欧美日韩| 成人高清一区| 五月婷婷六月综合| 国产麻豆久久| 久久精品青草| 亚洲天堂资源|