一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

算法大神Tarjan

算法與數(shù)據(jù)結(jié)構(gòu) ? 來(lái)源:算法與數(shù)據(jù)結(jié)構(gòu) ? 作者:算法與數(shù)據(jù)結(jié)構(gòu) ? 2021-01-04 14:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

有同學(xué)在學(xué)習(xí)圖論算法的時(shí)候,發(fā)現(xiàn)這里有個(gè) Tarjan 算法,那里有個(gè) Tarjan 算法,而似乎 Tarjan 算法解決的問(wèn)題并不一樣,于是非常迷惑:Tarjan 算法到底是指什么?

這是一個(gè)很好的問(wèn)題。Tarjan 是計(jì)算機(jī)領(lǐng)域的大牛,發(fā)明了很多現(xiàn)在大家耳熟能詳?shù)乃惴ɑ蛘邤?shù)據(jù)結(jié)構(gòu),所以有同學(xué)會(huì)覺(jué)得冠他名字的算法有些多。

但如果我們仔細(xì)梳理一下,其實(shí)并不復(fù)雜。

在這篇文章中,我會(huì)帶領(lǐng)大家梳理一下 Tarjan 發(fā)明的算法都有哪些,整體脈絡(luò)是怎樣的。

注意:在這篇文章中,我不會(huì)具體講解某個(gè)算法的原理。但是,我會(huì)給出很多具體的關(guān)鍵字,并且標(biāo)紅。如果大家對(duì)某個(gè)算法想深入了解,可以以此為引,在互聯(lián)網(wǎng)上搜索學(xué)習(xí)。

我相信,互聯(lián)網(wǎng)上關(guān)于某個(gè)具體算法的資料是非常多的,反而是這樣按照某個(gè)脈絡(luò)做總結(jié)的文章很少。

首先,Tarjan 是一名美國(guó)的計(jì)算機(jī)科學(xué)家和數(shù)學(xué)家,全名 Robert Endre Tarjan。

先來(lái)一個(gè) Tarjan 大神的名言鎮(zhèn)樓:

一般提起 Tarjan 算法,通常是指 Tarjan 發(fā)明的求解有向圖的強(qiáng)聯(lián)通分量算法,全稱(chēng)是Tarjan’s Strongly Connected Components Algorithm.

為什么這么叫?因?yàn)榍蠼庥邢驁D的強(qiáng)聯(lián)通分量還有一個(gè)著名算法:Kosaraju 算法。Kosaraju 算法也是以他的發(fā)明者的名字命名的。

我在算法比賽中,或者需要求解 SCC(強(qiáng)連通分量的縮寫(xiě):Strongly Connected Components) 問(wèn)題的時(shí)候,喜歡寫(xiě) Kosaraju 算法。因?yàn)?Kosaraju 算法的實(shí)現(xiàn)非常簡(jiǎn)單,復(fù)雜度和 Tarjan 算法是一樣的,都是 O(V + E) 的。

但實(shí)際上,Kosaraju 算法需要遍歷兩次圖,而 Tarjan 算法只需要遍歷一次圖。所以,Tarjan 算法的性能更高,一般可以高 30% - 40% 左右。

而 Tarjan 算法之所以有名,關(guān)鍵在于使用 Tarjan 算法的思想,不僅僅可以求解 SCC 問(wèn)題,還可以求無(wú)向圖中的橋或者割點(diǎn)。

這就是為什么,很多同學(xué)看到 Tarjan 算法,做的事情不一樣,但都叫 Tarjan 算法的原因。我們可以把 Tarjan 算法理解成是一種思想,基于這種思想,可以求解橋,割點(diǎn),和 SCC 問(wèn)題。

所謂的 Tarjan 算法思想,就是在遍歷整個(gè)圖的過(guò)程中,對(duì)每一個(gè)遍歷的節(jié)點(diǎn)記錄一個(gè)時(shí)間戳,通常被稱(chēng)為是 DFN;同時(shí),記錄通過(guò)這個(gè)節(jié)點(diǎn),不經(jīng)過(guò)父親節(jié)點(diǎn),最早能回到的時(shí)間戳,通常被稱(chēng)為是 LOW。通過(guò)這些信息,就能判斷一個(gè)圖的橋,割點(diǎn),和強(qiáng)連通分量。

2ae9bf46-4423-11eb-8b86-12bb97331649.png

然而,Tarjan 的貢獻(xiàn)遠(yuǎn)不止于此。以Tarjan命名的另外一個(gè)非常著名的算法,叫Tarjan‘s Off-line Least Common Ancestors Algorithm。

這個(gè)算法本質(zhì)是借助并查集,求解 LCA(最近公共祖先的縮寫(xiě):Least Common Ancestors)問(wèn)題。

實(shí)際上,離線的 LCA 問(wèn)題,是計(jì)算機(jī)科學(xué)領(lǐng)域非常著名的問(wèn)題,深究下去,和Binary Lifting,RMQ等非常著名的算法思想都有聯(lián)系。

2b0ed164-4423-11eb-8b86-12bb97331649.png

說(shuō)到并查集,Tarjan 也和這種數(shù)據(jù)結(jié)構(gòu)有不解之緣。并查集雖然不是 Tarjan 發(fā)明的,但是并查集的復(fù)雜度是 Tarjan 首先分析清楚的:也就是Ackerman 函數(shù)的反函數(shù)。

如果對(duì)此感興趣的同學(xué),可以翻看《算法導(dǎo)論》,《算法導(dǎo)論》對(duì)這部分內(nèi)容介紹得很清楚。

實(shí)際上,這也是《算法導(dǎo)論》這本教材的意義:稍微深入一些的算法分析問(wèn)題,一般的算法教材都不會(huì)涉及。而《算法導(dǎo)論》所覆蓋的深度和廣度,比大多數(shù)教材都高太多。

當(dāng)然,這也是《算法導(dǎo)論》不適合入門(mén)的原因。

說(shuō)到數(shù)據(jù)結(jié)構(gòu),Tarjan 確實(shí)發(fā)明過(guò)數(shù)據(jù)結(jié)構(gòu)。最有名的兩個(gè),一個(gè)是斐波那契堆,一個(gè)是Splay 樹(shù)。

Splay 樹(shù)雖然不保證一定平衡,但各個(gè)操作的均攤復(fù)雜度是 O(logn) 級(jí)別的。

Splay 樹(shù)最大的優(yōu)勢(shì)是實(shí)現(xiàn)簡(jiǎn)單,比紅黑樹(shù)簡(jiǎn)單不知道多少倍。所以,如果我們需要調(diào)用更加底層的樹(shù)操作,需要自己實(shí)現(xiàn)一個(gè)自平衡的二分搜索樹(shù)時(shí),通常 Splay 樹(shù)是首選。

也正因?yàn)槿绱?,很多搞?jìng)賽的同學(xué),都是能手寫(xiě) Splay 樹(shù)的。

Tarjan 還是非常著名的算法:BFPRT的作者之一。其實(shí) BFPRT 這個(gè)算法的名字,是其五個(gè)作者首字母的縮寫(xiě)。其中的 T,就是 Tarjan。

BFPRT 這個(gè)名字聽(tīng)起來(lái)非常拗口,同時(shí)也難記,但是它的另一個(gè)名字就很簡(jiǎn)單直接了,就是Median of Medians。

這個(gè)算法整體并不難理解,是快排思想的一種更穩(wěn)定的優(yōu)化,每次近乎可以保證選取所處理的數(shù)組的中位數(shù)作為標(biāo)定點(diǎn)(pivot),使得快速排序的最差時(shí)間復(fù)雜度真真正正達(dá)到了 O(nlogn)。

值得一提的是,BFPRT 算法的這五位作者,都是計(jì)算機(jī)科學(xué)領(lǐng)域的大牛。他們分別是:

B是 Blum,全名 Manuel Blum,他因?yàn)閺?fù)雜度理論方面的貢獻(xiàn),以及密碼學(xué)的應(yīng)用,獲得了 1995 年的圖靈獎(jiǎng);

F是 Floyd,全名 Robert W. Floyd,相信大家都很熟悉。大家在算法課本上一定會(huì)學(xué)到的所有點(diǎn)對(duì)的最短路徑算法,就是他和 Warshall 一起提出的,即Floyd–Warshall 算法。同時(shí),F(xiàn)loyed 還提出了非常著名的Floyed 環(huán)檢測(cè)算法。他獲得了 1978 年的圖靈獎(jiǎng);

P是 Pratt,全名 Vaughan Pratt,是斯坦福的教授;

R是 Rivest,全名 Ron Rivest。他是 MIT 的教授,專(zhuān)攻密碼學(xué)。我們現(xiàn)在所經(jīng)常使用的MD5 算法,他就是作者之一;

最后的T,就是這篇文章的主角:Tarjan,全名 Robert Endre Tarjan。

在圖論領(lǐng)域,Tarjan 還改進(jìn)了一個(gè)非常著名的算法:最小樹(shù)形圖。最小樹(shù)形圖這個(gè)名字聽(tīng)起來(lái)很復(fù)雜,但其實(shí)這個(gè)概念很簡(jiǎn)單:就是有向圖的最小生成樹(shù)。

解決最小樹(shù)形圖問(wèn)題,有一個(gè)非常樸素的算法,叫朱劉算法。聽(tīng)這個(gè)名字大家也知道,這是兩位華人科學(xué)家首先提出來(lái)的算法,在論文記載中,分別是 Y.J. Chu 和 T.H. Liu 在 1965 年提出來(lái)的。朱劉算法的時(shí)間復(fù)雜度是 O(VE) 的。

后來(lái),Tarjan 改進(jìn)了這個(gè)算法,可以使用 O(ElogV) 的時(shí)間做預(yù)處理,之后使用 O(V) 的時(shí)間,求解圖中以任意頂點(diǎn)為根的最小樹(shù)形圖

Tarjan 還發(fā)明了一種平面圖的檢測(cè)算法,首次在線性時(shí)間解決了平面圖檢測(cè)問(wèn)題(Planarity-Testing)。因?yàn)槠矫鎴D檢測(cè)離大多數(shù)同學(xué)的工作比較遠(yuǎn),所以可能很少有同學(xué)了解這個(gè)算法。

Tarjan 的平面圖檢測(cè)算法還有一個(gè)合作者:John Hopcroft。他們二人因?yàn)檫@個(gè)算法,以及在算法和數(shù)據(jù)結(jié)構(gòu)等基礎(chǔ)領(lǐng)域?qū)τ?jì)算機(jī)科學(xué)的貢獻(xiàn),獲得了 1986 年的圖靈獎(jiǎng)。

Tarjan 的碩士和博士是在斯坦福大學(xué)讀的。他的導(dǎo)師有兩個(gè)。一個(gè)就是大名鼎鼎的 Floyd,上文介紹 BFPRT 算法的時(shí)候介紹了。在這里給一個(gè)年輕的時(shí)候,F(xiàn)loyd 風(fēng)流倜儻的帥照:

Tarjan 的另一名導(dǎo)師,則是計(jì)算機(jī)科學(xué)領(lǐng)域的神級(jí)人物:Donald Knuth。他可以說(shuō)是計(jì)算復(fù)雜領(lǐng)域的創(chuàng)始人。

Donald Knuth 的經(jīng)歷和貢獻(xiàn),可以寫(xiě)一本書(shū)了。有時(shí)間,我會(huì)再寫(xiě)一篇文章介紹他?,F(xiàn)在,很多人了解他,都是因?yàn)樗纳褡鳎篢AOCP,即The Art of Computer Programming,被中文翻譯成《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》。這套書(shū)被評(píng)為至今計(jì)算機(jī)科學(xué)史上最重要的神作,但其實(shí)還沒(méi)有寫(xiě)完。

不過(guò) Donald Knuth 對(duì)計(jì)算機(jī)科學(xué)領(lǐng)域的貢獻(xiàn),遠(yuǎn)不止一套書(shū)這么簡(jiǎn)單。要聊 Donald Knuth 的話,能聊的就太多。這篇文章我們收一收,說(shuō)回 Tarjan。

Tarjan 現(xiàn)在還在世,今年已經(jīng) 72 歲了。根據(jù)維基百科,現(xiàn)在 Tarjan 在普林斯頓任教。

實(shí)際上,在計(jì)算機(jī)科學(xué)領(lǐng)域,很多在教科書(shū)中出現(xiàn)的人物,都還在世;很多教科書(shū)級(jí)別的算法,概念,理論,其實(shí)距離提出,也不過(guò)是幾十年的時(shí)間。

這足以可見(jiàn):計(jì)算機(jī)是多么年輕的一個(gè)學(xué)科。

也正是因?yàn)檫@個(gè)原因,在計(jì)算機(jī)科學(xué)領(lǐng)域中,還有大量的沒(méi)有被完全解決的問(wèn)題。

計(jì)算機(jī)科學(xué)領(lǐng)域其實(shí)還大有可為。

責(zé)任編輯:xj

原文標(biāo)題:Tarjan 這個(gè)算法大神

文章出處:【微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4708

    瀏覽量

    95311
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7657

    瀏覽量

    90723

原文標(biāo)題:Tarjan 這個(gè)算法大神

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    FPGA 大神 Adam Taylor 使用 ALINX VD100(AMD Versal系列)開(kāi)發(fā)平臺(tái)實(shí)現(xiàn)圖像處理

    本篇文章來(lái)自 FPGA 大神、Ardiuvo XVtc VtcInst;VideoMode video;XVtc_Config *vtc_config ;int main
    的頭像 發(fā)表于 05-16 09:46 ?1892次閱讀
    FPGA <b class='flag-5'>大神</b> Adam Taylor 使用 ALINX VD100(AMD Versal系列)開(kāi)發(fā)平臺(tái)實(shí)現(xiàn)圖像處理

    AI算法托管平臺(tái)是什么

    AI算法托管平臺(tái)是一種提供AI模型運(yùn)行、管理和優(yōu)化等服務(wù)的云端或邊緣計(jì)算平臺(tái)。下面,AI部落小編帶您詳細(xì)了解AI算法托管平臺(tái)。
    的頭像 發(fā)表于 03-06 10:22 ?377次閱讀

    PID控制算法的C語(yǔ)言實(shí)現(xiàn):PID算法原理

    在工業(yè)應(yīng)用中 PID 及其衍生算法是應(yīng)用最廣泛的算法之一,是當(dāng)之無(wú)愧的萬(wàn)能算法,如果能夠熟練掌握 PID 算法的設(shè)計(jì)與實(shí)現(xiàn)過(guò)程,對(duì)于一般的研發(fā)人員來(lái)講,應(yīng)該是足夠應(yīng)對(duì)一般研發(fā)問(wèn)題了,而
    發(fā)表于 02-26 15:24

    DLPC7540EVM是否支持自定義的圖像處理算法,以及如何進(jìn)行算法的移植?

    是否支持自定義的圖像處理算法,以及如何進(jìn)行算法的移植?
    發(fā)表于 02-17 08:25

    什么是BP神經(jīng)網(wǎng)絡(luò)的反向傳播算法

    BP神經(jīng)網(wǎng)絡(luò)的反向傳播算法(Backpropagation Algorithm)是一種用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)的有效方法。以下是關(guān)于BP神經(jīng)網(wǎng)絡(luò)的反向傳播算法的介紹: 一、基本概念 反向傳播算法是BP
    的頭像 發(fā)表于 02-12 15:18 ?760次閱讀

    SM73201 DC-ARC-EVAL光伏電弧檢測(cè)的具體算法是什么?

    SM73201 DC-ARC-EVAL光伏電弧檢測(cè)的具體算法是什么?求大神指教!
    發(fā)表于 02-08 06:14

    算法加速的概念、意義、流程和應(yīng)用

    本文介紹算法加速的概念、意義、流程和應(yīng)用 一、什么是算法加速 面向“最耗時(shí)”的部分做專(zhuān)用化處理: 在軟件運(yùn)行時(shí),總有一些特定算法會(huì)消耗大量 CPU 資源,比如加密解密、圖像處理或神經(jīng)網(wǎng)絡(luò)推理。這類(lèi)
    的頭像 發(fā)表于 01-15 09:34 ?584次閱讀

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+內(nèi)容簡(jiǎn)介

    內(nèi)容簡(jiǎn)介這是一本深入解讀基礎(chǔ)算法及其電路設(shè)計(jì),以打通算法研發(fā)到數(shù)字IC設(shè)計(jì)的實(shí)現(xiàn)屏障,以及指導(dǎo)芯片設(shè)計(jì)工程師從底層掌握復(fù)雜電路設(shè)計(jì)與優(yōu)化方法為目標(biāo)的專(zhuān)業(yè)技術(shù)書(shū)。任何芯片(如WiFi芯片、5G芯片
    發(fā)表于 11-21 17:14

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+介紹基礎(chǔ)硬件算法模塊

    作為嵌入式開(kāi)發(fā)者往往比較關(guān)注硬件和軟件的協(xié)調(diào)。本書(shū)介紹了除法器,信號(hào)發(fā)生器,濾波器,分頻器等基本算法的電路實(shí)現(xiàn),雖然都是基礎(chǔ)內(nèi)容,但是也是最常用到的基本模塊。 隨著逆全球化趨勢(shì)的出現(xiàn),過(guò)去的研發(fā)
    發(fā)表于 11-21 17:05

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+一本介紹基礎(chǔ)硬件算法模塊實(shí)現(xiàn)的好書(shū)

    作為嵌入式開(kāi)發(fā)者往往比較關(guān)注硬件和軟件的協(xié)調(diào)。本書(shū)介紹了除法器,信號(hào)發(fā)生器,濾波器,分頻器等基本算法的電路實(shí)現(xiàn),雖然都是基礎(chǔ)內(nèi)容,但是也是最常用到的基本模塊,本書(shū)的內(nèi)容比較對(duì)本人胃口。 我們先來(lái)
    發(fā)表于 11-20 13:42

    Pure path studio內(nèi)能否自己創(chuàng)建一個(gè)component,來(lái)實(shí)現(xiàn)特定的算法,例如LMS算法?

    TLV320AIC3254EVM-K評(píng)估模塊, Pure path studio軟件開(kāi)發(fā)環(huán)境。 問(wèn)題:1.Pure path studio 內(nèi)能否自己創(chuàng)建一個(gè)component,來(lái)實(shí)現(xiàn)特定的算法
    發(fā)表于 11-01 08:25

    請(qǐng)問(wèn)GDE中的NR算法反應(yīng)慢怎么解決?

    我在使用NR(NoiseReduction)算法時(shí)發(fā)現(xiàn)算法起作用的時(shí)間太長(zhǎng),輸入1K正弦波測(cè)試,大約是在輸入40秒以后出現(xiàn)下圖轉(zhuǎn)變 再過(guò)段時(shí)間又變成下圖的樣子。 但是播放器重新開(kāi)始的短暫停止也
    發(fā)表于 10-29 07:42

    壓縮算法的類(lèi)型和應(yīng)用

    壓縮算法是一種通過(guò)減少數(shù)據(jù)量來(lái)節(jié)省存儲(chǔ)空間或傳輸數(shù)據(jù)的技術(shù)。壓縮算法可以分為兩種類(lèi)型:有損壓縮和無(wú)損壓縮。
    的頭像 發(fā)表于 10-21 13:50 ?892次閱讀

    名單公布!【書(shū)籍評(píng)測(cè)活動(dòng)NO.46】從算法到電路 | 數(shù)字芯片算法的電路實(shí)現(xiàn)

    :elecfans123)領(lǐng)取書(shū)籍進(jìn)行評(píng)測(cè),如在5個(gè)工作日內(nèi)未聯(lián)系,視為放棄本次試用評(píng)測(cè)資格! 《從算法到電路——數(shù)字芯片算法的電路實(shí)現(xiàn)》 是一本深入解讀基礎(chǔ)算法及其電路設(shè)計(jì),以打通算法
    發(fā)表于 10-09 13:43

    充電也要算法??jī)?chǔ)能充電芯片中的算法處理器

    電子發(fā)燒友網(wǎng)報(bào)道(文/黃山明)充電算法處理器是一種專(zhuān)門(mén)設(shè)計(jì)用于執(zhí)行充電算法的微處理器或ASIC,這些算法可以優(yōu)化電池的充電過(guò)程,提高充電效率,延長(zhǎng)電池壽命,并確保充電安全。這種處理器通常集成在BMS
    的頭像 發(fā)表于 07-30 00:07 ?4239次閱讀