问题描述
public int addOne(int a){
return (a+1)
}
由于我们只执行一个操作(总和),所以时间复杂度的阶为O(1)。
但是,如果我有一个不执行任何操作的函数,只需为某些全局变量分配一些值就可以了。像这样:
public void assignValues(){
a = 2;
b = 3;
c = 4;
//maybe more
}
此功能的时间复杂度是多少?我的猜测是它将仍然是O(1)。正确吗?
解决方法
在讨论算法的时间复杂度时,首先必须定义变量参数。例如,如果没有定义O(n)
所测量的内容(例如,数组的长度?数组的内容的大小? -数字的长度?是整数的绝对值?)。
在特定情况下,您有一个不带参数的函数。假定函数内的操作不依赖于任何其他外部参数,则无论您在内部执行什么操作,该函数的复杂度总是很小n
。例如,以下函数也是O(1)
:
O(1)
如前所述,这假定无参数函数没有外部依赖关系。考虑例如以下功能
public static int DoSth() {
int x = 0;
const int n = 1000000;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
x++;
return x;
}
如果public static void DoSth() {
int n = DateTime.Now.Ticks;
for(int i = 0; i < n; i++)
Console.WriteLine(i);
}
是自1.1.0001起已经过去的时间,则此函数为O(n log n)
。