Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Основы анализа алгоритмов



Асимптотический анализ верхней и средней оценок сложности алгоритмов; сравнение наилучших, средних и наихудших оценок; O-, o-, ω- и θ-нотации; стандартные классы сложности; эмпирические измерения эффективности алгоритмов; накладные расходы алгоритмов по времени и памяти; рекуррентные соотношения и анализ рекурсивных алгоритмов.

Если алгоритм решает поставленную задачу, то можно посмотреть, насколько это решение эффективно. Одну и ту же задачу можно решить с помощью различных алгоритмов. Анализ алгоритмов дает нам инструмент для выбора оптимального алгоритма.

Чаще всего для описания сложности алгоритма в качестве основных критериев оценки рассматривают время, затраченное алгоритмом на вычисление, и использованную память. Понятно, что потребление этих ресурсов зависит от размера входных данных.

При анализе алгоритма определяется не реальное количество времени, а приблизительное число элементарных операций, выполняемых алгоритмом, так как реальное время, требуемое на решение задачи, не очень хороший способ измерять эффективность алгоритма. Алгоритм не становится лучше, если его перенести на более быстрый компьютер, или хуже, если его выполнять на более медленном.

Число элементарных операций и измеряет относительное время выполнения алгоритма.

На самом деле, фактическое количество операций алгоритма на тех или иных входных данных не представляет большого интереса и не очень много сообщает об алгоритме. Вместо этого интересна зависимость числа операций конкретного алгоритма от размера входных данных, что дает возможность сравнить два алгоритма по скорости роста числа операций.

Именно скорость роста играет ключевую роль, поскольку при небольшом размере входных данных алгоритм А может требовать меньшего количества операций, чем алгоритм В, но при росте объема входных данных ситуация может поменяться на противоположную.

Анализируя алгоритм, можно получить представление о том, сколько времени займет решение данной задачи при помощи данного алгоритма. Для каждого рассматриваемого алгоритма можно оценить насколько быстро решается задача на массиве входных данных длины N.

В случае небольшой или простой программы количество выполненных операций как функцию от N можно посчитать точно. Однако в большинстве случаев сделать это затруднительно.

Формальное описание:

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

В целях дальнейшего анализа примем следующие допущения:

· каждая команда выполняется не более чем за фиксированное время;

· исходные данные алгоритма представляются машинными словами по b битов каждое.

Конкретная проблема задается N словами памяти, таким образом, на входе алгоритма – Nb = N*b бит информации. Отметим, что в ряде случаев, особенно при рассмотрении матричных задач N является мерой длины входа алгоритма, отражающей линейную размерность.

Программа, реализующая алгоритм для решения общей проблемы состоит из М машинных инструкций по bм битов – Мb = М*bм бит информации.

Кроме того, алгоритм может требовать следующих дополнительных ресурсов абстрактной машины:

Sd – память для хранения промежуточных результатов;

Sr – память для организации вычислительного процесса (память, необходимая для реализации рекурсивных вызовов и возвратов).

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

Под трудоёмкостью алгоритма для данного конкретного входа, будем понимать количество «элементарных» операций совершаемых алгоритмом для решения конкретной проблемы в данной формальной системе.

Функцией трудоемкости Fa (N) называется отношение, связывающие входные данные алгоритма с количеством элементарных операций.

Комплексный анализ алгоритма может быть выполнен на основе комплексной оценки ресурсов формальной системы, требуемых алгоритмом для решения конкретных проблем. Очевидно, что для различных областей применения веса ресурсов будут различны, что приводит к следующей комплексной оценке алгоритма:

yA=c1 * Fa(N) + c2 * M + c3 * Sd + c4 * Sr, где ci – веса ресурсов.

Трудоёмкость алгоритмов по-разному зависит от входных данных.

Не всегда количество элементарных операций, выполняемых алгоритмом на одном входе длины N, совпадает с количеством операций на другом входе такой же длины. Это приводит к необходимости введения специальных обозначений, отражающих поведение функции трудоемкости данного алгоритма на входных данных фиксированной длины.

Пусть DА – множество конкретных проблем данной задачи, заданное в формальной системе. Пусть D Î DА –конкретная проблема и |D| = N.

В общем случае существует собственное подмножество множества DА, включающее все конкретные проблемы, имеющие мощность N:

обозначим это подмножество через DN: DN = {DÎ DN,: |D| = N} имощность множества DN через MDN → MDN = |DN |.

Тогда содержательно данный алгоритм, решая различные задачи размерности N, будет выполнять в каком-то случае наибольшее количество операций, а в каком-то случае наименьшее количество операций.

Ведем следующие обозначения:

1. FaÙ(N)худший случай – наибольшее количество операций, совершаемых алгоритмом А для решения конкретных проблем размерностью N:

DÎDN
FaÙ(N) = max {Fa (D)} – худший случай на DN

2. FaÚ(N)лучший случай – наименьшее количество операций, совершаемых алгоритмом А для решения конкретных проблем размерностью N:

DÎDN
FaÚ(N) = min {Fa (D)} – лучший случай на DN

3. ` Fa(N)средний случай – среднее количество операций, совершаемых алгоритмом А для решения конкретных проблем размерностью N:

DÎDN
`Fa(N) = (1 / MDN)*å {Fa (D)} – средний случай на DN

Классификация алгоритмов по виду функции трудоёмкости.

В зависимости от влияния исходных данных на функцию трудоемкости алгоритма может быть предложена следующая классификация, имеющая практическое значение для анализа алгоритмов:





Дата публикования: 2015-01-10; Прочитано: 2290 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...