環檢測應該是一個非常常見的演演算法問題,怎麼判斷是否有環的問題呢?
一個很簡單的做法就是用HashSet來儲存要遍歷的資料,如果出現了重複就知道這個連結串列是有環的。但是這個方法需要儲存遍歷過的所有的元素,所以其空間複雜度是o(n)。
有沒有什麼方法可以不用儲存之前的元素也能夠判斷是否有環呢?
來看看弗洛伊德的兔子和烏龜演演算法吧。
有的同學會說了,弗洛伊德(Sigmund Freud)誰不知道,夢的解析的作者,大名鼎鼎的心理學專家,精神分析學派的創始人。
但是這裡我們講的弗洛伊德全名是Robert W.Floyd(羅伯特·弗洛伊德)而不是Sigmund Freud。
羅伯特·弗洛伊德是電腦科學家,圖靈獎得主,前後斷言法的創始人,堆排序演演算法和Floyd-Warshall演演算法的創始人之一。
它獲得了1978年圖靈獎,是一位「自學成才的電腦科學家」。
這個兔子和烏龜演演算法就是他發明的一種環檢測演演算法。
在