【问题标题】:Trying to understand dynamic binary search question试图理解动态二进制搜索问题
【发布时间】:2021-02-03 21:39:46
【问题描述】:

算法介绍有以下问题

有序数组的二分查找需要对数查找时间,但是 插入新元素的时间与数组的大小成线性关系。我们 可以通过保留多个排序数组来提高插入时间。

具体来说,假设我们希望支持 SEARCH 和 INSERT n 个元素的集合。让 k 等于 lg(n + 1) 的上限,并让 n 的二进制表示为 (nk-1, nk-2 ... n0)。我们已经 k 排序 数组 (A0, A1, Ak-1) 其中 i = (0, 1, ... k-1) , 的长度 数组 Ai 是 2i。每个数组是满的还是空的,取决于 分别是 ni = 1 还是 ni = 0。元素总数 因此,在所有 k 个数组中保存的是 ni * 2i 从 0 到 k-1 的总和 等于n。尽管每个单独的数组都已排序,但其中的元素 不同的数组彼此之间没有特定的关系。

我很难理解它所描述的数据结构。具体来说,我对 行感到困惑,并让 n 的二进制表示为 (nk-1, nk-2 ... n 0)" 我明白什么是二进制表示,但是,我对 "(nk-1, nk-2 感到困惑。 .. n0)”。 n 不是已经定义了吗? n 有 k-1 个变体吗?还是 n 受 k 的限制?我们只是在看二进制的 k-1 位数字吗?

这条线是什么意思?

还有它与 “每个数组是满的还是空的,取决于 ni = 1 还是 ni = 0”有什么关系” em>?

例如,如果我有数组 A = {0, 1, 2, 3, 4, 5, 6}

我知道 k = 3,因此我有 3 个长度为 1 的数组 A0、A1、A2, 2, 4. 然而 我不明白这些数组的内容是什么。

数组 A0、A1、A2 的内容是什么?

【问题讨论】:

    标签: arrays algorithm binary-search


    【解决方案1】:

    n 项在整个数组中任意分布。唯一的限制是数组 i 中的项目数,如果它已满,则为 2i

    我确定(或者至少我希望!)有很多文本您没有粘贴,尽管您引用的文本足以弄清楚发生了什么。

    您必须考虑添加项目时 n 的二进制表示会发生什么。

    假设您有 11 个项目,因此 n=11。 11的二进制表示为1011,所以A0、A1、A3是满的,A2 为空。每个完整数组中的项目数等于其二进制位值,因此项目总数为 11。

    现在,当我们插入一个项目时,n 将变为 12。二进制表示现在是 1100。因此,A0 和 A1 被清空了,而 A2 被填充了,当然,我们从 A0 和 A1,以及新项目。

    每次插入时,可能有一些完整的数组必须清空,并且有一个空数组必须用它们的项和新的数组按排序顺序填充。这需要的时间与移动的项目数量成正比。

    插入的摊销成本对于每个数组都是恒定的,因此插入的总摊销成本为 O(log N)。

    搜索的成本是 O(log2 N),因为你必须在所有完整的数组中搜索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-16
      • 2017-03-04
      • 2013-09-19
      • 2020-11-16
      • 2022-12-08
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      相关资源
      最近更新 更多