您好:)我必须解决有关O符号的一些练习。每种运动都可以,但是却让我感到困惑,我也不知道该如何解决。也许有人可以解释我如何找到正确的O标记。
double g(int x, int y) {
double s = 0.0D;
for (long i = f(x, y); i >= 0; i--) {
s++;
}
return s;
}
我的问题是f(x,y)。我该如何理解这一部分? 提前致谢。 :)
答案 0 :(得分:1)
循环迭代f(x, y)
次。
没有定义f
的时间复杂性,我们可以给出的最准确的描述是:
O(f(x, y))
-
请注意,这并不是一种特殊的表示法,因为我们已经根据其他标准函数(例如,
O(log(n))
答案 1 :(得分:0)
没有足够的信息来确定正确的Big-O表达式,因此也难怪您会感到困惑。
g(x,y)
有效地由一个函数调用f(x,y)
和一个具有K
迭代的循环组成,其中我们将K
定义为f(x,y)
的结果函数调用。
由于我们对f(x,y)
函数的复杂性一无所知(例如O(1)
,O(x+y)
或O(x² + y²)
吗?),我们无法知道它的影响g(x,y)
的复杂性。
然后我们不知道f(x,y)
函数结果K
如何取决于x
和y
的值,因此我们不知道循环多久一次运行。