Time 3个嵌套for循环的时间复杂度
尽管如此,我还是找到了很好的答案!但是,我需要下面代码段的时间复杂度方程Time 3个嵌套for循环的时间复杂度,time,complexity-theory,Time,Complexity Theory,尽管如此,我还是找到了很好的答案!但是,我需要下面代码段的时间复杂度方程 sum = 0; c1=11 for (i=0; i<N; i++) c2=6 for (j=0; j<N; j++) c2=6 for (j=0; j<N; j++)
sum = 0; c1=11
for (i=0; i<N; i++) c2=6
for (j=0; j<N; j++) c2=6
for (j=0; j<N; j++) c2=7
sum += arr[i][j] c3=2
sum=0;c1=11
对于(i=0;i注释部分很长,因此我将写一个总结所有内容的答案
测量时间复杂性
在计算机科学中,我们通过算法评估所需的步骤/迭代次数来衡量时间复杂度
因此,如果你有一个长度为n
的简单数组,并且你只遍历这个数组一次,比如说打印所有元素,我们说这个算法是O(n)
,因为运行所需的时间将与你拥有的数组的大小成比例增长,因此n
你可以把Big-OO(…)
看作是一个比较其他函数的高阶函数
这意味着函数的增长速度最多不超过,与y=n
一样快,因此是线性的。这意味着如果要将这些函数绘制在一个图上,将有一个点cx=c
,之后n
的图将始终位于f(x)之上对于任何给定的x>c,Big-O表示一个函数相对于另一个函数的上界
让我们看看你的原始问题,以及常数时间的含义,假设我们有这个函数
def printFirst5(arr: Array[Int]) = {
for(i =0 ;i < 5; i++){
println(arr[i])
}
}
这个函数的时间复杂度是O(n3)。为什么?让我们看一下。
最里面的循环将通过每个j
N个元素
有多少个j
s?每个i
将有N个j
s。
有多少个i
s?N
很多
所以我们总共得到了numberofi*numberofj*numberofk=N*N*N=O(N^3)
只是为了确保正确理解这一点,让我们看看另一个例子。如果这些循环没有嵌套会发生什么?如果我们有:
def printAllx3(array: Array[Int]) = {
for(i=0; i < array.length; i++){
println(s"array[i]")
}
for(j=0; j < array.length; j++){
println(s"array[j]")
}
for(k=0; k< array.length; k++{
println(s"array[k]")
}
}
def printAllx3(数组:数组[Int])={
对于(i=0;i
这里是什么情况
第一个循环通过N个元素,第二个循环通过N个元素,第三个循环通过N个元素。但是它们在迭代方面并不相互依赖,所以我们得到N+N+N=3N=O(N)
你看到区别了吗
恕我直言,我相信你错过了时间复杂性的一些基本知识&我们如何衡量时间复杂性。我在这里只能解释这么多,我强烈建议你阅读一下这个主题,并提出任何你不理解的问题
希望这有助于技术上,这是一个固定的时间。没有变量输入。它总是需要125个步骤。或者根据语言,它可能甚至没有编译,因为你有两个循环,使用JLET的考虑第三个循环有“k”而不是“j”,那么什么?没关系,你总是精确地循环5次。如果你通过这个程序(假设有一个),它将始终需要125个步骤,即O(1),迭代次数需要取决于一个变量值才能达到其他任何一致意见。但是,涉及成本关联c1、c2、c3的方程应该是什么,用N²或N³表示?这就是我一直试图告诉你的。这里没有N。所有这些循环都是N^0=1。请阅读这里关于常数时间的内容:对于这个算法,be N^2或N^3必须是
(i=0;i
看看这里怎么有一个变量N。这就是大o中N的来源
def printAllx3(array: Array[Int]) = {
for(i=0; i < array.length; i++){
println(s"array[i]")
}
for(j=0; j < array.length; j++){
println(s"array[j]")
}
for(k=0; k< array.length; k++{
println(s"array[k]")
}
}