tgoop.com/asisakov_channel/1025
Last Update:
Быстрый принт для контестов
Я думаю каждый из нас горел в моменты, когда надо быстро решить контест с ограничением и написать типа оптимальный код, который типа пройдёт тесты и не только влезет в память, но еще и за 2 секунды отработает.
Часто бывало такое, что вроде уже наоптимизировал код, а он ну совсем не проходит по времени и надо еще 50-100 мс откуда-то достать
Оказалось, что привычный для нас print() - это функция поверх sys.stdout.write()
Пока она отработает до вывода в аутпут инфы, может пройти достаточно много времени. И вот почему - исполняя print(), интерпретатор Python выполняет несколько шагов:
Ну вот сами посчитайте количество дополнительной логики
Я спросил у гпт в чем отличие, и вот что он выдал:
print() — это как заказать в ресторане "комплексный обед". Вы просто говорите название, а повар сам готовит салат, суп и второе, а затем подает все вместе. Это удобно, но требует от кухни больше действий
sys.stdout.write() — это как напрямую сказать повару: "Дай мне кусок хлеба", "Теперь положи на него сыр". Вы даете точные, низкоуровневые команды. Это быстрее для повара, но требует от вас больше указаний
В цикле, где эти операции повторяются миллионы раз, накладные расходы на дополнительную логику print() становятся заметными.
Звучит немного кринжовенько, но думаю основной смысл понятен. Кстати, в цикле на 10М вызовов функции записи, sys.stdout.write() почти в 2 раза быстрее обычного принта
Надеюсь, инфа была полезной и сэкономит вам драгоценные милисекунды на контестах.
P.S. Этой инфой поделились ребята с моей команды, так что в первую очередь спасибо им💪🏿
#python #code