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

KJP辛格

我正在从Seymour Lipschutz撰写的关于数据结构的课程书中学习,我遇到的一个观点我并不完全了解。

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

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

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

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

丹尼达姆

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

确定二进制搜索的中间

二进制搜索中的元素邻居

使用二进制搜索从TreeSet返回元素

二进制搜索树未添加元素

二进制搜索对象数组中元素的字段

方案二进制搜索树添加元素

如何实现二进制搜索来查找开始元素,中间元素和结束元素?爪哇

为什么此二进制搜索成功后,中间的返回值被忽略?

二进制搜索丢失的元素是否总是在元素存在之前就返回该元素?

如果使用二进制搜索找到元素,如何获取元素索引(递归)

在Java中对随机访问文件实施二进制搜索

二进制搜索查找排序数组中比给定值最小和最大的元素?

C ++二进制搜索树实现未添加每个元素

用Java实现的二进制搜索树-递归查找元素

使用二进制搜索计算小于/大于给定数目的元素数目

二进制搜索的重复发生(将元素插入数组的时间)

将双链表的元素插入二进制搜索树

二进制搜索以查找数组的K个最近元素

删除二进制搜索树(C ++)中的单个元素

如何对向量进行二进制搜索以找到具有特定ID的元素?

C自定义二进制搜索不遵循“元素大小的倍数”规则并崩溃

带有通用元素的列表中的二进制搜索

Java二进制搜索树删除递归返回已删除元素

C#二进制搜索树给出错误的多数元素

某些元素未添加到二进制搜索树中

C ++二进制搜索无法正常工作-查找元素不在数组中

将元素插入二进制搜索树时出错

第 5 个元素的二进制搜索 (Java) 异常

为什么Javas Collections Framework二进制搜索使用迭代器搜索大列表中的元素