Algorithm 棘手的时间复杂性
我很擅长计算时间复杂度,但仍然对如何确定指数时间算法感到困惑。下面的算法具有最坏情况下的运行时间O(k^n)。他们是如何得到这个值的?第一个for循环需要n个时间,第二个for循环需要k个时间,第三个for循环需要q个时间。如果运行时间是n*k*q-something,那么它们是如何得到O(k^n)的Algorithm 棘手的时间复杂性,algorithm,time-complexity,Algorithm,Time Complexity,我很擅长计算时间复杂度,但仍然对如何确定指数时间算法感到困惑。下面的算法具有最坏情况下的运行时间O(k^n)。他们是如何得到这个值的?第一个for循环需要n个时间,第二个for循环需要k个时间,第三个for循环需要q个时间。如果运行时间是n*k*q-something,那么它们是如何得到O(k^n)的 您给出的算法的复杂性不是O(k^n)。复杂性只是O(nk)。该算法计算的是nk您给出的算法的复杂性不是O(k^n)。复杂性只是O(nk)。该算法计算nk这个值 for q = 1 t
您给出的算法的复杂性不是
O(k^n)
。复杂性只是O(nk)
。该算法计算的是nk您给出的算法的复杂性不是O(k^n)
。复杂性只是O(nk)
。该算法计算nk这个值
for q = 1 to power {
newpower++
}
可以简化为
newpower += power;
还有这个
newpower = 0
for j = 1 to k {
for q = 1 to power {
newpower++
}
}
power = newpower
到
所以它实际上是通过反复递增来计算k^n。这是O(k^n)
这个
for q = 1 to power {
newpower++
}
可以简化为
newpower += power;
还有这个
newpower = 0
for j = 1 to k {
for q = 1 to power {
newpower++
}
}
power = newpower
到
所以它实际上是通过反复递增来计算k^n。这是
O(k^n)
要解决这些棘手的问题,您必须仔细计算正在执行的指令数,这并不总是容易的(可能需要更高的数学水平)
在这个问题中,让我们尝试计算newpower++发生的次数(即最内部循环中的循环数),并在k循环的块中查看它。在第一次运行中,有k个块,每个块1次运行:
1…=循环1*k次=k次 然后功率=k。然后我们有k块k: k…
=循环k*k次=k^2次 继续此模式,您将看到newpower++执行的次数是:
k+k^2+k^3+。。。k^n次
然而,k^n项占据了其余项的主导地位,因此剩下的是O(k^n)。要解决这些棘手的问题,必须仔细计算正在执行的指令数,这并不总是容易的(可能需要更高的数学水平) 在这个问题中,让我们尝试计算newpower++发生的次数(即最内部循环中的循环数),并在k循环的块中查看它。在第一次运行中,有k个块,每个块1次运行: 1…
=循环1*k次=k次 然后功率=k。然后我们有k块k: k…
=循环k*k次=k^2次 继续此模式,您将看到newpower++执行的次数是:
k+k^2+k^3+。。。k^n次
然而,k^n项支配其余项,因此剩下O(k^n)。第三个循环出现后,
O(k^n)
的复杂性是有意义的
首先,您必须看到算法计算k^n
:
- q回路将当前的
添加到功率
新功率
- k循环运行q循环
次,因此此计算k
k*幂
- 这是由i循环执行的
k*。。。。k*(k*(k*1))(n次)=k^n
现在我们知道算法只通过加1来计算k^n
,所以他需要加k^n
1
,所以复杂度是O(k^n)
(k^n)确切地说)在第三个循环出现之后,O(k^n)
的复杂度是有意义的
首先,您必须看到算法计算k^n
:
- q回路将当前的
功率
添加到新功率
- k循环运行q循环
k
次,因此此计算k*幂
- 这是由i循环执行的
所以你得到k*。。。。k*(k*(k*1))(n次)=k^n
现在我们知道算法只通过加1来计算k^n,所以他需要加上k^n,所以复杂度是O(k^n)
O(k^n)
O(k^n)O(k^n)
对我来说似乎是正确的
j-
和q-loop
具有总的k*功率
迭代次数。但是power
在每次i-loop
迭代中都以指数方式更新
- 当
i=1
时,j-
和q-loop
具有k*1
迭代
- 当
i=2
时,j-
和q-loop
具有k*k
迭代李>
- 当
i=3
时,j-
和q-loop
具有k*(k*k)
迭代李>
- 当
i=m
时,j-
和q-loop
具有k*(k^(m-1))
迭代李>
k*(k^(m-1))
只是k^m
,其中1O(k^n)
对我来说似乎是正确的
j-
和q-loop
具有总的k*功率
迭代次数。但是power
在每次i-loop
迭代中都以指数方式更新
- 当
i=1
时,j-
和q-loop
具有k*1
迭代
- 当
i=2
时,j-
和q-loop
具有k*k
迭代李>
- 当
i=3
时,j-
和q-loop
具有k*(k*k)
迭代李>
- 当
i=m
时,j-
和q-loop
具有k*(k^(m-1))
迭代李>
k*(k^(m-1))
只是k^m
,其中1第三个循环在哪里?“第三个循环在哪里?”他说这很棘手。当你非常累的时候千万不要发帖子。更新了代码。第三个for loop在哪里?“第三个for loop在哪里?”他说这很棘手。当你非常累的时候千万不要发帖子。更新了代码。实际上,它计算k
n
次:)@deep您的答案仅针对问题的第一个(未完成)版本正确。实际上,它计算k
n
次:)@Dee