算法基础知识:
1.什么是算法
算法是一组有穷的规则,它规定了解决莫一特定类型问题的一系列运算
数据结构+算法=程序
2.算法的五个重要特性:
确定性、可行性、输入、输出、有穷性;
一下对其部分特性做定义;
2.1.确定性:
算法不能有二义性:
例如:不符合确定性的运算
5/0
将6或7与x 相加
为赋值变量参与运算
2.2.可行性:
例如:
整数的算数运算是可行
实数的算数运算是不可行的
2.3.输入、输出
2.4.有穷性:
一个算法总时在执行了有穷步后终止
⚠️⚠️⚠️ 与计算过程的区别:(ps:计算过程不一定能终止)
2.4.1不能终止的计算过程:操作系统
2.4.2算法是“可以终止的计算过程”
2.4.3算法的时效性:只能把在相当有穷步内终止的算法投入到计算机上运行
3.算法的数学分析:
事前分析(数学分析)-重要函数:
给出算法特性:时间和空间的一个特征函数(o、Ω)
频率计数:一条语句或一种运算在算法体中的执行次数
数量级:
语句的数量级:语句的执行频率
算法的数量级:算法所包含的所有语句的执行频率之和
算法的数量级从本质上反映了一个算法的执行特性
3.1 计算时间/频率计数的表示函数
通过事前分析给出算法计算时间(频率计数)的一个函数表示形式,一般记为与输入规模有关的函数形式:f(n)
3.2 计算时间的渐近表示:
⚠️⚠️⚠️ 算法的计算时间为f(n)
数量级限界函数为g(n)
其中:
n是输入或输出规模的某种测度
f(n)表示算法的“实际”执行时间
g(n)是形式简单的函数如2n,n!等
3.3 算法的执行时间:
上界(o) 下界(欧姆)、“平均 ”。。。
3.3. 1上界函数
算法执行的时间总是少于一个数的常数倍这个数,f(n)=o(g(n))
g(n)是计算时间f(n)的一个上界函数。f(n)的数量级就是g(n)
⚠️⚠️⚠️:多项式定理
定理解析:变量n 的固定阶数为m的任一多项式,与此多项式的最高阶nm同阶。
T(n)=5n2+8n+1=O(n2)
However,数量级大小对算法的有效性有决定性影响
3.3.1.1 算法时间函数分类(Very Important!!!)
多项式时间算法:可用于多项式(函数)对其计算时间限界的算法
常见的多项式限界函数有:
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)
指数时间算法:计算时间用指数函数限界的算法:
常见的指数时间限界函数:
O(2的n次方)<O(n!)<O(n的n次方)
说明:当n取值较大时,指数时间算法和多项式时间算法在计算时间上非常悬殊,指数时间算法将远远大于多项式
3.3.2 上界函数与平均函数
下界函数与上界函数相反,
平均情况的限界函数故名思义,同理;
⚠️⚠️⚠️:如果算法在最好喝最坏情况下的计算时间就一个常数因子的范围内而言是相同的,可看作:
既有f(n)=Ω(g(n)) 又有f(n)=O(g(n))
3.4 递归算法的分析:
扩展递归,疯狂带入法(类似与分析递归一样,这里不做过多的描述)
重点讲解: 通用分治递推式子:(Very important)
大小为n的原问题分成若干个大小为n/b的子问题,其中a个子问题需要求解,而cn k次方是合并各个子问题的解
需要的工作量。