Торубаров
С.И., асс. Козаченко А.А.
Национальный
горный университет, Украина
Оценка времени выполнения алгоритма на основе его
теоретической вычислительной сложности.
В наше время в связи
со стремительным развитием науки, техники, информационных технологий, особое
значение получили направления, связанные с разработкой и анализом алгоритмов,
решающих те или иные задачи. Это требует универсального подхода к поставленной
проблеме, поскольку при всем многообразии алгоритмов и подходов к их
построению, желательно иметь единый способ их анализа и оценки. Это привела к
появлению отдельного математического анализа, который посвящен именно
обозначенным вопросам.
Основные понятия
Вычислительная сложность
алгоритма
— это функция, определяющая зависимость объёма работы, выполняемой некоторым
алгоритмом, от размера входных данных. Объём работы обычно измеряется
абстрактными понятиями времени и пространства, называемыми вычислительными
ресурсами. Время определяется количеством элементарных шагов, необходимых для
решения проблемы, тогда как пространство определяется объёмом памяти или места
на носителе данных [1]. Таким образом, в этой области предпринимается попытка
ответить на центральный вопрос разработки алгоритмов: «как изменится время
исполнения и объём занятой памяти в зависимости от размера входа и выхода?».
Формальная постановка задачи
Пусть дано Fa(DA)
- трудоёмкость алгоритма. Требуется определить время работы программной
реализации алгоритма – TA(DA).
Сравнение двух алгоритмов по их функции
трудоемкости вносит некоторую ошибку в получаемые результаты. Основной причиной
этой ошибки является различная частотная встречаемость элементарных операций,
порождаемая разными алгоритмами и различие во временах выполнения элементарных
операций на реальном процессоре. Таким образом, возникает задача перехода от
функции трудоемкости к оценке времени работы алгоритма на конкретном
процессоре.
На пути построения временных оценок мы
сталкиваемся с целым набором различных проблем, пофакторный учет которых вызывает
существенные трудности.
Укажем основные из этих проблем [3]:
·
неадекватность
формальной системы записи алгоритма и реальной системы команд процессора;
·
наличие архитектурных особенностей
существенно влияющих на наблюдаемое время выполнения программы, таких как
конвейер, кэширование памяти, предвыборка команд и данных, и т.д.;
·
различные
времена выполнения реальных машинных команд;
·
различие
во времени выполнения одной команды, в зависимости от значений операндов;
·
различные
времена реального выполнения однородных команд в зависимости от типов данных;
·
неоднозначности
компиляции исходного текста, обусловленные как самим компилятором, так и его
настройками.
Попытки различного подхода к учету этих
факторов привели к появлению разнообразных методик перехода к временным оценкам.
Идея пооперационного анализа состоит в получении пооперационной
функции трудоемкости для каждой из используемых алгоритмом элементарных
операций с учетом типов данных. Следующим шагом является экспериментальное
определение среднего времени выполнения данной элементарной операции на конкретной
вычислительной машине [2]. Ожидаемое время выполнения рассчитывается как сумма
произведений пооперационной трудоемкости на средние времена операций:
Другой подход предлагается
в методе Гиббсона [3]. Данный метод предполагает проведение совокупного
анализа по трудоемкости и переход к временным оценкам на основе принадлежности
решаемой задачи к одному из следующих типов:
·
задачи научно-технического характера с преобладанием операций с
операндами действительного типа.
·
задачи дискретной математики с преобладанием операций с операндами целого
типа.
·
задачи баз данных с преобладанием операций с операндами строкового типа.
Далее на основе анализа
множества реальных программ для решения соответствующих типов задач
определяется частотная встречаемость операций (рис. 1), создаются
соответствующие тестовые программы, и определяется среднее время на операцию в
данном типе задач (
(рис. 1 - Возможный вид частотной встречаемости
операций)
На основе полученной информации оценивается общее время работы алгоритма
в виде:
Наконец, рассмотрим метод прямого определения среднего времени[4]. В этом методе так же проводится совокупный
анализ по трудоемкости – определяется Fa(N), после чего на основе прямого эксперимента для
различных значений N определяется среднее время работы данной программы T и на основе известной
функции трудоемкости рассчитывается среднее время на обобщенную элементарную
операцию, порождаемое данным алгоритмом, компилятором и компьютером –
Вывод: оценка
трудоемкости алгоритма позволяет предсказать его поведения при увеличении
объема входных данных, а так же сравнить его производительность с другими
подобными решениями. Однако, когда требуется получить конкретные однозначные
результаты, связанные с работой алгоритма на определенной аппаратной платформе,
возникают трудности. Существует несколько методов решения данной проблемы, и
выбор того или иного пути должен производится на основе имеющихся данных об
алгоритме.
Список
литературы
1.
Т.
Кормен, Алгоритмы: построение и анализ. - М.: Вильямс, 2011. - 1296 с.
2.
Седжвик
Р., Фундаментальные алгоритмы. - М.: DiaSoft, 2001. - 688 с.
3.
Кривенцов
А.С,. Доверительная трудоемкость компьютерных алгоритмов, разработка оценки и
методика определения. - М.: Московский государственный университет
приборостроения и информатики, 2012. - 22 c.
4.
Ульянов М.В., Шептунов М.В. Математическая логика и
теория алгоритмов, часть 2: Теория алгоритмов. – М.: МГАПИ, 2003. – 80 с.