java - 这个程序在最坏情况下的递归方程是什么?
问题描述
这是程序:
public class Program {
public enum T { MIN, MAX } ;
public static int mystery(int[] arr, int d, int f, T k ) {
int answer = d ;
if( d < f ) {
int middle = ( d + f ) / 2 ;
int max = mystery( arr, d, middle, T.MAX ) ;
int min = mystery( arr, middle + 1, f, T.MIN ) ;
if( k == T.MAX ) {
answer = min ;
} else {
answer = max ;
}
}
return answer ;
}
public static void main( String [ ] arg ) {
int [ ] t = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ;
System.out.println( mystery( t, 0, t.length - 1, T.MAX ) ) ;
}
}
程序输出:5。
如果 arr 的大小为 n,我尝试以这种方式计算递归方程。我们对该函数有两次调用,所以它是T(n) = 2 T(...) + ....
. 我们可以注意到,每次数组除以 2 所以我们可以说T(n) = 2 T(n/2) + ....
然后,既然我们有if (k == T.MAX) ...
,我们可以知道它在每次调用中运行 1 次,所以它在 O(1) 中。那么等式是T(n) = 2 T(n/2) + 1
正确的吗?
解决方案
推荐阅读
- r - 如果列中有“封闭”单元格,则将 tibble 单元格的值设置为 1
- python - 删除以另一列的大值为条件的值
- awk - 哪个ns2协议最实用
- android - Android recyclerview 不能在带有粘性标题的低端设备上滚动 - 为什么?
- spring-boot - 如何在运行 spring boot 应用程序的 kubernetes 中使用在 localhost 上运行的服务器的端口
- python - 分别记录 stdout 和 stderr 时截断的输出日志文件
- python - Python从日期时间列中仅减去时间(HH:MM:SS)
- javascript - 如何防止/最小化此 d3 示例的回流?
- sql - 如何处理 SQL 中的“自我”关系?
- python - 通过熊猫中的坐标检查点是否在 3D 框中