顯示廣告
隱藏 ✕
※ 本文為 dinos 轉寄自 ptt.cc 更新時間: 2015-02-26 16:56:20
看板 Prob_Solve
作者 DJWS (...)
標題 Re: [問題] 主席樹?
時間 Thu Feb  5 13:46:44 2015


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) ,我還沒搞清楚...

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.78.113
※ 文章代碼(AID): #1KqmF8Qd (Prob_Solve)
※ 文章網址: https://www.ptt.cc/bbs/Prob_Solve/M.1423115208.A.6A7.html
※ 同主題文章:
※ 編輯: DJWS (111.250.78.113), 02/05/2015 13:56:52
※ 編輯: DJWS (111.250.78.113), 02/05/2015 13:57:31
dreamoon: 總覺得這種食後要貼出那個Let me google that for you..1F 02/05 16:13
FRAXIS: 挺有趣的技巧 我研究看看2F 02/05 23:17
FRAXIS: 我有點搞不懂 那是不是把所有ai, bi 排序 一個一個作就好?
DJWS: 按照XY座標排序之後順序  總距離通常較長5F 02/06 19:32
DJWS: 然後圖中的直線改成階梯狀就是 rectangular distance
FRAXIS: 了解了 感謝7F 02/06 22:17
FRAXIS: 但是不能把整個空間分塊嗎? 然後每一區塊選一個中心
FRAXIS: 這樣就可以先preprocess 來 speed-up查詢
FRAXIS: 我上網看了一下 大概了解是在幹嘛了..
FRAXIS: http://ppt.cc/vPsR 似乎是個複雜度的證明..
无加和性质的区间查询——莫队算法详解 « 峰的博客
机房的众神犇都在搞这个东西,本SB也掺和一下下吧。
莫队算法可用于解决一类可离线且在得到区间[l,r]的答案后,能在O(1)或O(\log_2{n})得到区间[l,r+1]或[l-1,r]的答... ...

 
DJWS: 這個算法跟區間查詢其實沒有直接關係12F 02/07 12:16
DJWS: 這個技巧其實還可以套用到 dynamic programming 狀態轉移
DJWS: 然後你講的也是一個好方法 應該就是ALT Algorithm
FRAXIS: http://ppt.cc/9~oW 我的看法比較類似這個15F 02/07 23:11
一个很多莫队算法初学者的误区 - ydc的日志 - 网易博客
一个很多莫队算法初学者的误区,ydc的网易博客,网易博客, ...

 
FRAXIS: 這技巧應該是因為實作比較容易16F 02/07 23:11

--
※ 看板: dinos 文章推薦值: 0 目前人氣: 0 累積人氣: 233 
分享網址: 複製 已複製
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇