Algorithm 嵌入循环算法的时间复杂度
我试图解决这个算法,但我不确定 下面是代码(尝试获取复杂性)Algorithm 嵌入循环算法的时间复杂度,algorithm,big-o,Algorithm,Big O,我试图解决这个算法,但我不确定 下面是代码(尝试获取复杂性) For(i=0,i我不知道S.O.p.代表什么,但是为了这个问题,我假设它需要固定的时间-O(1) 因此,唯一剩下的就是为循环定义运行时间 for (i =0, i<N, i++) { // n times For (j=0, j<i/2, j++) { // for each time, this runs n/2 times S.O.P (“”);
For(i=0,i我不知道S.O.p.代表什么,但是为了这个问题,我假设它需要固定的时间-O(1)
因此,唯一剩下的就是为
循环定义运行时间
for (i =0, i<N, i++) { // n times
For (j=0, j<i/2, j++) { // for each time, this runs n/2 times
S.O.P (“”); // fixed time O(1)
}
}
所以最后的时间复杂度是O(n^2)(n的平方的O)。你说的“解这个算法”是什么意思
S.O.P.
在这里做什么?你试过什么?什么不起作用?这实际上取决于你在做什么来代替S.O.P
。所以最好把整件事都贴出来,而不是用S.O.P
@WillemVanOnsem来代替你的逻辑。我试图找到这段代码的大O,S.O.P代表给出的指令啊CPU@MohamedKial请尽量说清楚一点,您提供的信息很难帮助我们。请从一开始就解释问题,包括您遇到的问题。我认为S.O.P.
只是System.out.println()
call的缩写。我不知道您想用t(n)=n*(n/2)做什么*O(1)
,但请注意,循环的确切数量是(n-1)^2/4
,在问题和本评论中都假设为整数地板分割。当然,这不会改变最后的O(n^2)
@Jean-ClaudeArbaut你的意思是n*(n-1)/4
?@meowgoesthedog不,我的意思是(n-1)^2/4
。
for (i =0, i<N, i++) { // n times
For (j=0, j<i/2, j++) { // for each time, this runs n/2 times
S.O.P (“”); // fixed time O(1)
}
}
T(n) = {sum for i from 0 to n} i/2 = (1/2)*(n*(n-1)/2)
T(n) = (n*(n - 1)/4) * O(1) = O(n^2/4) = O(n^2)