Time complexity 比较时间复杂性

Time complexity 比较时间复杂性,time-complexity,notation,Time Complexity,Notation,假设我们有一个算法,它两次遍历n个数字的列表,在一次运行中计算50以上的数字,在另一次运行中计算50以下的数字,并将其存储在两个变量中。 如果我们在一次运行中通过增加每个步骤中的一个变量或两个变量来改变它,那么我们会改变算法的时间复杂度吗?我们认为新的速度更快吗? 我知道这将需要更少的步骤,但并不完全确定时间复杂度 编辑: 伪代码1: for (i = 0; i < TOTAL_NUMBERS; i++) { if (numbers[i] >= 50) { g

假设我们有一个算法,它两次遍历n个数字的列表,在一次运行中计算50以上的数字,在另一次运行中计算50以下的数字,并将其存储在两个变量中。 如果我们在一次运行中通过增加每个步骤中的一个变量或两个变量来改变它,那么我们会改变算法的时间复杂度吗?我们认为新的速度更快吗?

我知道这将需要更少的步骤,但并不完全确定时间复杂度

编辑:

伪代码1:

for (i = 0; i < TOTAL_NUMBERS; i++) {
    if (numbers[i] >= 50) {
        greaterThan50++;
    }
}

for (i = 0; i < TOTAL_NUMBERS; i++) {
     if (numbers[i] < 50) {
        lessThan50++;
    }
}
for(i=0;i=50){
大于50++;
}
}
对于(i=0;i<总数;i++){
如果(数字[i]<50){
小于50++;
}
}
伪代码2:

for (i = 0; i < TOTAL_NUMBERS; i++) {
    if (numbers[i] >= 50) {
        greaterThan50++;
    }
    else {
        lessThan50++;
    }
}
for(i=0;i=50){
大于50++;
}
否则{
小于50++;
}
}

如果可以获得相同的结果,但表达式可能最小,那么事情就简单了。因此,在这种情况下,如果您将两个计数器的更新合并到同一个循环中,那么算法将需要更少的CPU周期来执行。您还可以在数字验证中节省时间,因为您只需执行一条if/else语句即可完成所需的操作

伪代码可能如下所示:

for (i = 0; i < TOTAL_NUMBERS; i++) {
    if (numbers[i] >= 50) {
        greaterThan50 ++;
    }
    else {
        lessThan50 ++;
    }
}
for(i=0;i=50){
大于50++;
}
否则{
小于50++;
}
}
如果要排除等于50的数字,可以执行以下操作:

for (int i = 0; i < TOTAL_NUMBERS; i++) {
    if (numbers[i] > 50) {
        greaterThan50 ++;
    }
    else if (numbers[i] < 50) {
        lessThan50 ++;
    }
}
for(int i=0;i50){
大于50++;
}
else if(数字[i]<50){
小于50++;
}
}
正如您可能注意到的,在最后一个示例中,您正在进行额外的验证,因此需要额外的步骤,但此算法仍然比在列表中循环两次要快得多(而且更简单,因为它需要更少的代码行,使代码更易读和易于理解)


我希望这有助于回答您的问题:)

大O表示法是一种描述度量(在您的情况下,执行时间)如何随着输入的增长而变化的通用语句。第一个版本的执行时间是第一个版本的两倍,但两个版本的执行时间都随着输入大小线性增长,因此它们都是O(n)算法


更多阅读:

当你说“时间复杂性”时,你是指大O符号吗?还是实际运行时间?