关于时间复杂度的分析
1.时间复杂度如何表示?
一般来说,我们讨论的时间复杂度,都是用O()来表示的,如复杂度为n,则表示方法为O(n),注意这里一定要明确是表示时间还是表示空间,以免混淆
2.时间复杂度的计算方法
1.最低级的复杂度:O(1),指算法运行的次数与输入数据无关,Tips:哪怕需要运行200次甚至更多的时候,只要跟输入数据无关,都是O(1)
2.对数级别的复杂度:O(log(n)),log在表示复杂度的时候是指n为2的多少次方,这是一个很低的开销,即使n达到比较庞大的1e6,O(log(n))也只需要十几次就可以完成操作!这种复杂度一般可以通过二分得到
3.常数级别的复杂度:O(n),指输入多少则运行多少次,这是一个在简单算法题中颇为常见的复杂度,一般来说是一层与输入数据循环,但也有特殊的算法可以做到两层循环复杂度仍然是O(n)(可以在网上查询素数筛或欧拉筛等资料)
4.O(nlog(n)),这也是一种比较常见的复杂度,他是n和log(n)相乘的结果
5.平方级别:O(n^2),如果你的算法复杂度已经达到这个程度了,那么需要小心,这个复杂度一般是两层与输入数据有关的循环,如果输入数据比较大,这个复杂度很有可能会超时
6.次方级别:O(n^3)(甚至更多次幂),这已经是一个可怕的复杂度了,超时风险很大
7.指数级别:O(2^n),这个复杂度表示你的算法有2的n次方次计算,常见的有普通bfs、dfs等算法,这个复杂度代价也是十分之高。你可以想象复杂度为log(n)时,如果n为1e6级别,也只需要十几次的运算,反过来,O(2^n),如果n只有十几,也会达到1e6次计算,如果使用了这种复杂度,建议使用“超前剪枝优化”或者其他强力优化方法,否则超时就离你不远了
8.阶乘级别:O(n!),我想这个复杂度一般你都见都见不到,所以我也不说了!!!
以上为代价从小到大较为常见的8个复杂度
3.复杂度计算过程中的取舍
这是值得注意的一部分,并不是说你的算法有两次有关输入数据的单层循环,你的时间复杂度就是O(2n),在分析复杂度的时候,要注意:去掉低次项,去掉最高次系数,才能得到复杂度
4.普通电脑与评测及的运行能力
一般来说,比赛时的评测机,需要按1秒1e8次计算来计算,这里特别提醒各位参赛选手:请注意每道算法题的规定秒数,以免少死脑细胞,或者多死脑细胞!