“ 前段时间做课题处理数据,cpu超频150%跑了一天才处理完/121的数据,再次意识到数据和算法的重要性,想来抽空学习一下一些算法思想,但没想到这个东西挺上瘾,虽然是个菜鸡,但看了前人的天马行空的灵感之后,还是很唏嘘的,所以总结一下进来看到的对我来说体会到算法魅力的东西。”
算法第一课就是算法复杂度的衡量,这里主要是排序基础知识的回顾和递归函数复杂度的计算。(全部用的java,虽然不会写,但是看懂,稍微凑合着能改改成为自己想实现的功能)
时间复杂度是衡量算法好坏的重要指标之一。时间复杂度反映的是不确定性样本量的增长对于算法操作所需时间的影响程度,与算法操作是否涉及到样本量以及涉及了几次直接相关。
评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的实际运行时间,也就是常数项时间。
遍历数组时时间复杂度为数组长度n(对应时间复杂度为O(n)),而对数据的元操作(如加减乘除与或非等)、逻辑操作(如if判断)等都属于常数时间内的操作(对应时间复杂度O(1))。
在化简某算法时间复杂度表达式时需遵循以下规则:
对于同一样本量,可省去低阶次数项,仅保留高阶次数项,如O(n^2)+O(n)可化简为O(n^2),O(n)+O(1)可化简为O(n)
可省去样本量前的常量系数,如O(2n)可化简为O(n),O(8)可化简为O(1)
对于不同的