Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time complexity 计算函数的预期运行时间_Time Complexity - Fatal编程技术网

Time complexity 计算函数的预期运行时间

Time complexity 计算函数的预期运行时间,time-complexity,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] = ite

我有一个关于计算给定函数的预期运行时间的问题。我非常了解如何计算包含循环的代码片段(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),因为在最佳/最差/平均情况下,它只需读取每行代码一次,对吗

>你总是要考虑函数调用的时间复杂度。我不知道如何实现
Array.Copy
,但我猜它是
O(N)
,使整个
Add
函数
O(N)
。不过,你的直觉是对的——如果你有多个子操作,并且有O(n)+O(log(n))等,那么它的其余部分实际上是
O(1)

,而最昂贵的一步是整个操作的成本——默认情况下,大O指的是最坏的情况。在这里,当您复制数组时,它是一个O(n)操作

复杂性是根据以下两条规则计算的:

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

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


在您的情况下,如果您尝试复制一个数组而不是一个值,则该算法将完成N复制操作,从而为您提供O(N)操作。

谢谢!现在它有意义了。:)谢谢你的解释,它帮助了很多!所以如果我必须数组。复制2次,比如:如果我必须数组。复制2次,比如:Array.Copy(this.arr,newArr,index);Copy(this.arr,index+1,newArr,index,this.arr.Length-index-1);->这意味着第二个数组.Copy将是O(2n),函数将再次是O(n)?是的,它将是O(n)。好的,再次感谢!现在一切似乎都清楚多了。谢谢你的解释!