强奸久久久久久久|草草浮力在线影院|手机成人无码av|亚洲精品狼友视频|国产国模精品一区|久久成人中文字幕|超碰在线视屏免费|玖玖欧洲一区二区|欧美精品无码一区|日韩无遮一区二区

首頁 > 資訊 > 知識 > tarjan算法,tarjan算法 為什么low

tarjan算法,tarjan算法 為什么low

來源:整理 時間:2023-08-22 11:38:21 編輯:智能門戶 手機(jī)版

本文目錄一覽

1,tarjan算法 為什么low

tarjan主要時間是用在RMQ的構(gòu)建上,即遍歷樹,然后構(gòu)造遍歷數(shù)組,構(gòu)造RMQ序列。 這里的時間復(fù)雜度大約是O(2*n*log(2*n))。 而對于一個詢問,處理速度大約是O(1),即從RMQ序列中查詢相應(yīng)節(jié)點的位置,以及對比操作。
沒看懂什么意思?

tarjan算法 為什么low

2,求最近公共祖先的tarjan算法pascal標(biāo)程

首先從頂點a出發(fā),沿父指針將a至根的路徑上的所有頂點設(shè)訪問標(biāo)志。然后從b頂點出發(fā),沿父指針追溯到第1個已訪問的頂點b,該頂點即為a和b的最近公共祖先。 var n,rt,a,b,i:integer; l,r,pt:array[0..max]of integer; vt:array[1..max]of boolean; readln(f,n,rt); for i:=1 to n do begin readln(l[i],r[i]); if i=rt then pt[rt]:=0 else pt[l[i]]:=i; pt[r[i]]:=i end; readln(a,b); while a*b<>0 do begin fillchar(vt,sizeof(vt),0); repeat vt[a]:=true;a:=pt[a] until a=0; while not vt[b] do b:=pt[b]; writeln(b);readln(a,b); End;

求最近公共祖先的tarjan算法pascal標(biāo)程

3,最近公共祖先的算法

利用并查集優(yōu)越的時空復(fù)雜度,我們可以實現(xiàn)LCA問題的O(n+Q)算法,這里Q表示詢問的次數(shù)。Tarjan算法基于深度優(yōu)先搜索的框架,對于新搜索到 的一個結(jié)點,首先創(chuàng)建由這個結(jié)點構(gòu)成的集合,再對當(dāng)前結(jié)點的每一個子樹進(jìn)行搜索,每搜索完一棵子樹,則可確定子樹內(nèi)的LCA詢問都已解決。其他的LCA詢 問的結(jié)果必然在這個子樹之外,這時把子樹所形成的集合與當(dāng)前結(jié)點的集合合并,并將當(dāng)前結(jié)點設(shè)為這個集合的祖先。之后繼續(xù)搜索下一棵子樹,直到當(dāng)前結(jié)點的所 有子樹搜索完。這時把當(dāng)前結(jié)點也設(shè)為已被檢查過的,同時可以處理有關(guān)當(dāng)前結(jié)點的LCA詢問,如果有一個從當(dāng)前結(jié)點到結(jié)點v的詢問,且v已被檢查過,則由于 進(jìn)行的是深度優(yōu)先搜索,當(dāng)前結(jié)點與v的最近公共祖先一定還沒有被檢查,而這個最近公共祖先的包涵v的子樹一定已經(jīng)搜索過了,那么這個最近公共祖先一定是v 所在集合的祖先。下面給出這個算法的偽代碼描述: LCA(u)d[i] 表示 i節(jié)點的深度, p[i,j] 表示 i 的 2^j 倍祖先那么就有一個遞推式子 p[i,j]=p[p[i,j-1],j-1]這樣子一個O(NlogN)的預(yù)處理求出每個節(jié)點的 2^k 的祖先然后對于每一個詢問的點對a, b的最近公共祖先就是:先判斷是否 d[a] > d[b] ,如果是的話就交換一下(保證 a 的深度小于 b 方便下面的操作)然后把b 調(diào)到與a 同深度, 同深度以后再把a, b 同時往上調(diào)(dec(j)) 調(diào)到有一個最小的j 滿足p[a,j]!=p[b,j] (a b 是在不斷更新的), 最后再把 a, b 往上調(diào) (a=p[a,0], b=p[b,0]) 一個一個向上調(diào)直到a = b, 這時 a or b 就是他們的最近公共祖先

最近公共祖先的算法

4,強連通分量的Tarjan算法思路

這個算法思路不難理解,由開篇第一句話可知,任何一個強連通分量,必定是對原圖的深度優(yōu)先搜索樹的子樹。那么其實,我們只要確定每個強連通分量的子樹的根,然后根據(jù)這些根從樹的最低層開始,一個一個的拿出強連通分量即可。那么剩下的問題就只剩下如何確定強連通分量的根和如何從最低層開始拿出強連通分量了。那么如何確定強連通分量的根,在這里我們維護(hù)兩個數(shù)組,一個是indx[1..n],一個是mlik[1..n],其中indx[i]表示頂點i開始訪問時間,mlik[i]為與頂點i鄰接的頂點未刪除頂點j的mlik[j]和mlik[i]的最小值(mlik[i]初始化為indx[i])。這樣,在一次深搜的回溯過程中,如果發(fā)現(xiàn)mlik[i]==indx[i]那么,當(dāng)前頂點就是一個強連通分量的根,為什么呢?因為如果它不是強連通分量的根,那么它一定是屬于另一個強連通分量,而且它的根是當(dāng)前頂點的祖宗,那么存在包含當(dāng)前頂點的到其祖宗的回路,可知mlik[i]一定被更改為一個比indx[i]更小的值。至于如何拿出強連通分量,這個其實很簡單,如果當(dāng)前節(jié)點為一個強連通分量的根,那么它的強連通分量一定是以該根為根節(jié)點的(剩下節(jié)點)子樹。在深度優(yōu)先遍歷的時候維護(hù)一個堆棧,每次訪問一個新節(jié)點,就壓入堆?!,F(xiàn) 在知道如何拿出了強連通分量了吧?是的,因為當(dāng)前節(jié)點是這個強連通分量中最先被壓入堆棧的,那么在當(dāng)前節(jié)點以后壓入堆棧的并且仍在堆棧中的節(jié)點都屬于這個強連通分量。當(dāng)然有人會問真的嗎?假設(shè)一個節(jié)點在當(dāng)前節(jié)點壓入堆棧以后壓入并且還存在,同時它不屬于該強連通分量,那么它一定屬于另一個強連通分量,但當(dāng)前節(jié)點是它的根的祖宗,那么這個強連通分量應(yīng)該在此之前已經(jīng)被拿出。現(xiàn) 在沒有疑問了吧,那么算法介紹就完了。

5,具有7個定點的無向圖至少應(yīng)有幾條邊才能確保是一個連通圖

至少有n條邊,正好可以組成一個環(huán)。無向連通圖指的是圖中的每個頂點都有邊與其相連,且圖中沒有斷處,即對無向連通圖進(jìn)行遍歷時,僅需要從圖中的一個頂點出發(fā)。進(jìn)行深度優(yōu)先或廣度優(yōu)先搜索,便可以訪問到圖中所有的頂點。無向連通圖構(gòu)成的條件是:邊數(shù)=頂點數(shù)-1。連通分量的提出是以"整個無向圖不是連通圖"為前提的,因為如果無向圖是連通圖,則其無法分解出多個最大連通子圖,因為圖中所有的頂點之間都是連通的。擴(kuò)展資料:無向圖到連通圖的tarjan算法:如果兩個頂點可以相互通達(dá),則稱兩個頂點強連通(strongly connected)。如果有向圖G的每兩個頂點都強連通,稱G是一個強連通圖。有向圖的極大強連通子圖,稱為強連通分量(strongly connected components)。下圖中,子圖Tarjan算法是用來求有向圖的強連通分量的。求有向圖的強連通分量的Tarjan算法是以其發(fā)明者Robert Tarjan命名的。Robert Tarjan還發(fā)明了求雙連通分量的Tarjan算法。Tarjan算法是基于對圖深度優(yōu)先搜索的算法,每個強連通分量為搜索樹中的一棵子樹。搜索時,把當(dāng)前搜索樹中未處理的節(jié)點加入一個堆棧,回溯時可以判斷棧頂?shù)綏V械墓?jié)點是否為一個強連通分量。定義DFN(u)為節(jié)點u搜索的次序編號(時間戳),Low(u)為u或u的子樹能夠追溯到的最早的棧中節(jié)點的次序號。當(dāng)DFN(u)=Low(u)時,以u為根的搜索子樹上所有節(jié)點是一個強連通分量。參考資料來源:百度百科—連通圖百度百科—無向圖百度百科—tarjan算法
強連通圖必須從任何一點出發(fā)都可以回到原處,每個節(jié)點至少要一條出路(單節(jié)點除外)至少有n條邊,正好可以組成一個環(huán)。
具有n個頂點的無向圖,至少應(yīng)有多少條邊才能確保是一個 連通圖? 若采用鄰接矩陣表示,則該矩陣的大小是多少?

6,C Tarjan到底干嘛的怎么寫

Tarjan算法是用來求有向圖的強連通分量的。這是c++代碼,  #define M 50//題目中可能的最大點數(shù)  intSTACK[M],top=0;//Tarjan算法中的?! oolInStack[M];//檢查是否在棧中  intDFN[M];//深度優(yōu)先搜索訪問次序  intLow[M];//能追溯到的最早的次序  intComponentNumber=0;//有向圖強連通分量個數(shù)  intIndex=0;//索引號  vectorEdge[M];//鄰接表表示   vectorComponent[M];//獲得強連通分量結(jié)果   intInComponent[M];//記錄每個點在第幾號強連通分量里   intComponentDegree[M];//記錄每個強連通分量的度   voidTarjan(inti){intj;   DFN[i]=Low[i]=Index++;   InStack[i]=true;   STACK[++top]=i;   for(inte=0;e   {    j=Edge[i][e];    if(DFN[j]==-1)    {     Tarjan(j);    Low[i]=min(Low[i],Low[j]);    }    else if(InStack[j])     Low[i]=min(Low[i],Low[j]);   }   if(DFN[i]==Low[i])   {     ComponentNumber++;     do{     j=STACK[top--];     InStack[j]=false;     Component[ComponentNumber].push_back(j);     InComponent[j]=ComponentNumber;     }while(j!=i);   }
在c語言中return 表示從被調(diào)函數(shù)返回到主調(diào)函數(shù)繼續(xù)執(zhí)行,返回時可附帶一個返回值,由return后面的參數(shù)指定?! ∫虼?,在c語言中一般出現(xiàn)return語句,即改變程序執(zhí)行流程到母函數(shù)中,因此無論是在if語句還是while語句,還是其它的什么語句,return始終是返回母函數(shù)的調(diào)用,不需要細(xì)分什么情況。
文章TAG:tarjan算法tarjan算法為什么low

最近更新

  • 電位計,什么是電位計電氣電位計,什么是電位計電氣

    什么是電位計電氣2,生物中的電位計與物理中的靈敏電流計有什么區(qū)別3,汽車電路中的電位計是干什么用的它有什么作用4,請教一下電位計的工作原理5,電位計都能夠控制什么類型電機(jī)的轉(zhuǎn)速伺服異.....

    知識 日期:2023-08-22

  • 輪速傳感器,輪速傳感器有哪兩種輪速傳感器,輪速傳感器有哪兩種

    輪速傳感器有哪兩種2,輪速傳感器是什么3,輪速傳感器的原理4,輪速傳感器的類型5,電磁式輪速傳感器是什么6,輪速傳感器的結(jié)構(gòu)原理1,輪速傳感器有哪兩種有齒式輪速傳感器~還有編碼式輪速傳感器~.....

    知識 日期:2023-08-22

  • 榮耀手機(jī)怎么截屏,honor magic 手機(jī)如何截圖榮耀手機(jī)怎么截屏,honor magic 手機(jī)如何截圖

    honormagic手機(jī)如何截圖2,hnor怎么截圖3,華為榮耀手機(jī)的截屏方法有哪些求告知4,華為honor手機(jī)按那個鍵截圖5,華為榮耀如何截屏6,華為榮耀怎么截圖1,honormagic手機(jī)如何截圖華為榮耀手機(jī),可按.....

    知識 日期:2023-08-22

  • via測試,鳳凰測速via測試,鳳凰測速

    鳳凰測速2,什么是測試3,cadence中testvia是什么4,alpha測試和beta測試的區(qū)別是什么5,汽車VOC的檢測標(biāo)準(zhǔn)與檢測方法知多少6,VIA平臺設(shè)備管理器是什么1,鳳凰測速相當(dāng)于200M的帶寬,你用的是什么,2.....

    知識 日期:2023-08-22

  • 瑞芯微電子,瑞芯微電子這家公司怎么樣瑞芯微電子,瑞芯微電子這家公司怎么樣

    瑞芯微電子這家公司怎么樣2,華芯飛的芯片好還是瑞芯微電子的芯片好3,做數(shù)字芯片去瑞芯微電子怎么樣4,瑞芯微是做AI芯片的公司嗎5,ROCKCHIP是什么6,瑞芯微和瑞芯區(qū)別1,瑞芯微電子這家公司怎么.....

    知識 日期:2023-08-22

  • 噪點是什么意思,顯卡有噪點是什么意思噪點是什么意思,顯卡有噪點是什么意思

    顯卡有噪點是什么意思2,PS里噪點是什么意思3,富士S1000FD的噪點控制的不好是么4,噪點是什么意思5,什么叫噪點啊6,失真噪點色素像素這4個詞語分別是什么意思7,晚上在房間內(nèi)拍的視頻有看到白點.....

    知識 日期:2023-08-22

  • 中科大網(wǎng)絡(luò)通,使用中科大網(wǎng)絡(luò)通不同的出口是怎樣的體驗中科大網(wǎng)絡(luò)通,使用中科大網(wǎng)絡(luò)通不同的出口是怎樣的體驗

    使用中科大網(wǎng)絡(luò)通不同的出口是怎樣的體驗2,求助大神們中科大的網(wǎng)絡(luò)通是不可以兩個設(shè)3,在大學(xué)校園里用網(wǎng)絡(luò)通上網(wǎng)眾多軟件提示網(wǎng)絡(luò)連接錯誤4,中科大本科宿舍能不能上網(wǎng)5,中科大宿舍能拉天翼.....

    知識 日期:2023-08-22

  • makecode,霍夫曼編碼如何解碼makecode,霍夫曼編碼如何解碼

    霍夫曼編碼如何解碼2,百度首頁的二維碼怎么用html做3,javascript怎么將url生成二維碼4,怎樣在linuxc中得到按鍵的鍵盤掃描碼1,霍夫曼編碼如何解碼只要給你碼表就行了.編碼的結(jié)果就是使每一.....

    知識 日期:2023-08-22