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