Algorithm 这个算法的复杂度是多少?
我需要计算这个代码的复杂度。我知道它是O(n),但我需要公式中的证据。例如,循环的复杂性Algorithm 这个算法的复杂度是多少?,algorithm,complexity-theory,time-complexity,asymptotic-complexity,Algorithm,Complexity Theory,Time Complexity,Asymptotic Complexity,我需要计算这个代码的复杂度。我知道它是O(n),但我需要公式中的证据。例如,循环的复杂性1+3*n+n*f(body) 代码1: int i = 0; int t = 0; int j = n/2; while (i<n) { while (t<n/2) { t++; i++; } while (j<n) { j++; i++; } inti=0; int t=0; int j=n/
1+3*n+n*f(body)
代码1:
int i = 0;
int t = 0;
int j = n/2;
while (i<n) {
while (t<n/2) {
t++;
i++;
}
while (j<n) {
j++;
i++;
}
inti=0;
int t=0;
int j=n/2;
而(i在t的while循环中,i应该从0增加到(n/2)-1,在下一个j的while循环中,i增加到i
因此,在一次迭代中,我将执行外部循环
同样,循环执行时的t和j是互斥的,但它们通常都将i---t从o增加到n/2-1,将j从n/2增加到n-1
因此,降低了代码的复杂性
=i循环的单次迭代*(内部while循环的复杂性)
=O(1)*(基于t的循环的复杂性并集基于j的循环的复杂性)
=O(1)*(O(n/2)UNIONO(n/2))
=O(1)*O(n/2)
=O(n)
所以,你的结论是正确的。这个代码的复杂性是O(n)
当谈到代码2时,它与代码1没有太大区别!只添加了一个新变量k,这将导致内部循环仅迭代10次,因为它以&&
条件为界
同样,基于i的循环将像在1次迭代中一样迭代n/20次
对于i-loop,在执行两个
内部循环…因此,在n/20次迭代之后,我将完成小于n的测试。
因此,基于i的循环的算法性能=O(n/20)
因此,代码2的复杂性
=i循环的多次迭代*(内部while循环的复杂性)
=O(n/20)*(O(1)UNIONO(1))
//内部循环将运行10次迭代,因此,它们的复杂性为O(1)
=O(n)
因此,代码2的复杂性将是O(n)
..当您不熟悉某事物时,理解(或计算效率)的最佳方法是尝试一些随机值
假设n=100
int i = 0;
int t = 0;
int j = n/2;
在这些说明之后,i=0;t=0和j=50
while (i<n) {
while(iSORRY,但是,我在这里找不到任何for循环!再试一次,它肯定不是O(n)。为什么你认为它是O(n)?你能计算出每个循环得到多少次吗executed@JustinKiang是O(n)…很抱歉,我没有忽略每个表上的I++部分,就像它们是作业问题一样,请不要给出太多的直接答案。代码2呢?>因此,代码2的复杂性将是O(1)为什么?我们有相同的代码,并将元素迭代20次(10代表j,10代表t)在i循环的每次迭代中,它不能小于代码1。因为早期的内部循环是按n/2次迭代的顺序运行的——现在,它们只运行10次迭代,这与n无关,因此O(1)两个内部循环的复杂性!@Vladislav。我希望你明白了!你能一步一步地为代码2编写代码1的答案吗?在代码1中,我们只迭代I循环一次,但在代码2中,如果我们的n=1000,我们应该多次迭代I循环。@Vladislav-我已经暗引用了基于I的循环的原因。另外,以前它是错误的,第二个c颂歌也将是O(n)。仔细检查我的编辑。还有,现在我要睡觉了。不管你有什么疑问,请离开这里,我明天会回复。晚安。
while (i<n) {
while (t<n/2) {
t++;
i++;
}
while (j<n) {
j++;
i++;
}
}