Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по СиАОД.doc
Скачиваний:
54
Добавлен:
27.10.2018
Размер:
759.3 Кб
Скачать

Измерение времени выполнения программы

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

  1. Ввод исходной информации в программу.

  2. Качество скомпилированного кода исполняемой программы.

  3. Машинные инструкции (естественные и ускоряющие), используемые для выполнения программы.

  4. Временнáя сложность алгоритма соответствующей программы.

Поскольку время выполнения программы зависит от ввода исходных данных, его можно определить как функцию от исходных данных. Но зачастую время выполнения программы зависит не от самих исходных данных, а от их «размера». Здесь хорошим примером являются задачи сортировки. В них в качестве исходных данных выступает список элементов, подлежащих сортировке, а в качестве выходного результата – те же самые элементы, отсортированные в порядке возрастания или убывания. Естественной мерой объема входной информации для программы сортировки будет число элементов, подлежащих сортировке, или, другими словами, длина входного списка. В общем случае длина входных данных – подходящая мера объема входной информации. Иногда под размером понимается общее число битов, необходимых для представления всех входных данных. Иногда размер входа определяется не одним числом, а несколькими, например, числом вершин и числом ребер графа.

Обычно говорят, что время выполнения программы имеет порядок T(n) от входных данных размера n. Единица измерения T(n) не определена и, если не оговорено иначе, мы будем понимать T(n) как количество инструкций, выполняемых на идеализированном компьютере.

Если на время выполнения программы также влияет «качество» информации, мы будем определять T(n) как время выполнения в наихудшем случае, т.е. как максимум времени выполнения по всем входным данным размера n. Почему? Вот несколько причин.

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

  • На практике «плохие» входные данные (для которых время выполнения алгоритма близко к максимальному) могут часто попадаться. Например, для базы данных плохим запросом может быть поиск отсутствующего элемента (довольно частая ситуация).

Также существует понятие: среднее время выполнения по всем входным данным размера n, в статистическом смысле. На практике среднее время выполнения найти сложнее, чем наихудшее время выполнения, так как математически это трудноразрешимая задача и, кроме того, зачастую трудно определить какие входные данные являются «средними». Поэтому среднее время выполнения программы определяется для тех алгоритмов, где это возможно.

Теперь сделаем замечание о втором и третьем факторах, влияющих на время выполнения программ: о компиляторе, используемом для компиляции программы, и машине, на которой выполняется программа. Эти факторы влияют на то, что для измерения времени выполнения мы не можем применить стандартные единицы измерения, такие как секунды или миллисекунды. Поэтому мы можем только делать заключения, подобные следующему: «время выполнения такого-то алгоритма пропорционально n2». Константы пропорциональности также нельзя точно определить, поскольку они зависят от компилятора, компьютера и др. факторов.