RMQ与LCA算法总结

转自:http://apps.hi.baidu.com/share/detail/33202817


下面放出总结的表:


算法

处理方式

复杂度

备注

转化算法

LCA =>±1RMQ

N/A

O(n)

引理1,规模O(n) – O(2n-1)

RMQ => LCA-CT

N/A

O(n)

引理2,规模不变

朴素算法

LCA-Naive

online

O(n^2)-O(1)

动态规划

RMQ-Naive

online

O(n^2)-O(1)

直接求解

经典算法

LCA-Tarjan

offline

O(na(n))

RMQ-ST

online

O(nlogn)-O(1)

改进算法

RMQ-ST-Block

online

O(nloglogn)-O(1)

RMQ-ST分段处理

±1RMQ-ST-Block

online

O(n)-O(1)

控制RMQ-ST-Block中分段的段种数,得到O(n)算法。

快速算法

RMQ-Fast

online

O(n)-O(1)

RMQ => LCA-CT => ±1RMQ

折衷算法

RMQ-IT

online

O(n)-O(logn)

线段树直接处理

RMQ-CT-Tarjan

offline

O(na(n))

RMQ => LCA-CT

再用LCA-Tarjan解决。


我们可以将一般RMQ的值得应用的算法列表:

算法

处理方式

复杂度

备注

RMQ-IT

online

O(n)-O(logn)

询问不多时,竞赛首选。

RMQ-CT-Tarjan

offline

O(na(n))

由于是离线的,而且还要转化成CT,某些地方不应用。

RMQ-ST

online

O(nlogn)-O(1)

询问多时,竞赛首选。

RMQ-ST-Block

online

O(nloglogn)-O(1)

时间要求特别严格时采用。


你可能感兴趣的:(算法)