【发布时间】: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