algorithm - 为什么从范围树查询中获得的子树的数量是 O(log(n))?
解决方案
考虑搜索范围的两个端点。此搜索将继续,直到找到跨越您的区间的两个叶节点的最低共同祖先。那时,搜索分支,一部分向左弯曲,一部分向右弯曲。现在,让我们只关注向左分支的查询部分,因为逻辑相同,但右分支的逻辑相反。
在此搜索中,将每个节点视为不代表单个点,而是代表一系列点会有所帮助。那么,一般程序如下:
如果查询范围完全包含该节点表示的范围,则停止在 x 中搜索并开始搜索该节点的 y 子树。
如果查询范围纯粹在该节点的右子树表示的范围内,则继续向右搜索 x 并且不调查 y 子树。
如果查询范围与左子树的范围重叠,则它必须完全包含右子树的范围。所以处理右子树的y子树,然后递归地探索左边的x子树。
在所有情况下,我们最多添加一个 y 子树以供考虑,然后仅在一个方向上递归地继续探索 x 子树。这意味着我们基本上沿着 x-tree 追踪一条路径,每一步最多添加一个 y-subtree。由于树的高度为 O(log n),因此以这种方式访问的 y 子树的总数为 O(log n)。然后,包括在我们在顶部分支的情况下访问的 y 子树的数量,我们得到另一个 O(log n) 子树,总共 O(log n) 个子树要搜索。
希望这可以帮助!
推荐阅读
- python - Python 在另一个 Python .py 文件中定义一个类方法
- html - 使用 Leaflet Search 插件搜索 Shapefile
- python - ImportError 与 keras.preprocessing
- flutter - 颤振:StreamSink
无法从函数“chuckDataSink”返回,因为它的返回类型为 StreamSink >? - python - 如何在熊猫数据帧中使用 re.sub
- r - R - 最小二乘均值对比单向方差分析
- excel - 通过条件格式每隔 n 行比较两个单元格
- c# - 如何订阅 Blazor.Radzen DialogService onClose 事件
- javascript - 如何在 React 中以最有效的方式重用 html bloc(其中包含 props.state)
- sql - 组内的 SQL Server 查询 case 语句