算法分析相关概念

算法分析相关概念

算法的时间复杂度

时间复杂度的分析注意事项

同一个算法用不同的语言实现,或者用不同的编译程序进行编译,或者在不同的计算机上运行时,效率均不相同。所以,精确度算法的执行时间没有太大意义,所以我们往往只关注算法的时间开销相对于问题规模变化的趋势,也就是时间复杂度。

时间复杂度的算法

算法(或程序)中基本操作(或语句)重复执行的次数的总和。

设n为求解问题的规模,基本操作(或语句)执行次数总和称为语句频度,记作f(n)

执行下面的步骤:

  1. 去掉f(n)中的所有加法常数。
  2. 只保留最高阶项。

得出时间复杂度记作O(f(n))。

例1:

{
    int a;
    scanf("%d",&a);
    a++;
    printf("%d",a);
}

上述的算法中,先定义了一个int类型的a,然后通过输入给a进行赋值,然后进行a+1,最后将a输出。以上每条语句都只进行了一遍,所以语句的频度为:f(n)=f(1)=3。时间复杂度就为:O(f(n))=O(3)=O(1)。O(1)称为常量阶/常量数量级。

例2:

void sum(int a[],int n){
    int s=0,i;	//1次
    for(i=0;i<n;i++)	//n次
        s+=a[i];	//n次
    printf("%d",s);	//1次
}

上述的算法中,先定义了一个int类型的s,然后进行了n次的循环,循环里面是对数组a里元素的求和,最后将s输出。其中部分语句进行了n次,所以语句的频度为:f(n)=1+n+n+1。时间复杂度就为:O(f(n))=O(2n+2)=O(n)。

posted on 2022-10-03 17:37  沁鱼  阅读(64)  评论(0)    收藏  举报