→ nh60211as: 要直接看程式碼的話 GCC、Clang跟MSVC網路上都有 05/20 22:23
→ nh60211as: 得看 05/20 22:23
推 LPH66: 第一題是在問 Amortized 的概念, 它並不單看單一存取的時間 05/21 02:39
→ LPH66: 而是將許多次同樣操作所需要的時間進行平均 05/21 02:39
→ LPH66: Amortized (均攤) 常數時間代表, 雖然有可能單一操作會花 05/21 02:40
→ LPH66: 稍微多一點, 但其他時候的狀況的時間都很短 05/21 02:41
→ LPH66: 當考慮進各種狀況的比例及所需操作平攤之後 05/21 02:41
→ LPH66: 平均每個操作的時間仍然是常數, 那就說這是個均攤常數時間 05/21 02:42
→ oToToT: 2 的話只要平常多維護一個 linked list 就可以做到了吧? 05/21 02:44
→ LPH66: 第二題, 最簡單的做法是右→左→左→左→…到底 05/21 02:45
→ LPH66: 但這個方法在往上時要知道從哪裡來的, 所以也有另外維護 05/21 02:46
→ LPH66: 下一個元素所在指標的方式 (這可以在樹有調整時一起調整) 05/21 02:46
→ LPH66: 補充一點均攤分析的東西, 這種分析一般其實並不會真的去求 05/21 02:48
→ LPH66: 各種狀況的比例, 而是實際去看全部跑下來會有哪些操作 05/21 02:48
→ LPH66: 常用技巧是利用某個虛擬 token 擺在結構中表示未來可能操作 05/21 02:49
→ LPH66: 接著去證明每個地方只要某個數量的 token 的數目 05/21 02:50
→ LPH66: 這樣就代表不管狀況怎樣, 總操作數目不會超過一個已知數量 05/21 02:50
→ LPH66: 從這個已知數量即可推得均攤的時間複雜度 05/21 02:51