【发布时间】:2015-10-04 01:35:14
【问题描述】:
我在完全掌握 Big-Oh 表示法时遇到了一些麻烦,虽然我看到了一些 If 语句的答案,但我没有看到 if/else 语句中的任何方法调用。我在下面发布相关代码,线性和二进制搜索是标准实现(我本可以使用 Arrays 类,但选择自己练习编码)。精确和一般的 Big Oh 符号都会有所帮助。我在下面做了一个尝试。
public static int count(int[][] myArray, int query)
{
queryHits = 0; -----> O(1)
queryNumber++; -----> O(1)
int subArraymin; -----> O(1)
int subArraymax; ----> O(1)
int foundIndex = -1; -> O(1)
int j = 5000; -----> O(1)
for (int i = 0; i<5000; i++) ------------>O(5000 * O(?)
{
subArraymin = myArray[0][j]; -------> O(1)
subArraymax = myArray[999][j]; ------> O(1)
if (query >= subArraymin && query <= subArraymax) ----> O(1?)
{
foundIndex = binarySearch(myArray,0 , 1000, query, j); -->O(5000?) * O(log n)
if (foundIndex == -1) --> O(1?)
{
//irrelevant code omitted
}
else
{
linearSearch(myArray, query, foundIndex, j); -----> O(5000?) * O(n)
}
}
else //irrelevant code omitted
}
return queryHits;
}
我的主要问题:
1. 我的 if 语句是 O(1) 还是 O(n)?
2. 我相信我的 for 循环是 O(5000 * 循环体),但是由于我调用了两个不同的方法,所以这些方法的 big oh 会先相乘吗?
感谢您的任何帮助/指点!
【问题讨论】:
标签: java performance if-statement methods big-o