【发布时间】:2022-01-12 19:37:45
【问题描述】:
我了解 Big O 总体上要实现的目标(某事物的最坏情况运行时)及其重要性,但我对它以更复杂的术语表达的方式感到困惑。举个例子(但我到处都看到类似的):
0 =n0
来源:https://www.geeksforgeeks.org/difference-between-big-oh-big-omega-and-big-theta/
我认为我知道在这种情况下 f(n) 是什么:f 是我们要测试的函数; n 是该函数的输入; f(n) 的输出是运行时间。 f 和 n 本身是函数的通用占位符和将在实践中使用的输入,而不是细节(例如 f(n) 中的 n 并不意味着线性时间复杂度只是因为 n是 n^1;它只是用来表示输入到函数中的任何东西,在这个抽象定义中,它可以是(并导致)任何东西。
-
到目前为止是正确的吗?
-
开头的0是什么?那只是说“必须至少有一行代码可以运行”吗?也就是说,首先要运行一些东西?
-
什么是g()?如果 f(n) 是我想出的,那么 g() 是我需要想出的吗?
-
我知道 c 在这种情况下的意思是“常数”,但什么是常数,从哪里来?是与输入大小无关的指令数吗?
例如。如果我们正在查看以下函数的时间复杂度:
function example (int x){
x = x * 2
for (int i = 0, i <= x, i++){
println(x);
x += 1;
x -= 1; // functionally arbitrary; just so I can wrap my head around it
println("Testing");
}
println("I'm done now");
}
这些行中的任何一行都计入 c 的值吗?哪一个?还是我完全不合时宜?
- n0 是什么?没有输入?最小的输入?输入乘以0?输入 n 时的第一个条目是零索引数组? n0 甚至与 n 有关吗?
一旦我了解了每个部分是什么,我想我就可以理解所表达的内容了。在那之前,我有点失落!
【问题讨论】:
标签: big-o