算法概念与性能分析

什么是算法?

  • 请输入两个数字X和Y,计算两个数的和

在这个例子当中,如果我们要完成这个功能,我们需要经过那些步骤?

  • 输入X和Y的值
  • 计算X+Y的结果
  • 输出最后的结果

三个步骤

其实算法就是解决问题的一系列方法和步骤

例如:刚才的三个步骤就是解决X+Y这个问题的算法,一系列的步骤,当然,我们演示的这个算法很简单,但是真正的算法都是非常复杂的

算法的作用

在交通导航的运用中,软件是如何实现挑选路径的呢?就是通过算法来实现,通过算法,实现找到两个位置的最短路径,以便使用者可以快速到达目的的

在使用淘宝的过程当中,淘宝会自动记录我们浏览过那些商品,并且在之后为我们推荐相似的商品出来,这也是算法的应用之一。

算法的性能

对于一个算法来说,非常重要的就是在保证算法的正确的前提下去衡量这个算法的性能,主要从两个方面来衡量

  • 时间:这个算法运行完成之后,需要花费多长的时间
  • 空间:实现这个算法,需要消耗多少内存空间

对于空间消耗来说,随着科学技术的不断发展,我们的内存空间也越来越大,因此在空间上,是可以保证这个算法的运行内存的

时间是一个重要的考量因素,对于人类来说,时间是非常宝贵的,我们没有这么多的时间去等待一个算法运行完成,因此,对于一个算法来说,时间是最首要的考量因素

为了更加准确的去衡量时间,我们使用时间复杂度的概念去衡量时间,并用大O的方式来表示,并计算出了几个时间复杂度级别

增长级别 符号表示
常数级别 O(1)
对数级别 O(logN)
线性级别 O(N)
线性对数级别 O(NlogN)
平方级别 O(      )
立方级别 O(      )
指数级别 O(      )
2^N
N^3
N^2
#include <iostream>

using namespace std;

int main(){
    int sum = 0;
    
    for (int i = 1;i <= 10;i++){
        sum += i;
    }

    cout << sum << endl;
}

在这个程序当中,循环总共计算了10次,并且随着输入的增加,永远都是循环10次,因此该程序的时间复杂度是O(1)

#include <iostream>

using namespace std;

int main(){
    int sum = 0;
    int N;
    cin >> N;
    
    for (int i = 1;i <= N;i++){
        sum += i;
    }

    cout << sum << endl;
}

在这个程序当中,循环总共计算了N次,并且随着输入的增加计算的次数也会增加,因此该程序的时间复杂度是O(N)

#include <iostream>

using namespace std;

int main(){
    int sum = 0;
    int N;
    cin >> N;

    for (int i = 0;i < N;i++){
        for (int j = 0;i <N;j++){
            sum += j;
        }
    }

    cout << sum << endl;
}

在这个程序当中,外层循环总共计算了N次,内层循环总共计算了N次,总次数为N*N,并且随着输入的增加计算的次数也会增加,因此该程序的时间复杂度是O(       )

N^2

C++性能测试

我们可以利用C++提供的时间函数库来测试函数的运行时间

time_t start = time(NULL)

使用time()函数获取当前时间

使用当前函数需要包含头函数<time.h>

#include <iostream>
#include <time.h>

using namespace std;

int test(int N){
    int sum = 0;
    for (int i = 0;i < N;i++){
        sum += i;
    }
    return sum;
}

int main(){
    int sum;
    time_t start,end;

    start = time(NULL); //记录开始时间

    sum = test(10);
    end = time(NULL);   //记录结束时间

    cout << "time:" << (end- sum) << endl;
}

Level3_1_算法概念与性能分析

By yang he

Level3_1_算法概念与性能分析

  • 263