Algorithm 这个算法的复杂度是多少?

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/

我需要计算这个代码的复杂度。我知道它是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/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++;
    }
}