【发布时间】:2013-09-04 06:18:48
【问题描述】:
有一类特殊的算法编码问题需要我们评估多个查询,这可能是两种:
- 对一系列数据执行搜索
- 更新给定范围内的数据
我最近一直在研究的一个例子是这个(虽然不是唯一一个):Quadrant Queries
现在,为了优化我的算法,我有一个想法: 我可以使用动态编程来保留特定范围的搜索结果,并根据需要为其他范围生成数据。
例如,如果我必须计算数组中从索引 4 到 7 的数字总和,我已经可以将元素总和保持在 4 以内,将元素总和保持在 7 以内,这很容易,然后我只需要差值的两个 + 4th 元素,即 O(1)。但这引发了另一个问题:在更新操作期间,我必须为更新后的元素之后的所有元素更新我存储的搜索数据。这似乎效率低下,虽然我没有实际尝试过。
有人建议我可以使用一些特殊的数据结构来组合后续的更新操作。(实际上是在某个论坛上阅读的)。
问题: 有没有已知的方法来优化这类问题?是否有特殊的数据结构可以做到这一点?我提到的想法;它是否可能比直接方法更有效?我应该试试吗?
【问题讨论】:
-
查看分段树和二叉索引树。
-
我对@987654322@ 的回答可能有助于解释段树和二叉索引树之间的区别。简而言之,要更新范围,您需要使用带有延迟更新的分段树。
-
我以前用过BIT,所以我认为它可以在这个特定的地方工作。但是,如果运算是乘法而不是加法,那么使用 BIT 就有点麻烦了。我要检查段树。
标签: algorithm search optimization