BIG O缺乏足够的信息

Tae*_*ahn 5 performance big-o time-complexity

所以,假设你有一个功能,X(N)那就是一个完整的黑盒子.你不知道函数的增长率,你不能查找,你不能查看源(目前).

接下来让我们在另一个函数的上下文中检查它

for(int i = 0; i < N; ++i)
    X(N);
Run Code Online (Sandbox Code Playgroud)

你写的代码是线性的,但显然该函数X具有的增长速度的冲击你的功能.例如,如果X(N)扩展到for(int i = 0; i < N; ++i)您的函数是二次的.

我的问题是:如果有人问你的功能大O是什么,描述你的功能增长率的最佳方法是什么?

我说我会称之为线性,我的答案的辩护如下.

如果您知道实际增长率X,则可以准确估计代码,但尽管您可以(以某种方式)最终获得代码,但大多数函数都没有提供性能统计信息.

因此,如果您确实可以访问代码X,您可以将其包含在您的估算中,但是您在哪里划线?X可能还会调用其他函数,然后调用其他函数.我觉得在制造场景之外,你处理的是完美划分的代码,如果你还不知道调用黑盒函数的增长率,你必须决定估计你可以使用的代码.

Am_*_*ful 5

如果你谈论画线,我只想提供如下: -

代码的复杂性: - O(N*o(X))

一旦得到判断函数X(N)的复杂性,就可以简单地用公式代替.

到那时,它将是一个简写但有用的符号,同时满足循环的复杂性.

  • 当“X”是一个函数时,我不认为“o(X)”是一个常见的符号。 (2认同)