Questions tagged «search-trees»

有关搜索树的问题,搜索树是用于存储排序数据以进行有效访问的一类数据结构。

1
分段求和问题的分段树实现的时间复杂度证明
我知道可以使用段树来找到的子数组的总和。根据此处的教程,该操作可以在时间内完成。一个AAO(对数n )O(log⁡n)\mathcal{O}(\log n) 但是我无法证明查询时间确实是。此链接(以及许多其他链接)说,我们可以证明在每个级别上,已处理的最大节点数为,因此。O(对数n )O(log⁡n)\mathcal{O}(\log n)444O(4对数n )= O(对数n )O(4log⁡n)=O(log⁡n)\mathcal{O}(4 \log n) = \mathcal{O}(\log n) 但是,我们怎么可能通过矛盾来证明这一点呢? 如果是这样,如果我们将分段树用于高维数组的范围和,该证明将如何扩展? 例如,我可以考虑通过将原始矩阵划分为4个象限(类似于线性阵列中的一半)来找到一个子矩阵总和,以构建一个象限分段树,但是证明使我难以理解。

1
使用二进制索引树进行范围更新+范围查询
我试图了解如何修改二进制索引树(fenwick树)以处理范围查询和范围更新。 我发现以下来源: http://kartikkukreja.wordpress.com/2013/12/02/range-updates-with-bit-fenwick-tree/ http://programmingcontests.quora.com/Tutorial-Range-Updates-in-Fenwick-Tree http ://apps.topcoder.com/forums/?module = Thread&threadID = 756271&start = 0&mc = 4#1579597 但是即使通读了所有它们,我也无法理解第二个二进制索引树的目的或作用。 有人可以向我解释一下如何修改二进制索引树来处理这些吗?

2
概率搜索数据结构有用吗?
SkipList提供与平衡树相同的搜索范围,其优点是不需要重新平衡。由于SkipList是使用随机硬币翻转构成的,因此只要SkipList的结构足够“平衡”,这些界限就成立。特别是,对于某些常数,概率为,插入元素后,平衡结构可能会丢失。O(logn)O(log⁡n)O(\log n)1/nc1/nc1/n^cc>0c>0c>0 假设我想将跳过列表用作可能永远运行的Web应用程序中的存储后端。因此,经过一些多项式运算之后,SkipList的平衡结构很可能会丢失。 我的推理正确吗?这样的概率搜索/存储数据结构是否具有实际应用,如果可以,那么如何避免上述问题? 编辑:我知道SkipList有确定性变体,与(经典)随机化SkipList相比,实现起来要复杂得多。

3
对数与双对数时间复杂度
在实际应用中,使用而不是O(log (n ))算法有具体的好处吗?O(对数(日志(n ))O(log⁡(log⁡(n))\mathcal{O}(\log(\log(n))O(对数(n ))O(log⁡(n))\mathcal{O}(\log(n)) 当使用例如van Emde Boas树而不是更常规的二进制搜索树实现时就是这种情况。但是例如,如果我们取那么在最佳情况下,双对数算法的对数性能比对数算法高(大约为5)。而且一般来说,实现起来更加棘手和复杂。n &lt; 106n&lt;106n < 10^6555 考虑到我个人比VEB树更喜欢BST,您怎么看? 一个人可以很容易地证明: ∀ Ñ &lt; 106。日志 ñ日志(日志(n ))&lt; 5.26146∀n&lt;106. log⁡nlog⁡(log⁡(n))&lt;5.26146\qquad \displaystyle \forall n < 10^6.\ \frac{\log n}{\log(\log(n))} < 5.26146
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.