算法竞赛中,衡量算法优劣的第一标准,就是算法的时间复杂度,通常用大2.3 时间复杂度 - 图1表示法表示。

    算法竞赛通常会给出数据范围,其重要作用在于估计你的程序的运行时间,判断是否有超时风险。通常,将题目数据量2.3 时间复杂度 - 图2 带入大2.3 时间复杂度 - 图3表示法括号里的式子,就得到了程序的期望运行次数。注意,题目中的2.3 时间复杂度 - 图4不一定是实际算法中计算复杂度的2.3 时间复杂度 - 图5,请视具体情况分析。

    当前计算机评测环境,2.3 时间复杂度 - 图6秒钟可以执行约2.3 时间复杂度 - 图72.3 时间复杂度 - 图8次运算,请在提交程序前充分地认识到自己算法的预期表现,判断是否能够在规定时间内结束运行。

    另一方面,有经验的选手完全可以从数据量大小,逆推题目考察的算法。通常来说,单步操作的时间复杂度如下:

    时间复杂度 操作
    2.3 时间复杂度 - 图9#card=math&code=O%281%29&id=pN4MH) 哈希表,查表操作
    2.3 时间复杂度 - 图10#card=math&code=O%28%5Clog%20n%29&id=j4DEx) 二分
    2.3 时间复杂度 - 图11#card=math&code=O%28n%29&id=zKgWf) 遍历,双指针
    2.3 时间复杂度 - 图12#card=math&code=O%28n%5Clog%20n%29&id=H27CV) 排序,维护堆
    2.3 时间复杂度 - 图13#card=math&code=O%28n%5E2%29&id=cHtO8) 双重循环枚举
    2.3 时间复杂度 - 图14#card=math&code=O%282%5En%29&id=Yn6qd) 状态压缩枚举

    然而,一道复杂的题目往往需要结合多种算法,你需要对算法的每一个环节进行优化,确保其中时间复杂度最高的步骤不会使程序超时。

    进阶阅读:由数据范围反推算法复杂度以及算法内容