算法
什么是算法?
程序=数据结构+算法
算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令表示一个或多个操作
可理解为要做菜,数据结构为将菜名描述给计算机,而算法是指做菜的每个步骤
算法的特性
有穷性:一个算法必须在执行有穷步后结束,且每一步都在有穷时间内完成。算法是有穷的(有限的步骤解决特定的问题,死循环也不属于算法),但是程序是无穷的
确定性:算法的每条命令必须有确切的含义,对于相同的输入要有相同的输出(确定一种算法,输入后必须有相同的输出,不能产生歧义,指多个输出结果,必须确定唯一规则使之有相同输出)
可行性:算法的描述操作都可以通过已经实现的基本运算执行有限次来实现(算法必须能在计算机内实现)
输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合
输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。
算法的特质,所追求的目标
正确性:能够正确解决问题
可读性:算法应该具有良好的可读性,帮助人们理解
健壮性:输入非法数据时,能适当的做出反应处理,不会因此输出错误结果
高效率和低存贮量需求:时间复杂度和空间复杂度
图解(算法)
算法效率的度量
时间复杂度
时间开销与问题规模n之间的关系。
空间复杂度
空间开销(内存开销)与问题规模n之间的关系。
当一段高级语言编译为机器语言后,机器语言存入内存中,首先程序段代码占据部分内存,其大小固定,同时还有数据段代码,如需要输入的数据,也占据部分内存
总体可理解为无论问题的规模该如何变化,算法运行所需的内存空间都是固定常量
算法原地工作–算法所需内存空间为常量
计算空间复杂度时,只需关注存储空间大小与问题规模的相关变量,空间复杂度=递归调用的深度
[外链图片转存中…(img-8Onx6Kqt-1652544380810)]