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

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

Time limit exceeded python что это

В нашем архиве вы найдёте множество задач с соревнований по спортивному программированию различной сложности. С помощью автоматической проверяющей системы вы сможете мгновенно проверить свое решение. В этом разделе описана работа с проверяющей системой шаг за шагом.

1. Выбираем задачу

Чтобы увидеть список задач перейдите по ссылке Архив задач, затем выберите том или рубрику. Выберите интересующую вас задачу. Для тех, кто здесь впервые, рекомендуем начать с задач 1000. A+B Problem и 1001. Обратный корень. После того как определитесь с выбором задачи, приступайте к ее решению.

2. Решаем задачу и отправляем решение на проверку

Решением задачи является исходный код программы, написанный на одном из доступных языков программирования.

Пример решения задачи 1000. A+B Problem, в которой требуется считать два целых числа и вывести их сумму (на языке Паскаль):

Чтобы автоматическая проверяющая система смогла протестировать ваше решение, оно должно отвечать следующим требованиям.

  • Программа должна являться консольным приложением.
  • Входные данные подаются программе в стандартном потоке ввода (ввод с клавиатуры). Программа должна выводить ответ в стандартный поток вывода (вывод на экран).
  • Программа должна выводить только те данные, которые требует условие задачи. Выводить приглашение для ввода («Введите N:») не нужно. Также не нужно ожидать нажатия клавиши в конце работы программы.

Входные данные в тестах всегда удовлетворяют ограничениям, описанным в условиях задач. Проверять эти ограничения в своих решениях не требуется.

В решениях задач запрещается:

  • работа с любыми файлами;
  • выполнение внешних программ и создание новых процессов;
  • работа с элементами графического интерфейса (окнами, диалогами и т.д.);
  • работа с внешними устройствами (принтером, звуковой картой и т.д.);
  • использование сетевых средств.

О том, как следует использовать конкретные языки программирования, читайте в соответствующих разделах:

  • Как писать решения на C/C++
  • Как писать решения на Pascal
  • Как писать решения на Java
  • Как писать решения на C#
  • Как писать решения на Go
  • Как писать решения на Python
  • Как писать решения на Ruby
  • Как писать решения на Haskell
  • Как писать решения на Scala
  • Как писать решения на Rust
  • Как писать решения на Kotlin

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

3. Система проверяет решение

После отправки решения вы попадете на страницу Состояние проверки, где находится список всех последних решений. Среди них должно быть и ваше.

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

Решение засчитывается в том случае, если оно выдает верные ответы на все тесты. Первыми тестами в наборе зачастую являются тесты из условия задачи. Если на одном из тестов верный ответ получен не был, то проверка прекращается, а номер теста и тип ошибки выводится в таблице результатов проверки. В некоторых задачах правильный ответ может быть неоднозначен. В этом случае ответ будет проверен специальной проверяющей программой.

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

При подсчете времени работы решения учитывается только процессорное время, затраченное программой. Для подсчета памяти берется максимальный объем памяти, который использовался процессом в течение его работы (максимальный рабочий набор, peak working set). Далее из этого значения вычитается константа, равная минимальному объему памяти, который нужен программам на выбранном языке (обычно от 1 до 15 МБ).

Результатом проверки решения может быть один из следующих вердиктов:

  • Accepted. Решение засчитано как правильное.
  • Compilation error. Компиляция программы завершилась с ошибкой. Отчет компилятора в течение 15 минут будет доступен по ссылке на странице Состояние проверки. Возможные причины: синтаксическая ошибка; неправильно указан язык.
  • Wrong answer. Ответ программы неверен. В этом случае сообщается только номер теста. Входные данные теста не предоставляются, т.к. причины ошибки должны быть выявлены автором решения самостоятельно. Возможные причины: ошибка в программе; неверный алгоритм; программа выводит ответ в файл.
  • Time limit exceeded. Программа превысила установленное ограничение по времени. Работа решения будет прервана, как только истечет это время. Возможные причины: бесконечный цикл; неэффективное решение.
  • Memory limit exceeded. Программа превысила установленное ограничение по памяти. Работа решения будет прервана, как только превышено это ограничение. Возможные причины: утечка памяти; неэффективное решение.
  • Output limit exceeded. Программа превысила ограничение на размер выходных данных. Данное ограничение устанавливается с большим запасом и, как правило, не указывается в условиях задач. Возможные причины: бесконечный цикл; ошибка в программе.
  • Idleness limit exceeded. Программа простаивала в течение длительного промежутка времени. Возможные причины: ожидание нажатия клавиши в конце программы; чтение входных данных, когда они уже прочитаны до конца.
  • Runtime error. Программа аварийно завершила работу. Возможные причины: ненулевой код возврата (ошибка «non-zero exit code»); деление на ноль (ошибка «division by zero»); бесконечная рекурсия (ошибка «stack overflow»); недостаточный размер массивов или обращение по недоступному адресу в памяти (ошибка «access violation»). Чтобы избежать переполнения стека, используйте специальные директивы, которые приведены в разделах, посвященных конкретным языкам программирования.
  • Restricted function. Программа попыталась совершить небезопасную для проверяющей системы операцию. Возможные причины: чтение из файла, обращение к сетевому ресурсу.

Пример: если вы получили вердикт Wrong answer на тесте №3, то это означает, что ваше решение успешно прошло тесты №1 и №2, а на тесте №3 вывело неверный ответ. Если вы исправили ошибку, отправили решение на проверку снова и получили вердикт Time limit exceeded на тесте №10, то это означает, что исправленная ошибка действительно проявлялась на тесте №3. Теперь решение успешно проходит тесты с №1 по №9, а на тесте №10 работает дольше установленного ограничения. При этом неизвестно, был бы ответ на этом тесте правильным в случае, если бы решение уложилось в ограничение по времени.

4. Задача сдана. Что дальше?

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

Вы всегда можете обсудить одну из задач или систему в целом на форуме. Если вы нашли ошибку в задаче, то напишите об этом в форуме с пометкой «To admins» в начале темы. Если ваше решение засчитано в Архиве задач, но у вас есть тест, который оно не проходит, то присылайте этот тест по адресу timus_support@acm.timus.ru с темой «Слабые тесты в задаче X».

Как преодолеть превышение лимита времени (TLE)?

Многие программисты всегда утверждают, что проблемы в конкурентном программировании всегда заканчиваются TLE (Time Limit Exceed). Основная проблема этой ошибки заключается в том, что она не позволит вам узнать, достигнет ли ваше решение правильного решения или нет!

Почему TLE приходит?

  • Ограничения онлайн-судьи: TLE имеет место из-за того, что у онлайн-судьи есть некоторые ограничения, которые не позволяют обрабатывать инструкцию после определенного срока, установленного постановщиком задач (обычно 1 секунда).
  • Конфигурация сервера . Точное время, затрачиваемое кодом, зависит от скорости сервера, архитектуры сервера, ОС и, конечно, от сложности алгоритма. Поэтому разные серверы, такие как практика, codechef, SPOJ и т. Д., Могут иметь разную скорость выполнения. Оценив максимальное значение N (N — это общее количество инструкций всего вашего кода), вы можете приблизительно оценить, произойдет ли TLE или нет в течение 1 секунды.

Таким образом, проанализировав эту диаграмму, вы можете приблизительно оценить сложность времени и сделать свой код в пределах верхнего предела.

Ошибки лимита времени OverCome

  • Измените методы ввода-вывода: вы должны выбрать правильные функции ввода-вывода и структуру данных, которые помогут вам в оптимизации.
    • В C ++ не используйте cin / cout — используйте scanf и printf.
    • В Java не используйте сканер — используйте вместо него BufferedReader.
    • В Python вы можете попробовать ускорить свои решения, добавив следующие две строки в начало вашего файла:

    В конечном счете, с опытом вы обязательно узнаете, что делать, а что не избегать TLE. Чем больше вы кодируете, тем больше вы узнаете о том, как конкурировать с TLE.

    Эта статья предоставлена Shubham Bansal . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

    Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

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

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