【问题标题】:Optimizing algorithms for multiple queries of the same kind针对同一类型的多个查询优化算法
【发布时间】:2013-09-04 06:18:48
【问题描述】:

有一类特殊的算法编码问题需要我们评估多个查询,这可能是两种:

  1. 对一系列数据执行搜索
  2. 更新给定范围内的数据

我最近一直在研究的一个例子是这个(虽然不是唯一一个):Quadrant Queries

现在,为了优化我的算法,我有一个想法: 我可以使用动态编程来保留特定范围的搜索结果,并根据需要为其他范围生成数据。

例如,如果我必须计算数组中从索引 4 到 7 的数字总和,我已经可以将元素总和保持在 4 以内,将元素总和保持在 7 以内,这很容易,然后我只需要差值的两个 + 4th 元素,即 O(1)。但这引发了另一个问题:在更新操作期间,我必须为更新后的元素之后的所有元素更新我存储的搜索数据。这似乎效率低下,虽然我没有实际尝试过。

有人建议我可以使用一些特殊的数据结构来组合后续的更新操作。(实际上是在某个论坛上阅读的)。

问题: 有没有已知的方法来优化这类问题?是否有特殊的数据结构可以做到这一点?我提到的想法;它是否可能比直接方法更有效?我应该试试吗?

【问题讨论】:

  • 查看分段树和二叉索引树。
  • 我对@9​​87654322@ 的回答可能有助于解释段树和二叉索引树之间的区别。简而言之,要更新范围,您需要使用带有延迟更新的分段树。
  • 我以前用过BIT,所以我认为它可以在这个特定的地方工作。但是,如果运算是乘法而不是加法,那么使用 BIT 就有点麻烦了。我要检查段树。

标签: algorithm search optimization


【解决方案1】:

这可能会有所帮助: Segment Trees(范围-范围部分)

【讨论】:

  • 好的!段树似乎对我有用!我不知道它是否是最有效的,但肯定比我的效率更高。
猜你喜欢
  • 1970-01-01
  • 2013-09-21
  • 2023-01-12
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2021-12-15
  • 2019-08-03
  • 1970-01-01
相关资源
最近更新 更多