Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
recipes.pdf
Скачиваний:
37
Добавлен:
22.05.2015
Размер:
322.44 Кб
Скачать

14

Симоненко Евгений А. Олимпиадная подготовка по программированию

кую функцию, возвращающую случайное число из диапазона от a до b:

#include <cstdlib>

inline int rd(int a, int b) {

return a + rand() % (b - a + 1);

}

ПРОФИЛИРОВАНИЕ

Если решение задачи не проходит по “Time Limit” или имеется подозрение, что это может произойти, то есть смысл попытаться осуществить оптимизацию этого решения. Но прежде чем затевать эту самую оптимизацию следует сначала собрать информацию о времени исполнения отдельных участков кода решения, не следует доверять поиск участка кода для оптимизации, основываясь только на догадках. Практика показала, что зачастую произведённая оптимизация ничего не даёт, так как оптимизировать следовало другой участок кода, а вклад сопитимизированного участка ничтожен или несущественен.

Для сбора информации о времени исполнения участков кода можно использовать профилировщики. Например, профилировщик входит в состав Visual Studio в редакции Professional.

Если же профилировщика под рукой нет, то можно обойтись замером времени выполнения подозрительных участков кода. Для этого можно воспользоваться стандартными функциями библиотеки C time() за получения текущего времени в начале участка кода и в его конце и difftime() для вычисления затраченного на его выполнение времени в секундах. Ниже приведён образец использования этих функций:

time_t t_begin = time(NULL); // Участок кода.

time_t t_end = time(NULL);

cerr << difftime(t_end, t_begin) << endl;

Для получения достоверной информации в результате профилирования нужно иметь большие тесты.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]