Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
二叉搜索树中Java方法的代价_Java_Algorithm_Binary Search Tree - Fatal编程技术网

二叉搜索树中Java方法的代价

二叉搜索树中Java方法的代价,java,algorithm,binary-search-tree,Java,Algorithm,Binary Search Tree,我们有Java方法rangeQuery\u count(BSTNode,int,int)。给定BST的根(keys int)和区间[a,b],此方法返回属于该区间的BST的键数 static int rangeQuery_count(BSTNode v, int a, int b) { //a<=b if(v==null) return 0; if(v.key < a) return rangeQuery_count(v.right, a, b); else if(

我们有Java方法
rangeQuery\u count(BSTNode,int,int)
。给定BST的根(keys int)和区间[a,b],此方法返回属于该区间的BST的键数

static int rangeQuery_count(BSTNode v, int a, int b) { //a<=b
   if(v==null) return 0;
   if(v.key < a) return rangeQuery_count(v.right, a, b);
   else if(v.key > b) return rangeQuery_count(v.left, a, b);
   else return 1 + rangeQuery_count(v.right, a, b) + rangeQuery_count(v.left, a, b);
}
静态int-rangeQuery\u计数(bstnodev,int-a,int-b){//ab)返回rangeQuery\u计数(v.left,a,b);
否则返回1+范围查询计数(v.right,a,b)+范围查询计数(v.left,a,b);
}

我必须根据BST的节点数n确定算法成本的渐近估计。我刚刚开始研究这些主题,我想了解如何计算程序成本。

首先要认识到的是,成本取决于输入参数的特定值,例如,在您的例子中,它取决于搜索树中有多少节点落在间隔内。这里通常的简化假设是计算最坏的情况。在这种情况下,树中的所有节点都位于间隔内。在这种情况下,只要v不为null,您将始终使用else的最后一个子句,您将访问树的每个节点一次,如果树中有n个节点,那么成本将与n大致成线性增长。

成本按哪个指标计算?我想这就是您需要阅读的内容谢谢!请问,我如何确定在算法中对树进行的访问类型?我不知道你所说的访问是什么意思。如果您对节点进行编号,我们可以讨论预顺序、后顺序和顺序,但在本例中,您只需检查比较,对子节点进行递归调用,然后合计当前节点处和下方的节点数。我指的是三种深度优先遍历:预顺序、顺序和后顺序。在这种情况下,算法执行的方法?我猜是post order,因为最终的和是在从其子节点返回后在节点中计算的,但这三者之间的区别只有在涉及一个编号序列时才真正清楚,该编号序列标识了一个特定的时刻,即一个序列号被分配给节点的时刻。任何递归树搜索都将不可避免地进入节点,搜索其子节点,然后退出节点。要区分预订单和后订单,您需要知道您是关心出口还是入口。