算法竞赛中,衡量算法优劣的第一标准,就是算法的时间复杂度,通常用大表示法表示。
算法竞赛通常会给出数据范围,其重要作用在于估计你的程序的运行时间,判断是否有超时风险。通常,将题目数据量 带入大
表示法括号里的式子,就得到了程序的期望运行次数。注意,题目中的
不一定是实际算法中计算复杂度的
,请视具体情况分析。
当前计算机评测环境,秒钟可以执行约
到
次运算,请在提交程序前充分地认识到自己算法的预期表现,判断是否能够在规定时间内结束运行。
另一方面,有经验的选手完全可以从数据量大小,逆推题目考察的算法。通常来说,单步操作的时间复杂度如下:
| 时间复杂度 | 操作 |
|---|---|
| 哈希表,查表操作 | |
| 二分 | |
| 遍历,双指针 | |
| 排序,维护堆 | |
| 双重循环枚举 | |
| 状态压缩枚举 |
然而,一道复杂的题目往往需要结合多种算法,你需要对算法的每一个环节进行优化,确保其中时间复杂度最高的步骤不会使程序超时。
进阶阅读:由数据范围反推算法复杂度以及算法内容
