计算功能的预期运行时间

时间:2015-07-01 12:33:35

标签: time-complexity

我有一个关于计算给定函数的预期运行时间的问题。我理解得很好,如何计算带有循环的代码片段(for / while / if等),但没有它们的函数对我来说似乎有些奇怪。例如,假设我们有以下代码片段:

public void Add(T item)
{
    var newArr = new T[this.arr.Length + 1];
    Array.Copy(this.arr, newArr, this.arr.Length);
    newArr[newArr.Length - 1] = item;
    this.arr = newArr;
}

如果我的逻辑工作正常,Add函数的复杂度为O(1),因为在最佳/最差/平均情况下,它只读取每行代码一次,对吧?

3 个答案:

答案 0 :(得分:0)

您也必须考虑函数调用的时间复杂度。我不知道Array.Copy是如何实施的,但我会猜测它是O(N),从而使整个Add函数O(N)成为可能同样。但是你的直觉是正确的 - 它的 rest 实际上是O(1)

答案 1 :(得分:0)

如果您有多个 O(n) + O(log(n))等子操作,而且成本最高的步骤是整个操作的成本 - 默认情况下,大O指的是最坏的情况。在复制数组时,这是一个 O(n)操作

答案 2 :(得分:0)

复杂性按照以下两条规则计算:

- 采用方法(复杂性+ 1)

- 遇到以下关键字:if,while,repeat,for,&&,||,catch,case等...(复杂性+ 1)

在您的情况下,假设您尝试复制数组而不是单个值,算法将完成 N 复制操作,为您提供 O(N)操作