Questions tagged «binary-search»

20
Python中的二进制搜索(二等分)
是否有一个库函数对列表/元组执行二进制搜索,如果找到则返回项目的位置,如果没有则返回“ False”(-1,None等)? 我在bisect模块中找到了bisect_left / right函数,但是即使该项目不在列表中,它们仍然会返回位置。这对于他们的预期用途来说是完全可以的,但是我只想知道列表中是否有项目(不想插入任何内容)。 我考虑过使用bisect_left然后检查该位置处的项目是否等于我要搜索的项目,但这似乎很麻烦(而且我还需要进行边界检查,以检查数字是否可以大于列表中最大的数字)。如果有更好的方法,我想知道。 编辑为了弄清楚我需要什么:我知道字典将非常适合此操作,但是我试图将内存消耗保持在尽可能低的水平。我的预期用途是一种双向查询表。表中有一个值列表,我需要能够根据它们的索引访问值。而且我还希望能够找到特定值的索引,或者如果该值不在列表中,则查找None。 为此,使用字典是最快的方法,但是(大约)会使内存需求增加一倍。 我问这个问题的原因是我可能忽略了Python库中的某些内容。就像Moe建议的那样,看来我必须编写自己的代码。


30
以最佳方式在二进制搜索树中找到第k个最小元素
我需要在二进制搜索树中找到第k个最小的元素,而无需使用任何静态/全局变量。如何有效实现?我想到的解决方案是在O(n)中进行操作,这是最糟糕的情况,因为我计划对整个树进行有序遍历。但在内心深处,我觉得我没有在这里使用BST属性。我的假设解决方案正确还是有更好的解决方案?

9
在哪里可以获得“有用的” C ++二进制搜索算法?
我需要一个与C ++ STL容器兼容的二进制搜索算法,就像std::binary_search在标准库的<algorithm>标头中一样,但是我需要它返回指向结果的迭代器,而不是简单的布尔值告诉我元素是否存在。 (附带说明,标准委员会在为binary_search定义API时到底在想什么?!) 我主要关心的是我需要二进制搜索的速度,因此,尽管可以使用其他算法查找数据,如下所述,但我想利用这样一个事实,即我的数据经过排序以获得二进制的好处搜索,而不是线性搜索。 到目前为止lower_bound,upper_bound如果缺少基准点则失败: //lousy pseudo code vector(1,2,3,4,6,7,8,9,0) //notice no 5 iter = lower_bound_or_upper_bound(start,end,5) iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6 注意:只要与容器兼容,我也可以使用不属于std名称空间的算法。就像说boost::binary_search。

17
如何在两个排序数组的并集中找到第k个最小元素?
这是一个作业问题。他们说这需要O(logN + logM)在哪里N,M是数组的长度。 让我们命名的数组a和b。显然,我们可以忽略所有a[i]和b[i]其中i>ķ。 首先,我们比较a[k/2]和b[k/2]。让b[k/2]> a[k/2]。因此,我们也可以丢弃所有b[i],其中i> k / 2。 现在我们有了all a[i],其中i <k和all b[i],其中i <k / 2来找到答案。 你下一步怎么做?

17
哈希查找或二进制搜索哪个更快?
如果给定了一组静态对象(静态的,一旦加载就很少加载,就意味着它永远不会变化),需要在其中进行重复并发查找以达到最佳性能,更好的情况是,HashMap还是使用某些自定义比较器进行二进制搜索的数组? 答案是对象还是结构类型的函数?哈希和/或相等函数性能?哈希唯一性?清单大小? Hashset尺寸/布景尺寸? 我正在查看的布景大小可以在500k到10m之间,以防信息有用。 当我在寻找C#答案时,我认为真正的数学答案不在于语言,因此我不包含该标签。但是,如果有C#特定的事情要注意,则需要该信息。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.