2016-07-14 3 views
2

Некоторые задачи на Codeforces приводят к «TLE» (предел превышения по времени) при использовании long long для некоторых переменных, а при изменении их на int результат получается «Принято».Почему замена long long с int увеличивает производительность?

Как этот вопрос влияет на код? Как компиляторы справляются с этим? Почему код быстрее при использовании int?

+0

Может быть запущен против 64-разрядной арифметики в 32-битной системе, но здесь игнорируется сложность времени. O (1) означает фантастическую временную сложность, но O (1) может занять 14,5 миллиардов лет. У вас может быть O (log (n)) длиной дольше, чем O (n) из-за неправильной обработки кэша первым алгоритмом. Быть быстрее не означает, что это быстрее. Алгоритм может быть потрясающим, но реализация может все еще сосать или быть непрактичной. – user4581301

+2

Измерение. [[[[[[[ –

ответ

6

В значительной степени это зависит от платформы. Вот два случая, когда использование long long может замедлить ваш код:

  1. Если процессор не 64 бит (при условии, что long long 64 бит и int 32 бит), то есть больше работы, связанной с выполнением операций таких как добавление.
  2. Если вы работаете над большим количеством данных, изменение от int до long long может иметь большое значение, поскольку данные в два раза больше. Вытягивание данных с диска или бара в кеш-память процессора является дорогостоящим, и если тип данных вдвое больше, ЦП должен запрашивать данные чаще.
Смежные вопросы