Time limit exceeded python что это
Перейти к содержимому

Time limit exceeded python что это

  • автор:

Time Limit Exceeded в задаче на очередь Python

Задали лабораторную в институте по написанию очереди в python, задачу решил, загрузил на платформу (ejudge), но вот на 13 тесте выдало ошибку "Превышено время работы программы >3 сек", в чем проблема вообще понять не могу. Вот условие:

Задача про очередь Реализуйте очередь, используя только массив. Ввод и вывод данных осуществляется через файлы. Имена входного и выходного файлов задаются через аргументы командной строки (первый и второй соответственно). Формат входных данных Во входном файле задаётся последовательность команд. Пустые строки игнорируются. Первая строка всегда содержит "set_size N", где N — максимальный размер очереди, целое число. Каждая последующая строка содержит ровно одну команду: push X, pop или print, где X — произвольная строка без пробелов. Формат результата Команда print выводит содержимое очередь (от головы к хвосту) одной строкой, значения разделяются пробелами. Если очередь пуста, то выводится "empty". В случае переполнения очереди выводится "overflow". Команда pop выводит элемент или "underflow", если очередь пуста. Память под очередь должна быть выделена не более одного раза, при вызове команды "set_size". В любой непонятной ситуации результатом работы любой команды будет "error".

Окно выполнения тестов, на 13, почему то выдало ошибку enter image description here

Для понятности залил на этот гит два файла, "input" — файл, который платформа тестирования подает на вход, а "output", это правильный ответ на задачу. Мою программу принудительно остановили (из-за превышения времени), и она ничего не выдала https://github.com/RoyalGoose/testrepos

В чем может быть проблема? Как я могу исправить код, чтобы он работал быстрее и прошел бы этот тест?

How to Overcome from TLE Error in competitive programming?

Many programmers always argue that the problems in Competitive Programming always end up with TLE(Time Limit Exceed). The main problem with this error is that it will not allow you to know that your solution would reach to correct solution or not!

The main problem in TLE is, you will not be able to know whether your code is generating the right output or not. and when output is right and that time code gives TLE ,the online judge has to stop your submission from running after a particular time period.

Because they first check your compiler error (if any) then runtime error (if any), then TLE (if any) and at last right or wrong answer your code is generating.

Why TLE comes?

To understand Time Limit Exceeded(TLE), understanding how the online judge works will help. The online judge allocates resources like memory and CPU for evaluating every submission.

There might be various reasons behind it that your TLE is coming. Few points are :

Online Judge :

An online judge ( Problem setter the problem) gives TLE on a problem because there are some restrictions in each input with a specific time limit. If your program exceeds that time limit you will get TLE.

Your program is too slow :

The most common reason that you would get a TLE is because your program is too slow.
Read the bounds in the input carefully before writing your program, and try to figure out which inputs will cause your program to run the slowest.

In Python, you could try speeding up your solutions by adding the following two lines to the start of your file:

Exit fullscreen mode

To add fast IO in your code you have to write the following lines in main() in your code in C/C++:

Exit fullscreen mode

Java Do not use Scanner class, use BufferedReader instead.

Server Configuration:

Sometimes, the server takes time to run your code. So, it might depend on their CPU, OS, etc. For this reason, the different platform (different servers like practice, CodeChef , HackerEarth etc..)gives you TLE in different cases.
By estimating the maximum value of N (N is the total number of instructions of your whole code), you can roughly estimate the TLE would occur or not in 1 sec.

Exit fullscreen mode

Note a loop value (N) cannot be greater than 10^9 if N is an integer. Because an integer can take up to 10^9.

So after analyzing this Table you can estimate your Time complexity roughly and try to make your code within the upper bound limit.

Time limit exceeded python что это

Reddit and its partners use cookies and similar technologies to provide you with a better experience.

By accepting all cookies, you agree to our use of cookies to deliver and maintain our services and site, improve the quality of Reddit, personalize Reddit content and advertising, and measure the effectiveness of advertising.

By rejecting non-essential cookies, Reddit may still use certain cookies to ensure the proper functionality of our platform.

For more information, please see our Cookie Notice and our Privacy Policy .

Приёмы для ускорения кода на Python

Для ускорения кода на Python программисты могут использовать много приемов. Мы собрали несколько самых простых и при этом самых эффективных из них.

Python – один из самых популярных языков программирования в мире. Этим он обязан своему простому синтаксису и богатой экосистеме. В последнее время он используется в соревновательном программировании, где большое значение имеет скорость выполнения программ.

Большинство из наших читателей, вероятно, уже начали писать на Python. Сперва всё кажется простым и очевидным. Но при решении задач со сложными алгоритмами начинается головная боль с Time Limit Exceeded . Однако, в этом нет вины Python – это вина программиста. Да, Python медленный, но если программист напишет эффективную программу, она точно выполнится без подобных загвоздок.

Представляем вам несколько приемов и подходов для ускорения кода и повышения его эффективности.

Используйте подходящие структуры данных

Применение правильных структур данных значительно ускоряет выполнение кода.

В Python встроены такие структуры данных, как список ( list ), кортеж ( tuple ), множество ( set ) и словарь ( dictionary ). Несмотря на это, большинство людей хорошо помнят только про списки. Это неправильный подход.

Для ускорения кода используйте те структуры данных, которые максимально соответствуют вашей задаче. Особенно это касается выбора между списком и кортежем, ведь итерирование по последнему занимает куда меньше времени.

Избегайте циклов for

В случаях, когда цикл for обрабатывает диапазон непостоянного размера, его выполнение в Python происходит медленнее, чем выполнение цикла while . Поэтому в таких случаях лучше прибегайте к while .

Применяйте списковые включения (list comprehension)

Не обращайтесь ни к какой другой технике, если можно использовать списковые включения. Например, этот код заносит в список все числа между 1 и 1000, кратные 3:

Со списковыми включениями код трансформируется в одну строку:

Этот приём работает быстрее, чем просто метод append() .

Не пренебрегайте множественным присваиванием

Не стоит инициализировать несколько переменных так:

Лучше придерживайтесь следующего синтаксиса:

Не создавайте глобальные переменные

Да, в Python есть ключевое слово global для объявления таких переменных. Но операции с ними требуют больше времени, чем с локальными. Потому не создавайте глобальные переменные без крайней необходимости.

Применяйте библиотечные функции

Не пишите функцию вручную, если она уже реализована в какой-нибудь библиотеке. Библиотечные функции крайне эффективны, и, скорее всего, вам не удастся достичь лучшего результата самостоятельно.

Соединяйте строки методом join

В Python конкатенацию строк можно производить при помощи знака + .

Но также для этого есть метод join() .

Всё дело в том, что оператор + каждый раз создаёт новую строку, а затем копирует в неё исходные. join() устроен иначе и обеспечивает выигрыш во времени.

Используйте генераторы

Если у вас в списке хранится много данных, которые требуется использовать все за раз, применяйте generator . Это сэкономит ваше время.

Будьте бдительны

Взгляните на следующий код:

Данный код может показаться эффективным, так как в нём для удаления дубликатов используется set . Но на самом деле он будет выполняться долго. Не забывайте, что приведение списка ко множеству – это время. Так что этот вариант будет лучше:

Избегайте точек

Старайтесь не пользоваться ими. Взгляните на пример:

Вместо этого можно применить следующий синтаксис:

Всё потому, что когда вы вызываете функцию с помощью точки, она сперва обращается к методу __getattribute()__ или __getattr()__ . Эти методы, в свою очередь, используют операции со словарями, отнимающие время. Поэтому старайтесь писать: from module import function .

Используйте 1 в бесконечных циклах

Пишите while 1 вместо while True . Это выиграет вам немного времени.

Попробуйте другие подходы

Не бойтесь применять новые практики для повышения эффективности кода.

Допустим, у вас есть код:

Вместо этого стоит попробовать:

Используйте ускорители

Медлительность Python послужила вдохновением для различных проектов, сокращающих его время работы. На большинстве соревнований по программированию вы встретитесь с pypy (там, где можно писать на Python).

Эти средства помогут уменьшить время выполнения Python-программ.

Для больших датасетов используйте специальные библиотеки

C/C++ быстрее Python. Поэтому многие пакеты и модули, которые можно использовать в программах на Python, пишутся на C/C++. Среди таких модулей – Numpy, Scipy и Pandas, столь необходимые при обработке больших массивов данных.

Используйте последнюю версию Python

Python регулярно обновляется и совершенствуется и с каждым релизом становится всё быстрее и оптимизированнее. Поэтому для ускорения кода всегда пишите его на новейшей версии языка.

Заключение

Мы рассмотрели приёмы для ускорения кода на Python. Конечно, этот список не исчерпывающий: есть и другие способы, которые могут вам пригодиться. Обязательно ищите их и пишите код эффективно!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *