在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

算法大神Tarjan

算法與數據結構 ? 來源:算法與數據結構 ? 作者:算法與數據結構 ? 2021-01-04 14:23 ? 次閱讀

有同學在學習圖論算法的時候,發現這里有個 Tarjan 算法,那里有個 Tarjan 算法,而似乎 Tarjan 算法解決的問題并不一樣,于是非常迷惑:Tarjan 算法到底是指什么?

這是一個很好的問題。Tarjan 是計算機領域的大牛,發明了很多現在大家耳熟能詳的算法或者數據結構,所以有同學會覺得冠他名字的算法有些多。

但如果我們仔細梳理一下,其實并不復雜。

在這篇文章中,我會帶領大家梳理一下 Tarjan 發明的算法都有哪些,整體脈絡是怎樣的。

注意:在這篇文章中,我不會具體講解某個算法的原理。但是,我會給出很多具體的關鍵字,并且標紅。如果大家對某個算法想深入了解,可以以此為引,在互聯網上搜索學習。

我相信,互聯網上關于某個具體算法的資料是非常多的,反而是這樣按照某個脈絡做總結的文章很少。

首先,Tarjan 是一名美國的計算機科學家和數學家,全名 Robert Endre Tarjan。

先來一個 Tarjan 大神的名言鎮樓:

一般提起 Tarjan 算法,通常是指 Tarjan 發明的求解有向圖的強聯通分量算法,全稱是Tarjan’s Strongly Connected Components Algorithm.

為什么這么叫?因為求解有向圖的強聯通分量還有一個著名算法:Kosaraju 算法。Kosaraju 算法也是以他的發明者的名字命名的。

我在算法比賽中,或者需要求解 SCC(強連通分量的縮寫:Strongly Connected Components) 問題的時候,喜歡寫 Kosaraju 算法。因為 Kosaraju 算法的實現非常簡單,復雜度和 Tarjan 算法是一樣的,都是 O(V + E) 的。

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

而 Tarjan 算法之所以有名,關鍵在于使用 Tarjan 算法的思想,不僅僅可以求解 SCC 問題,還可以求無向圖中的橋或者割點。

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

所謂的 Tarjan 算法思想,就是在遍歷整個圖的過程中,對每一個遍歷的節點記錄一個時間戳,通常被稱為是 DFN;同時,記錄通過這個節點,不經過父親節點,最早能回到的時間戳,通常被稱為是 LOW。通過這些信息,就能判斷一個圖的橋,割點,和強連通分量。

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

然而,Tarjan 的貢獻遠不止于此。以Tarjan命名的另外一個非常著名的算法,叫Tarjan‘s Off-line Least Common Ancestors Algorithm。

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

實際上,離線的 LCA 問題,是計算機科學領域非常著名的問題,深究下去,和Binary Lifting,RMQ等非常著名的算法思想都有聯系。

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

說到并查集,Tarjan 也和這種數據結構有不解之緣。并查集雖然不是 Tarjan 發明的,但是并查集的復雜度是 Tarjan 首先分析清楚的:也就是Ackerman 函數的反函數。

如果對此感興趣的同學,可以翻看《算法導論》,《算法導論》對這部分內容介紹得很清楚。

實際上,這也是《算法導論》這本教材的意義:稍微深入一些的算法分析問題,一般的算法教材都不會涉及。而《算法導論》所覆蓋的深度和廣度,比大多數教材都高太多。

當然,這也是《算法導論》不適合入門的原因。

說到數據結構,Tarjan 確實發明過數據結構。最有名的兩個,一個是斐波那契堆,一個是Splay 樹。

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

Splay 樹最大的優勢是實現簡單,比紅黑樹簡單不知道多少倍。所以,如果我們需要調用更加底層的樹操作,需要自己實現一個自平衡的二分搜索樹時,通常 Splay 樹是首選。

也正因為如此,很多搞競賽的同學,都是能手寫 Splay 樹的。

Tarjan 還是非常著名的算法:BFPRT的作者之一。其實 BFPRT 這個算法的名字,是其五個作者首字母的縮寫。其中的 T,就是 Tarjan。

BFPRT 這個名字聽起來非常拗口,同時也難記,但是它的另一個名字就很簡單直接了,就是Median of Medians。

這個算法整體并不難理解,是快排思想的一種更穩定的優化,每次近乎可以保證選取所處理的數組的中位數作為標定點(pivot),使得快速排序的最差時間復雜度真真正正達到了 O(nlogn)。

值得一提的是,BFPRT 算法的這五位作者,都是計算機科學領域的大牛。他們分別是:

B是 Blum,全名 Manuel Blum,他因為復雜度理論方面的貢獻,以及密碼學的應用,獲得了 1995 年的圖靈獎;

F是 Floyd,全名 Robert W. Floyd,相信大家都很熟悉。大家在算法課本上一定會學到的所有點對的最短路徑算法,就是他和 Warshall 一起提出的,即Floyd–Warshall 算法。同時,Floyed 還提出了非常著名的Floyed 環檢測算法。他獲得了 1978 年的圖靈獎;

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

R是 Rivest,全名 Ron Rivest。他是 MIT 的教授,專攻密碼學。我們現在所經常使用的MD5 算法,他就是作者之一;

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

在圖論領域,Tarjan 還改進了一個非常著名的算法:最小樹形圖。最小樹形圖這個名字聽起來很復雜,但其實這個概念很簡單:就是有向圖的最小生成樹。

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

后來,Tarjan 改進了這個算法,可以使用 O(ElogV) 的時間做預處理,之后使用 O(V) 的時間,求解圖中以任意頂點為根的最小樹形圖

Tarjan 還發明了一種平面圖的檢測算法,首次在線性時間解決了平面圖檢測問題(Planarity-Testing)。因為平面圖檢測離大多數同學的工作比較遠,所以可能很少有同學了解這個算法。

Tarjan 的平面圖檢測算法還有一個合作者:John Hopcroft。他們二人因為這個算法,以及在算法和數據結構等基礎領域對計算機科學的貢獻,獲得了 1986 年的圖靈獎。

Tarjan 的碩士和博士是在斯坦福大學讀的。他的導師有兩個。一個就是大名鼎鼎的 Floyd,上文介紹 BFPRT 算法的時候介紹了。在這里給一個年輕的時候,Floyd 風流倜儻的帥照:

Tarjan 的另一名導師,則是計算機科學領域的神級人物:Donald Knuth。他可以說是計算復雜領域的創始人。

Donald Knuth 的經歷和貢獻,可以寫一本書了。有時間,我會再寫一篇文章介紹他。現在,很多人了解他,都是因為他的神作:TAOCP,即The Art of Computer Programming,被中文翻譯成《計算機程序設計藝術》。這套書被評為至今計算機科學史上最重要的神作,但其實還沒有寫完。

不過 Donald Knuth 對計算機科學領域的貢獻,遠不止一套書這么簡單。要聊 Donald Knuth 的話,能聊的就太多。這篇文章我們收一收,說回 Tarjan。

Tarjan 現在還在世,今年已經 72 歲了。根據維基百科,現在 Tarjan 在普林斯頓任教。

實際上,在計算機科學領域,很多在教科書中出現的人物,都還在世;很多教科書級別的算法,概念,理論,其實距離提出,也不過是幾十年的時間。

這足以可見:計算機是多么年輕的一個學科。

也正是因為這個原因,在計算機科學領域中,還有大量的沒有被完全解決的問題。

計算機科學領域其實還大有可為。

責任編輯:xj

原文標題:Tarjan 這個算法大神

文章出處:【微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4625

    瀏覽量

    93140
  • 計算機
    +關注

    關注

    19

    文章

    7525

    瀏覽量

    88374

原文標題:Tarjan 這個算法大神

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    算法加速的概念、意義、流程和應用

    本文介紹算法加速的概念、意義、流程和應用 一、什么是算法加速 面向“最耗時”的部分做專用化處理: 在軟件運行時,總有一些特定算法會消耗大量 CPU 資源,比如加密解密、圖像處理或神經網絡推理。這類
    的頭像 發表于 01-15 09:34 ?82次閱讀

    【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+內容簡介

    內容簡介這是一本深入解讀基礎算法及其電路設計,以打通算法研發到數字IC設計的實現屏障,以及指導芯片設計工程師從底層掌握復雜電路設計與優化方法為目標的專業技術書。任何芯片(如WiFi芯片、5G芯片
    發表于 11-21 17:14

    【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+介紹基礎硬件算法模塊

    作為嵌入式開發者往往比較關注硬件和軟件的協調。本書介紹了除法器,信號發生器,濾波器,分頻器等基本算法的電路實現,雖然都是基礎內容,但是也是最常用到的基本模塊。 隨著逆全球化趨勢的出現,過去的研發
    發表于 11-21 17:05

    【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+一本介紹基礎硬件算法模塊實現的好書

    作為嵌入式開發者往往比較關注硬件和軟件的協調。本書介紹了除法器,信號發生器,濾波器,分頻器等基本算法的電路實現,雖然都是基礎內容,但是也是最常用到的基本模塊,本書的內容比較對本人胃口。 我們先來
    發表于 11-20 13:42

    Pure path studio內能否自己創建一個component,來實現特定的算法,例如LMS算法

    TLV320AIC3254EVM-K評估模塊, Pure path studio軟件開發環境。 問題:1.Pure path studio 內能否自己創建一個component,來實現特定的算法
    發表于 11-01 08:25

    請問GDE中的NR算法反應慢怎么解決?

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

    壓縮算法的類型和應用

    壓縮算法是一種通過減少數據量來節省存儲空間或傳輸數據的技術。壓縮算法可以分為兩種類型:有損壓縮和無損壓縮。
    的頭像 發表于 10-21 13:50 ?314次閱讀

    名單公布!【書籍評測活動NO.46】從算法到電路 | 數字芯片算法的電路實現

    :elecfans123)領取書籍進行評測,如在5個工作日內未聯系,視為放棄本次試用評測資格! 《從算法到電路——數字芯片算法的電路實現》 是一本深入解讀基礎算法及其電路設計,以打通算法
    發表于 10-09 13:43

    充電也要算法?儲能充電芯片中的算法處理器

    電子發燒友網報道(文/黃山明)充電算法處理器是一種專門設計用于執行充電算法的微處理器或ASIC,這些算法可以優化電池的充電過程,提高充電效率,延長電池壽命,并確保充電安全。這種處理器通常集成在BMS
    的頭像 發表于 07-30 00:07 ?3766次閱讀

    機器學習算法原理詳解

    機器學習作為人工智能的一個重要分支,其目標是通過讓計算機自動從數據中學習并改進其性能,而無需進行明確的編程。本文將深入解讀幾種常見的機器學習算法原理,包括線性回歸、邏輯回歸、支持向量機(SVM)、決策樹和K近鄰(KNN)算法,探討它們的理論基礎、
    的頭像 發表于 07-02 11:25 ?1247次閱讀

    BLDC電機控制算法詳解

    算法。本文將詳細介紹BLDC電機的控制算法,包括電速算法、電流環控制算法、磁場導向控制算法等,并探討其原理、特點和應用。
    的頭像 發表于 06-14 10:49 ?1154次閱讀

    運動控制算法有哪些

    運動控制算法是機器人學和自動化領域中的核心技術之一,它們負責規劃和執行機器人或自動化設備的精確運動。以下是一些常見的運動控制算法,以及它們的基本原理和應用場景。 PID控制算法
    的頭像 發表于 06-13 09:17 ?2760次閱讀

    如何對MD5加密算法優化?

    有人針對程序安全啟動過程,進行MD5算法的優化嘛。目前采用標準算法,時間稍長,如果有人做過優化的話,可以分享一下,謝謝。
    發表于 02-18 08:20

    AURIX TC397是否可以搭配Google TensorFlow的演算法去運算?

    請問各位大神,AURIX TC397 是否可以搭配 Google TensorFlow 的演算法 去運算??
    發表于 02-18 06:05

    Camera算法集成實現指南

    最常見的雙攝算法是雙攝景深算法或者叫雙攝背景虛化算法,除此之外,也有彩色+黑白用于增強夜拍效果的雙攝算法。單幀算法和多幀
    的頭像 發表于 01-25 15:12 ?2143次閱讀
    主站蜘蛛池模板: 天天干天天射天天| 欧美屁屁影院| 激情都市亚洲| 国产精品特黄毛片| www.成人在线| 天天干天天干天天插| 日操夜干| 性xxxxhd高清| 男女做性无遮挡免费视频| 一久久| 手机亚洲第1页| 国产精品天天操| 5g影院午夜伴侣| 亚洲视频在线一区二区三区| 九九免费久久这里有精品23| 亚洲va中文字幕无码| 日产乱码免费一卡二卡在线| 久久久久久久国产精品电影| videosgratis乱色欧美野外| 天天操狠狠操| 免费在线观看的网站| 国产叼嘿视频网站在线观看| 天堂成人网| 美女天天色| 小雪被撑暴黑人黑人与亚洲女人| 久久国产午夜精品理论片34页| 黄色网在线看| 伊人狠狠丁香婷婷综合色| 色播丁香| 成年男人永久免费看片| 日日干夜夜操视频| 国产欧美日韩haodiaose| 在线免费成人| 女人张腿让男桶免费视频观看| 成人在线91| 黄 色 成 年人在线| 欧美亚洲第一区| 四虎影院新网址| 国产婷婷综合丁香亚洲欧洲| 天堂成人在线| 一区二区三区在线观看视频|