Lesson2--算法的时间复杂度和空间复杂度

Lesson2–算法的时间复杂度和空间复杂度

1. 算法效率

1.1 如何衡量一个算法的好坏

对于以下斐波那契数列:

long long Fib(int N)
{
    if(N < 3)
        return 1;
    return Fib(N-1) + Fib(N-2);
}

斐波那契数列的递归实现方式非常简洁,但当N较大时,每多计算一位数,所耗时间急剧上升.
这是因为递归法实现计算斐波那契数列时,计算量会成几何倍数增叫,并且函数会进行大量的重复计算.

1.2 算法的复杂度

衡量一个算法的好坏一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度.

时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法所需的额外空间.

2. 时间复杂度

2.1 时间复杂度的概念

在计算机科学中,算法的 时间复杂度(time complexity) 是一个函数,它定性描述该算法的运行时间.
时间复杂度常用 大O符号表述 , 不包括这个函数的低阶项和首项系数 .
使用这种方式时,时间复杂度可被称为是渐进的,亦即考虑输入值大小趋近无穷时的情况.

void Func1(int N)
{
    int count = 0;
    for(int i = 0;i < N;++i)
    {
        for(int j = 0;j < N;++j)
        {
            ++count;
        }
    }
    for(int k = 0;k < 2 * N;++k)
    {
        ++count;
    }
    int M = 10;
    while(M--)
    {
        ++count;
    }
    printf("%d\n",count);
}

Func1执行的基本操作次数:

F ( N ) = N 2 + 2 ∗ N + 10 F(N)=N^2+2*N+10 F(N)=N2+2N+10

  • N=10       ~~~~~      F(N)=130
  • N=100     ~~~    F(N)=10210
  • N=1000   ~  F(N)=1002010

通过上面我们发现大O渐进表示法去掉了那些对结果影响不大的项,简洁地表示出了执行次数.

另外有些算法的时间复杂度存在最好,平均和最坏情况.在实际中一般情况关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N).

空间复杂度

在计算机科学中,一个算法或程序的 空间复杂度 定性地描述该算法或程序运行所需要的存储空间大小.
和时间复杂度类似,空间复杂度通常也使用大O记号来渐进地表示.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值