我正在学习二进制搜索,基本定义从第一个元素的迭代器开始,到另一个元素开始。您还有一个键,这是您正在寻找的元素。首先将密钥与中点的值进行比较,然后根据密钥是大于还是小于中点的值来消除上半部分或下半部分。这个过程一直持续到匹配为止。
此方法不会要求您正在查看的容器已排序吗?否则,我看不出容器中的键和值之间的比较如何消除要查看的容器部分是否有任何特殊用途。
答案 0 :(得分:4)
是的,确实如此。
在计算机科学中,二元搜索或半间隔搜索算法在数组中按键值查找指定输入值(搜索“键”)的位置。
来源:Wikipedia: Binary Search Algorithm,虽然算法上任何其他正常的文字都应该提到必须对数组进行排序。
答案 1 :(得分:3)
答案是肯定的。二进制搜索假定您首先对集合进行排序。如果我没有错,任何性能优于O(N)的搜索算法都要求你的集合存储在一些特殊的数据结构中(排序列表,二叉树,红黑树......)。
当您为集合实现二进制搜索时,您必须确保该集合首先排序。通常,您首先对列表进行排序,然后始终在正确的位置添加元素(以确保新集合仍然排序)。假设您还使用二进制搜索来找到要添加的位置,在最坏的情况下,添加和搜索都是O(log2(N))。
当您考虑不同的搜索算法时,您还必须考虑基础数据结构以及向其中添加元素的成本。