变量分配的时间复杂度

问题描述

我知道如果我有类似的功能

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)