数据结构 2 算法
算法
程序 = 数据结构+算法
算法简单来说,就是处理数据,解决实际问题的方法。
算法的特性
1.有穷性,一个算法必须总在执行有穷步后结束,且每一步都可在有穷时间内完成;
2.确定性,算法中的每条指令必须有确切的含义,相同的输入必须得到相同的输出;
3.可行性,算法中描述的操作,必须能用现在已经具备的基本运算实现;
4.输入,一个算法有0个或多个输入;
5.输出,一个算法有1个或多个输出。
好算法的特点
正确,可读性,健壮性(面对非法数据能正常反应或处理),高效率(快,时间复杂度低,内存占用少,空间复杂度低)。
时间复杂度
是用来估算算法运行时间的一个式子
算法的时间开销与问题规模N之间的关系。
经常会看到,O(1), O(n),O(n^2)这种表示方式,这个大O,在数学中表示上界,这里可以理解为,大约,这个1,不是指1秒,1分钟,而是指一个单位。
要理解,1不是时间,而是单位,任何基础操作,只要规模不上升到n这个级别,都是1。
另外由于O是大约,近似的意思,所以我们会忽略掉小的影响,例如第二个,当规模大的时候,n在n^2的面前可以忽略。
常见的时间复杂度效率排序
空间复杂度
算法占据的空间跟问题规模N之间的关系。
但是空间复杂度现在讨论的很少,因为硬件上的支持现在也比较便宜了,大家更关注的还是时间复杂度,毕竟空间换时间这个理念为主。