Re: [問題] 主席樹?

作者: DJWS (...)   2015-02-05 13:46:44
→ FRAXIS: 可不可以簡單介紹一下莫隊算法的功用啊? 02/05 01:26
現在有許多個區間查詢 Q = { [a1,b1] , [a2,b2] , ... , [ak,bk] }
預計其查詢結果是 r[a1,b1] ... r[ak,bk]
假設問題具備此性質:
已知 r[a,b] ,可以快速求得邊界差一的結果如 r[a-1,b] r[a+1,b] r[a,b-1] r[a,b+1]
令計算時間為 O(f(n))
那麼,已知 r[ai,bi] 推得 r[aj,bj] 的時間就是 O((|ai-aj| + |bi-bj|) * f(n))
即 rectangular distance (L1)
我們現在替 Q 中所有查詢,安排適當計算順序,讓總時間最少。
查詢視為座標,即 minimum spanning tree with rectangular distance O(k log k)
找到樹之後,跑個DFS或BFS,就得到最佳的計算順序。
(理論上 steiner tree 效果更好,不過它是 NP-hard ...)
我理解的莫隊算法是這樣。
至於為什麼莫隊算法宣稱 O(n^1.5) ,我還沒搞清楚...
作者: FRAXIS (喔喔)   2014-02-05 01:26:00
可不可以簡單介紹一下莫隊算法的功用啊?
作者: dreamoon (千古悲情人物)   2015-02-05 16:13:00
總覺得這種食後要貼出那個Let me google that for you..
作者: FRAXIS (喔喔)   2015-02-05 23:17:00
挺有趣的技巧 我研究看看我有點搞不懂 那是不是把所有ai, bi 排序 一個一個作就好?
作者: DJWS (...)   2015-02-06 19:32:00
http://postimg.org/image/e2er9e6ev/按照XY座標排序之後順序 總距離通常較長然後圖中的直線改成階梯狀就是 rectangular distance
作者: FRAXIS (喔喔)   2015-02-06 22:17:00
了解了 感謝但是不能把整個空間分塊嗎? 然後每一區塊選一個中心這樣就可以先preprocess 來 speed-up查詢我上網看了一下 大概了解是在幹嘛了..http://ppt.cc/vPsR 似乎是個複雜度的證明..
作者: DJWS (...)   2015-02-07 12:16:00
這個算法跟區間查詢其實沒有直接關係這個技巧其實還可以套用到 dynamic programming 狀態轉移然後你講的也是一個好方法 應該就是ALT Algorithm
作者: FRAXIS (喔喔)   2015-02-07 23:11:00
http://ppt.cc/9~oW 我的看法比較類似這個這技巧應該是因為實作比較容易

Links booklink

Contact Us: admin [ a t ] ucptt.com