Open DevinLei opened 5 years ago
https://devinlei.github.io/datastruct/2019/07/13/complexity.html
所谓算法就是解决问题的方法,对于同一问题会有很多解决方法,也就是会有很多算法,那么我们如何评估这些算法的优劣呢? 01 正确性 正确性是指算法至少有输入输出和加工处理无歧义性,能正确反映问题的需求、能得到问题的正确答案。 02 可读性 算法应当便于阅读、理解和交流 03 健壮性 当输入不合法的数据时,算法也能给出相关处理,而不是产生莫名其妙的异常和结果。 04 时间效率高和存储量低 在生活中,人们总是希望花最少的钱、用最短的时间办事,算法同样如此。因此用最短的时间,占用最少的存储空间完成同样的事就是最好的算法。
我们可能会这么想,代码的实际执行时间和资源占用最准确直观的测量方式就是让代码运行起来统计就好了。那么为啥不都这么干呢?其实,这种评估代码的执行效率和资源消耗的方式被称为”事后统计法”。自然是有一定道理的。但是,缺点也很明显。
https://devinlei.github.io/datastruct/2019/07/13/complexity.html
算法设计的要求
所谓算法就是解决问题的方法,对于同一问题会有很多解决方法,也就是会有很多算法,那么我们如何评估这些算法的优劣呢?
01 正确性 正确性是指算法至少有输入输出和加工处理无歧义性,能正确反映问题的需求、能得到问题的正确答案。 02 可读性 算法应当便于阅读、理解和交流 03 健壮性 当输入不合法的数据时,算法也能给出相关处理,而不是产生莫名其妙的异常和结果。 04 时间效率高和存储量低 在生活中,人们总是希望花最少的钱、用最短的时间办事,算法同样如此。因此用最短的时间,占用最少的存储空间完成同样的事就是最好的算法。
为什么要进行复杂度的分析?
我们可能会这么想,代码的实际执行时间和资源占用最准确直观的测量方式就是让代码运行起来统计就好了。那么为啥不都这么干呢?其实,这种评估代码的执行效率和资源消耗的方式被称为”事后统计法”。自然是有一定道理的。但是,缺点也很明显。