📜  如何克服超过时限(TLE)?

📅  最后修改于: 2021-06-26 12:10:25             🧑  作者: Mango

许多程序员总是争辩说,竞争性编程中的问题总是以TLE(超过时限)而告终。此错误的主要问题是,它不会让您知道您的解决方案是否会达到正确的解决方案!

为什么TLE来了?

  • 在线法官限制:之所以出现TLE,是因为在线法官有一些限制,即通常在问题设置者指定的一定时间限制(1秒)后,它将不允许处理指令。
  • 服务器配置:代码花费的确切时间取决于服务器的速度,服务器的体系结构,操作系统,当然还取决于算法的复杂性。因此,不同的服务器(例如练习,codechef,SPOJ等)可能具有不同的执行速度。通过估计N的最大值(N是整个代码中指令的总数),您可以粗略估计TLE在1秒钟内是否会发生。
    MAX value of N                       Time complexity
       10^8                              O(N) Border case
       10^7                     O(N) Might be accepted
       10^6                              O(N) Perfect
       10^5                              O(N * logN)
       10^3                              O(N ^ 2)
       10^2                              O(N ^ 3)
       10^9                              O(logN) or Sqrt(N)
    

    因此,在分析了此图表之后,您可以粗略地估计您的时间复杂度并使代码在上限范围内。

  • 读取输入和写入输出的方法太慢:有时,程序员用于输入输出的方法可能会导致TLE。

超时时间限制错误

  • 更改输入输出的方法:必须选择适当的输入输出功能和数据结构,以帮助您进行优化。
    • 在C++中,请勿使用cin / cout,而应使用scanf和printf。
    • 在Java,请勿使用扫描仪,而应使用BufferedReader。
  • 循环的边界可能会减少:在编写程序之前,请仔细阅读输入中的边界,并尝试找出哪些输入会导致程序运行缓慢。例如,如果一个问题告诉您N <= 100000或N <= 1000000,并且您的程序具有嵌套循环,每个循环最多达到N,则您的程序将永远不会足够快。
  • 优化您的算法:如果所有这些都不起作用,那么您应该尝试更改算法或用于解决问题的方法。通常,内部测试用例的设计方式是,只有选择最佳算法,才可以清除所有这些用例。
  • 寻找给出的建议:尽管这应该是最后一步,但是您必须查看下面给出的注释,任何其他程序员可能在其中提出的问题都提示如何更好,更有效地解决该问题。而且即使您克服了TLE,也可以针对您的程序尝试更详尽的测试案例,以检查性能。

最终,有了经验,您一定会知道该怎么做以及不应该避免使用TLE。您编写的代码越多,您就越了解如何竞争TLE。

立即练习

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。