什么是算法

我们常常听说:「程序 = 算法 + 数据结构」,算法是解决问题的逻辑、方法、过程,数据结构是数据在计算机中的存储和访问的方式,两者是紧密结合的。

算法(Algorithm):对特定问题求解步骤的一种描述,是指令的有限序列。它有 5 个特征:

  1. 输入:一个算法有零个或多个输入。可以没有输入,例如一个定时闹钟程序,它不需要输入,但是能够每隔一段时间就输出一个报警。
  2. 输出:一个算法有一个或多个输出。程序可以没有输入,但是一定要有输出。
  3. 有穷性:一个算法必须在执行有穷步之后结束,且每一步都在有穷时间内完成。
  4. 确定性:算法中的每一条指令必须有确切的含义,对于相同的输入只能得到相同的输出。
  5. 可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现。

以冒泡排序算法为例子,上一节已经描述过它的执行步骤,它满足上述 5 个特征:


算法复杂度

一个程序或算法的复杂度有以下可能:

O(1)

计算时间是一个常数,和问题的规模 n 无关。例如:用公式计算时,一次计算的复杂度就是 O(1);哈希算法,用 hash 函数在常数时间内计算出存储位置;在矩阵 A[M][n]中查找 i 行 j 列的元素,只需要一次访问 A[i][j]就够了。

O(logn)

计算时间是对数,通常是以 2 为底的对数,每一步计算后,问题的规模减小一倍。例如在一个长度为 n 的有序数列中查找某个数,用折半查找的方法,只需要 logn 次就能找到。再例如分治法,一般情况下,在每个步骤把规模减少一倍,所以一共有 O(logn) 个步骤。

O(logn) 和 O(1)没有太大差别。

 

 

如果一个算法是多项式复杂度,称它为「高效」算法。如果是指数复杂度,则是一个「低效」算法。可以这样通俗地解释「高效」和「低效」算法的区别:多项式复杂度的算法,随着规模 n 的增加,可以通过堆叠硬件来实现,「砸钱」是行得通的;而指数复杂度的算法,增加硬件也无济于事,其增长的速度超出了想象力。

竞赛题目一般的限制时间是 1s,对应普通计算机计算速度是每秒千万次级。那么,上述的时间复杂度,可以换算出能解决问题的数据规模。例如,如果一个算法的复杂度是 O(n!),当 n = 11 时,11! = 39916800,这个算法只能解决 n <= 11 以内的问题。

记住表

学习建议

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值