许多程序员总是争辩说,竞争性编程中的问题总是以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现场课程美国》。