public static int sqrt(int x) {
if( x == 0 || x == 1){
return x;
}
long start = 0;
long end = x;
while ( end-start > 1){
long mid = (int)(end + start) / 2;
long s = mid * mid;
if(s == x){
return (int)mid;
}
else if(s > x){
end = mid;
}
else {
start = mid;
}
}
return (int)start;
}
上面是工作代码段。我有以下问题。事先谢谢你的帮助。;-)
返回类型int
只是表示返回的结果类型为int
。它与方法体内部的算法无关。下面我试着回答你的问题:
while(end-start>1)
用于确保end
始终大于start
。如果end-start
为1或小于1,则表示您已到达二进制搜索的结尾。while(end-start>1)
更改为while(end>start)
,它仍然可以工作。不必使end=mid-1
和start=mid+1
。您应该尝试下面的链接来更好地理解二分搜索算法。
http://community.topcoder.com/tc?module=static&d1=tutorials&d2=binarysearch
希望有帮助。
我有一个问题,我的二进制搜索算法寻找2的平方根似乎是在一个无限循环中,并永远运行: 我不确定我的while循环是否存在问题。我认为这将是一个非常直接的二进制搜索算法,只需稍加修改即可适应平方根方面。 当运行我的代码时,我似乎无法让它产生任何输出。我不确定代码或编译器是否存在真正的问题,因为我认为我遵循的算法与过去非常接近。
主要内容:src/runoob/binary/BinarySearch.java 文件代码:一、概念及其介绍 二分搜索树(英语:Binary Search Tree),也称为 二叉查找树 、二叉搜索树 、有序二叉树或排序二叉树。满足以下几个条件: 若它的左子树不为空,左子树上所有节点的值都小于它的根节点。 若它的右子树不为空,右子树上所有的节点的值都大于它的根节点。 它的左、右子树也都是二分搜索树。 如下图所示: 二、适用说明 二分搜索树有着高效的插入、删除、查询操作。 平均时间的时间复
我正在用python开发一个二叉查找树。但是我的检索方法并不像我希望的那样工作。只有当我想检索根节点时,它才返回正确的值,对于所有其他节点,它都不返回任何值。 下面是我的节点类的代码: 我的二叉树代码: 所以Bintree中的最后一个方法为除Root之外的所有值返回Not,但它应该返回节点的值。 填充树:
在上一节中,我们考虑构建一个二叉搜索树。正如我们所学到的,二叉搜索树的性能可以降级到 $$O(n)$$ 的操作,如 get 和 put ,如果树变得不平衡。在本节中,我们将讨论一种特殊类型的二叉搜索树,它自动确保树始终保持平衡。这棵树被称为 AVL树,以其发明人命名:G.M. Adelson-Velskii 和E.M.Landis。 AVL树实现 Map 抽象数据类型就像一个常规的二叉搜索树,唯一
代码是一个简单的二分搜索程序。我试着追踪程序,但它只会让我更加困惑。我不明白为什么嵌套的if has data,min,midpoint-1,&target和底部的else if语句has data,midpoint+1,max,target。
如果我有一个平衡的二叉树,并且我想在其中搜索一个项目,那么大的oh时间复杂度会是O(n)吗?在二叉树中搜索一个项目,不管它是否平衡,会改变O(n)的大时间复杂性吗?我知道如果我们有一个平衡的BST,那么搜索一个项目就等于BST的高度so O(log n),但是普通的二叉树呢?