看動畫學演演算法之:環檢測演演算法-弗洛伊德的兔子和烏龜

2020-09-24 11:01:18

簡介

環檢測應該是一個非常常見的演演算法問題,怎麼判斷是否有環的問題呢?

一個很簡單的做法就是用HashSet來儲存要遍歷的資料,如果出現了重複就知道這個連結串列是有環的。但是這個方法需要儲存遍歷過的所有的元素,所以其空間複雜度是o(n)。

有沒有什麼方法可以不用儲存之前的元素也能夠判斷是否有環呢?

來看看弗洛伊德的兔子和烏龜演演算法吧。

弗洛伊德簡介

有的同學會說了,弗洛伊德(Sigmund Freud)誰不知道,夢的解析的作者,大名鼎鼎的心理學專家,精神分析學派的創始人。

但是這裡我們講的弗洛伊德全名是Robert W.Floyd(羅伯特·弗洛伊德)而不是Sigmund Freud。

羅伯特·弗洛伊德是電腦科學家,圖靈獎得主,前後斷言法的創始人,堆排序演演算法和Floyd-Warshall演演算法的創始人之一。

它獲得了1978年圖靈獎,是一位「自學成才的電腦科學家」。

這個兔子和烏龜演演算法就是他發明的一種環檢測演演算法。

構造一個環