一、什么是算法?
算法不是特指高大上的数学公式,指的是解决问题的思路方法。生活中处处是算法。
为什么很多算法都会用到数学公式呢?因为这些公式可以减少计算机的运算步骤,锦上添花。
二、有时候一个问题有多种解决思路(多种算法),如何选择出最好的那个呢?
好的算法一般“计算步骤少”+“空间损耗低”+“内外存交互少”;因为用户关注的是快速,所以大家一般只考虑时间复杂度。时间空间大部分时候是冲突的,所以还会用空间换时间。
1)事后统计法:
造测试数据,模拟环境,运行一段时间看看效果,就能找到最好的算法。但是太浪费精力了,吃力不讨好,不是必要不建议使用这种方法。
2)事前分析法:
估算各个算法的运算步骤的数量级(时间复杂度),选一个较优的,这样选出来的算法可能不是最好的,但也不会太差。上线后,如果允许,可以再优化算法找出最优的。
有时候不同的区间算法的性能不同,所以最优的结果可能是多种算法动态并存。
三、如何分析一个算法的时间复杂度呢?(主要看递归循环什么的)
大O阶方法:
1、先得到运算步骤的数学公式
2、用常数1取代运行中所有的加法常数
3、只保留公式中最高阶项部分
4、去除最高阶项想乘的常数
根据算法的思想也可以一步估算出时间复杂度
各种常见时间复杂度耗费时间大小顺序:常数阶O(1) < 对数阶O(logn) &l