二进制搜索访问中间元素的缺点



我正在学习Seymour Lipschutz的《数据结构》课程,我遇到了一个我不完全理解的问题。。

二进制搜索算法假设可以直接访问列表中的中间元素。这意味着列表必须存储在某种类型的线性数组中。

我读过这篇文章,也认识到在Python中,您可以随时访问中间元素。然后这本书接着说:

不幸的是,在数组中插入元素需要将元素从列表中下移,而从数组中删除元素则需要将元素在列表中上移。

这是一个怎样的缺点?我们不能通过将数组的长度除以2来访问中间元素吗?

在不修改数组的情况下,插入和删除的成本是不相关的。

但是,如果要使用数组来维护一组已排序的非固定项,则插入和删除成本是相关的。在这种情况下,可以使用二进制搜索来查找项目(可能用于删除(和/或查找应该插入新项目的位置。缺点是插入和删除需要移动其他元素。

Python的平分模块提供了二进制搜索功能,可用于定位插入点以维护排序顺序。上述缺点适用。

在某些情况下,二进制搜索树可能是排序数组的优选替代方案,用于维护非固定项目的排序集。

作者似乎比较了类似数组的结构和链接的列表

第一个(数组、Python和Java列表、C++向量(允许通过索引快速而简单地访问任何元素,但追加、插入或删除可能会导致内存重新分配。

第二,我们不能直接寻址第i个元素,我们需要从一开始遍历列表,但当我们有元素时,我们可以快速插入或删除。

最新更新