一、算法的概念
算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。
算法是独立存在的一种解决问题的方法和思想。
对于算法而言,实现的语言并不重要,重要的是思想。
算法可以有不同的语言描述实现版本。
二、算法的五大特性
- 输入: 算法具有0个或多个输入
- 输出: 算法至少有1个或多个输出
- 有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
- 确定性:算法中的每一步都有确定的含义,不会出现二义性
- 可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成
三、算法效率
一个算法好不好体现在运行该算法所需要的计算机资源的多少上,而该计算机资源最重要的两个方面就是时间和空间。而我们常常将改进算法的精力集中在时间效率上。
1、时间复杂度
1.1 概念
一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有的语句频度之和记作T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级;算法中的基本运算(循环中的最深循坏内语句)的频度与T(n)同数量级。所以通常用算法中基本运算的频度f(n)来分析算法的时间复杂度。因此时间的复杂度记作:
O表示为T(n)的数量级。其严格的数学含义为:若T( n)和f(n)是定义在正整数集合上的两个函数。则存在正整数C和 n0,使得n>=n0,都满足0<=T(n)<=C*f( n) 。
由于算法的时间复杂度不仅仅只是依赖以问题规模n,同时也取决于输入参数的性质。
因此我们常分析如下三种:
- 最坏时间复杂度:在最坏情况下的时间复杂度;
- 平均时间复杂度:所有可能输入实例在等概率出现的情况下,算法的期望运行时间。
- 最好时间复杂度:在最好的情况下,算法的时间复杂度。
一般情况下总是先考虑最坏时间复杂度,以保证算法的时间 复杂度不会超过这个最大值。
1.2 运算规则
- 加法法则: T(n)=T1(n) + T2(n) = O(f(n)) + O(g(n)) = O(max(f(n),g(n)));
- 乘法法则: T(n) = T1(n) T2(n) = O(f(n)) ,O(g(n)) = O(f(n)*g(n))
- 常见的时间复杂度比较: O(1)< O(logn)< O(n) < O(nlog(n))< O(n^2)< O(n^3)< O(2^n)
参考文章
---------------------
作者:king1043
来源:CSDN
原文:https://blog.csdn.net/weixin_42008209/article/details/80159564
---------------------
作者:善水输出端
来源:CSDN
原文:https://blog.csdn.net/sinat_38321889/article/details/78623552