學習fibnacci堆的意義是什麼

2021-07-28 23:34:02 字數 536 閱讀 5775

學習平攤分析(amortize analysis)的思想。

fib堆是乙個非常複雜的資料結構,實際應用中沒有應該沒有普通的二叉小根堆更實用。但是裡面涉及到了演算法設計中乙個重要的思想,平攤分析,這是一種洞察力。可以輔助設計整體效能更好的演算法。

刪除最小的根,這個操作的複雜度是o(logn), 雖然和普通堆是一樣的,但是這裡做了很多任務作。例如調整堆的高度,讓有相同children的樹合併在一起。這樣做得結果是增加了樹的深度,減少了root list的長度。

奇怪的是decrease key, 本來是乙個簡單的o(1)操作,但是由於級聯刪除的引入,使其複雜度提公升。如何沒有級聯刪除會帶來什麼後果呢?會形成很長的單支,而且這些單支無法通過其他操作來消除。這會使fib樹的效能收到極大影響。 那麼級聯刪除是否會使decrease key的操作變得複雜呢?級聯操作會使樹的個數增加,被mark節點的個數減少。樹多則勢大,mark點多也勢大。 decrease key 導致增加的樹恰好正比於失去的mark節點,因此樹整體的勢無明顯變化。

可見這裡勢所代表的意義,就是保持乙個堆是一棵樹,但不是單支樹的能力。

Intent一堆屬性的意義

個人理解。data屬性,就是我們所說的uri當然,這裡是字串型別的。type屬性用來明確指定data屬性所指定資料的型別或mime型別,比如下邊的 intent intent new intent intent.action get content intent.settype vnd.androi...

什麼是token和使用的意義

一 什麼是token token 計算機術語 在計算機身份認證中是令牌 臨時 的意思,在詞法分析中是標記的意思。一般作為邀請 登入系統使用。二 token的意義三 token的作用 token 是在服務端產生的。如果前端使用使用者名稱 密碼向服務端請求認證,服務端認證成功,那麼在服務端會返回 tok...

學習編譯原理的意義

2015 06 18 不知誰提出了 程式設計師的三大浪漫,編譯原理,圖形學,作業系統 這個說法。這三個方向,我都看了一些書研究過,我的過程是編譯原理 作業系統 圖形學。現在只做圖形學方向了,其他兩個暫停掉了,或者說暫時夠用了。我當時自學這門課程的乙個重要原因,是我想克服內心的恐懼 我不能認識程式世界...