binary-search相关内容
我听说可以在 O(n) 时间内对双向链表进行二分查找.访问双向链表的随机元素需要 O(n) 时间,而二分查找访问 O(log n) 个不同元素,那么运行时间不应该是 O(n log n) 吗? 解决方案 从技术上讲,双向链表二分查找的运行时间是 O(n log n) 是正确的,但这并不是一个严格的上限.使用稍微更好的二分搜索实现和更聪明的分析,可以让二分搜索在 O(n) 时间内运行.
..
最近我在链表上遇到了一个有趣的问题.给出了排序的单向链表,我们必须从这个列表中搜索一个元素. 时间复杂度不应超过O(log n).这似乎我们需要在这个链表上应用二分搜索.如何?由于链表不提供随机访问,如果我们尝试应用二进制搜索算法,它将达到 O(n),因为我们需要找到列表的长度并转到中间. 有什么想法吗? 解决方案 使用纯单向链表当然不可能. 草图证明:要检查单向链表的最
..
我正在尝试优化一个在 JavaScript 中对字符串进行二进制搜索的函数. 二分查找要求你知道键是==主元还是主元. 但这需要在 JavaScript 中进行两次字符串比较,不像在 C 中那样具有 strcmp() 函数的语言返回三个值 (-1, 0, +1) 表示(小于、等于、大于). JavaScript 中是否有这样一个原生函数,它可以返回一个三元值,以便在二分查找的每次
..
线性搜索和二分搜索有什么区别? 解决方案 线性搜索 外观在列表中,一次一个项目,没有跳跃.在复杂性方面,这是一个 O(n) 搜索 - 搜索列表所花费的时间以与列表相同的速度变大. 二分搜索 是从排序列表的中间开始,看看是否它大于或小于您要查找的值,这决定了该值是在列表的前半部分还是后半部分.跳转到子列表的一半,然后再次比较等等.这几乎是人类通常在字典中查找单词的方式(尽管我们使用了更
..
有没有办法在带有对象的 ArrayList 中实现二分查找?在此示例中,ArrayList 将使用字段“id"进行排序. class User{公共整数 ID;公共字符串名称;}ArrayList用户 = 新的 ArrayList();sortById(用户);整数 ID = 66用户搜索用户 = getUserById(users,id); 如果我应该使用二进制搜索返回具有指定 id 的用户
..
这已经困扰了我一段时间了.我知道给定 N 个键以二叉搜索树的形式排列,可以创建的树的可能数量对应于 加泰罗尼亚语序列. 我一直在试图确定这是为什么;无法找到任何可能甚至试图直观地解释它的东西,我求助于 SO 的集体知识.我找到了其他方法来计算可能的树的数量,但它们似乎不太直观,除了如何使用它之外没有提供任何解释.再加上维基页面(上面的链接)甚至显示了一个可能的树形结构的图像,带有 3 个键,
..
简单问题 - 给定 IList 如何执行二进制搜索,而无需自己编写方法,也无需将数据复制到具有内置二进制搜索支持的类型.我现在的状态如下. List.BinarySearch() 不是 IList 的成员没有等同于 ArrayList.Adapter() 方法用于 List IList 不继承自 IList,因此不能使用 ArrayList.Adapter() 我倾向于认为使用内置
..
我听到有人说,由于二分搜索将搜索所需的输入减半,因此它是 log(n) 算法.由于我不是数学背景,我无法与之相关.有人可以更详细地解释一下吗?和对数级数有关系吗? 解决方案 这里有一种更数学的方式来看待它,虽然并不复杂.IMO 比非正式的要清楚得多: 问题是,你可以将 N 除以 2 多少次,直到得到 1?这基本上是说,进行二分搜索(一半元素),直到找到它.在一个公式中,这将是这样的:
..
我需要一个与 C++ STL 容器兼容的二进制搜索算法,比如标准库的 标头中的 std::binary_search,但我需要它返回指向结果的迭代器,而不是告诉我元素是否存在的简单布尔值. (顺便说一句,标准委员会在为 binary_search 定义 API 时到底在想什么?!) 我在这里主要关心的是我需要二进制搜索的速度,所以虽然我可以用其他算法找到数据,如下所述,我想利用我的数据
..
大家好几周前开始用 C 编程,学习算法,只是想知道如何让我的代码更简单,它只是一个二进制搜索功能.但唯一的事情是你必须保持论点相同,提前致谢. bool search(int value, int values[], int n){int min = 值[0];int max = values[n-1];int 平均值 = (min + max)/2;如果(平均值 == 值){返回真;}而(平均
..
我需要在不使用任何静态/全局变量的情况下找到二叉搜索树中第 k 个最小的元素.如何高效实现?我想到的解决方案是在 O(n) 中进行操作,这是最糟糕的情况,因为我计划对整个树进行中序遍历.但在内心深处,我觉得我没有在这里使用 BST 属性.我的假设解决方案是正确的还是有更好的解决方案? 解决方案 这里只是一个想法的大纲: 在BST中,节点T的左子树只包含小于T中存储的值的元素.如果 k
..
从 Pandas 文档中,我收集到唯一值索引可以提高某些操作的效率,并且偶尔会容忍非唯一索引. 从外面看,似乎没有以任何方式利用非唯一索引.例如,下面的 ix 查询足够慢,它似乎正在扫描整个数据帧 In [23]: import numpy as np在 [24] 中:将大熊猫导入为 pd在 [25] 中:x = np.random.randint(0, 10**7, 10**7)在 [2
..
可以使用 STL 二进制搜索算法(binary_search、upper_bound、lower_bound)来搜索派生对象的 Base 指针向量,如下所示.由于 Base 是抽象的(受保护的构造函数),因此必须为搜索函数实例化一个 Derived 对象,这有点难看. 我想在给定时间以上的第一个 Derived 中搜索向量.我可以在不随意选择和实例化我的众多继承类之一的情况下做到这一点吗?
..
我注意到从 Ruby 2.0.0 开始,数组类有一个我正在测试的 bsearch 方法,但我没有得到我期望的行为.为什么它为 2 和 5 返回一个值,而为 -1、1 和 4 返回 nil ? arr_in = [-1, 1, 2, 4, 5]arr_in.bsearch { |x|x == 3 } #=>零arr_in.bsearch { |x|x == -1 } #=>零arr_in.bsea
..
是否有比二分查找更快的算法,用于在数组的排序值中进行搜索? 在我的例子中,我在 A 数组中有一个排序的值(可以是任何类型的值),如果我正在寻找的值是,我需要返回 nA[n] 和 A[n+1] 范围内 解决方案 如果值是整数,您可以做得比 O(log n) 更好,在这种情况下,您可以达到的最佳最坏情况运行时间,就n,是 O(sqrt(log n)).否则,除非输入序列中存在模式,否则无法
..
我有一个已排序的数组,想对其进行二分查找. 所以我想问一下 Swift 库中是否已经提供了诸如 sort 之类的东西?或者有没有类型独立的版本? 当然我可以自己写,但我喜欢避免重新发明轮子. 解决方案 这是使用二分查找的通用方法: func binarySearch(_ inputArr:Array, _ searchItem: T) ->内部?{变量下索引 = 0var u
..
给定一个整数数组,找到局部最小值.如果 A[i-1] > A[i] 且 A[i] 我知道如果只有一个局部最小值,那么我们可以用修改后的二分搜索来解决.但是如果知道数组中存在多个局部极小值,能否在O(log n)时间内求解? 解决方案 如果不能保证数组元素是不同的,那么就不可能在 O(log n) 时间内做到这一点.原因如下:假设您有一个数组,其中所有 n > 1 值都相同.在这种情况下,
..
问题:给定一个矩阵,其中每一行和每一列都被排序,编写一个方法来查找其中的元素. 这是一道经典的面试题,这是我的答案 boolean F(int[][] matrix, int hs, int he, int ws, int we){如果 (hs > he || ws > we)返回假;int m = (hs + he)/2;int n = (ws + we)/2;如果(矩阵[m][n] =
..
在一般的二分查找中,我们寻找出现在数组中的值.然而,有时我们需要找到大于或小于目标的第一个元素. 这是我丑陋且不完整的解决方案: //假设所有元素都是正数,即大于零int bs (int[] a, int t) {int s = 0, e = a.length;int firstlarge = 1
..
我遇到了多个问题,这些问题使用二分搜索的变体来得出最终答案.这些问题包括求数的平方根的底、检查数是否为完全平方数、在旋转数组中求最小值、在数组中求数的第一个索引等. 所有算法都包含经过适当修改的低、高和中变量. 我在网上阅读了这些算法的几种变体,这些算法中的一个错误总是有很高的机会,导致它错过了极端情况.对于以下变体,是否有任何标准可以帮助我了解应该在何时使用哪一个? 1.变量的
..