如何克服时间限制(TLE)?

许多程序员总是认为竞争性编程中的问题总是以TLE(超过时间限制)告终。这个错误的主要问题是,它不允许您知道您的解决方案是否会达到正确的解决方案!

null

为什么会来?

  • 在线法官限制: TLE的出现是因为在线法官有一些限制,在问题解决者给出的特定时间限制(1秒)后,它将不允许处理指令。
  • 服务器配置: 代码所花费的确切时间取决于服务器的速度、服务器的体系结构、操作系统,当然也取决于算法的复杂性。因此,practice、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^4                              O(N ^ 2)   10^2                              O(N ^ 3)   10^9                              O(logN) or Sqrt(N)
  • 因此,在分析这张图表之后,您可以大致估计您的时间复杂度,并使您的代码在上限内。
  • 读取输入和写入输出的方法太慢: 有时,程序员用于输入输出的方法可能会导致TLE。

克服时间限制错误

  • 改变输入输出方式: 您必须选择适当的输入输出函数和数据结构,以帮助您进行优化。
    • 在C++中,不要使用CIN/COUT——而是使用SCANF和PrimTf。
    • 在Java中,不要使用扫描仪,而是使用BufferedReader。
  • 循环的界限可以减少: 在编写程序之前,请仔细阅读输入中的界限,并尝试找出哪些输入会导致程序运行较慢。例如,如果一个问题告诉您N<=100000或N<=1000000,并且您的程序有嵌套循环,每个循环都向上延伸到N,那么您的程序永远不会足够快。
  • 优化算法: 如果在这一切之后什么都不起作用,那么你应该尝试改变算法或解决问题的方法。通常,内部测试用例的设计方式是,只有在选择最佳算法的情况下,才能清除所有测试用例。
  • 寻找给出的建议: 虽然这应该是最后一步,但您必须查看下面给出的注释,任何其他程序员可能已经给出了如何更好、更有效地解决问题的提示的问题。即使你克服了困难,也要对你的程序尝试更详尽的测试用例来检查性能。

最终,有了经验,你肯定会知道该做什么,不该避免什么。你编写的代码越多,你就越了解如何竞争TLE。

现在就练习

本文由 Shubham Bansal .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,请写下评论,或者有关于上述主题的更多信息。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享