
- •2. Общие требования к алгоритму
- •3. Формальное представление алгоритма. Машина Тьюринга
- •4. Алгоритмически неразрешимые проблемы: их существование и примеры
- •Вопросы
- •2. Теория возмущений и числа обусловленности задачи
- •3. Влияние ошибок округления на алгоритмы
- •4. Программирование численных алгоритмов
- •Вопросы
- •Основные характеристики алгоритма при его анализе. Вычислительная сложность алгоритма
- •Классы входных данных
- •Сложность алгоритма по памяти
- •2. Классы входных данных
- •3. Сложность алгоритма по памяти
- •Вопросы
- •Лекция 4. Оценка вычислительной сложности алгоритма План
- •Предварительные шаги для оценки вычислительной сложности алгоритма
- •Скорость роста алгоритма
- •Анализ подходов, связанных с поиском информации
- •1. Предварительные шаги для оценки вычислительной сложности алгоритма
- •2. Скорость роста алгоритма
- •3. Анализ подходов, связанных с поиском информации
- •Вопросы
- •Класс р - задачи с полиномиальной сложностью
- •Класс np - полиномиально проверяемые задачи
- •1. Класс р - задачи с полиномиальной сложностью
- •2. Класс np - полиномиально проверяемые задачи
- •Вопросы
- •Лекция 6. Сложностные классы задач (продолжение) План
- •Приближенные методы решения np-задач
- •2. Приближенные методы решения np-задач
- •Вопросы
- •Лекция 7. Численные алгоритмы План
- •Вычисление значений многочлена
- •Решение системы линейных алгебраических уравнений
- •1. Вычисление значений многочлена
- •2. Решение системы линейных алгебраических уравнений
- •Вопросы
- •Цели анализа последовательных алгоритмов
- •Основы построения графа алгоритма
- •Допустимые преобразования алгоритма
- •2. Основы построения графа алгоритма
- •Последовательность операций
- •3. Допустимые преобразования алгоритма
- •Вопросы
- •Свойства вершин ориентированного ациклического графа
- •Свойства топологической сортировки графа
- •Топологические уровни графа алгоритма
- •1. Свойства вершин ориентированного ациклического графа
- •2. Свойства топологической сортировки графа
- •3. Топологические уровни графа алгоритма
- •Вопросы
- •Лекция 10. Топологические сортировки сложных графов План
- •Особенности и рекомендации построения топологических сортировок графов алгоритмов, содержащих условные операции
- •Построение топологической сортировки графа по топологическим сортировкам подграфов его разбиения
- •1. Особенности и рекомендации построения топологических сортировок графов алгоритмов, содержащих условные операции
- •2. Построение топологической сортировки графа по топологическим сортировкам подграфов его разбиения
- •Вопросы
- •Операция элементарного гомоморфизма
- •Гомоморфная свертка. Понятие гомоморфного образа, прообраза. Связь топологических сортировок графа и его гомоморфной свертки
- •Использование гомоморфной свертки для упрощения процесса исследования структуры алгоритма
- •1. Операция элементарного гомоморфизма
- •2. Гомоморфная свертка. Понятие гомоморфного образа, прообраза. Связь топологических сортировок графа и его гомоморфной свертки
- •3. Использование гомоморфной свертки для упрощения процесса исследования структуры алгоритма
- •Вопросы
- •Лекция 12. Внутренний параллелизм алгоритма План
- •Понятие внутреннего параллелизма алгоритма и его использование
- •О выборе расположения вершин графа алгоритма
- •Особенности алгоритма решения системы линейных алгебраических уравнений
- •1. Понятие внутреннего параллелизма алгоритма и его использование
- •2. О выборе расположения вершин графа алгоритма
- •3. Особенности алгоритма решения системы линейных алгебраических уравнений
- •Вопросы
- •Лекция 13. Временные развертки План
- •Основная проблема анализа алгоритма с использованием соответствующего графа
- •Вектор временной развертки, обобщенной временной развертки
- •Время реализации алгоритма
- •1. Основная проблема анализа алгоритма с использованием соответствующего графа
- •2. Вектор временной развертки, обобщенной временной развертки
- •3. Время реализации алгоритма
- •Вопросы
- •Лекция 14. Векторные свойства временных разверток План
- •Линейность временных разверток
- •Характеристики множества обобщеных временных разверток
- •Свойства временных разверток при фиксированном векторе задержек
- •1. Линейность временных разверток
- •2. Характеристики множества обобщеных временных разверток
- •3. Свойства временных разверток при фиксированном векторе задержек
- •Лекция 15. Векторные свойства временных разверток (продолжение) План
- •Ориентированная задержка цикла. Уравновешенный цикл.
- •Пространственно-временные развертки
- •1. Ориентированная задержка цикла. Уравновешенный цикл
- •2. Условие совпадения множеств и с точностью до параллельного переноса
- •3. Пространственно-временные развертки.
Вопросы
Какие алгоритмы называются численными, логическими?
Почему численным алгоритмом практически невозможно получить точное решение задачи?
Особенности машинной арифметики. С чем связаны эти особенности?
Как можно рассматривать приближенное решение вычислительной задачи?
Число обусловленности задачи. Абсолютное и относительное число обусловленности функции.
Вывести формулу абсолютного числа обусловленности функции одной переменной, многих переменных?
Какой алгоритм является обратно устойчивым?
Чем, как правило, руководствуются при машинной реализации численных алгоритмов или выборе готовой программы?
Литература
Дж. Макконнелл. Основы современных алгоритмов. 2-е дополненное издание. – М.: Техносфера, 2004. – 368 с.
Кобозєва А.А., Мачалін І.О., Хорошко В.О. Аналіз захищеності інформаційних систем. - К.: Вид. ДУІКТ, 2010. – 316 с.
Кобозева А.А., Хорошко В.А. Анализ информационной безопасности. - К.: Изд.ГУИКТ, 2009. – 251 с.
Деммель Дж. Вычислительная линейная алгебра / Дж.Деммель; пер.с англ. Х.Д.Икрамова. — М.: Мир, 2001. — 430 с.
Бахвалов Н.С. Численные методы / Н.С.Бахвалов, Н.П.Жидков, Г.М.Кобельков. — М.: БИНОМ. Лаборатория знаний, 2006. — 636 с.
Каханер Д. Численные методы и программное обеспечение / Д.Каханер, К.Моулер, С.Нэш; пер. с англ. Х.Д.Икрамова. — М.: Мир, 2001. — 575 с.
E.Anderson, Z.Bai, C.Bischof, J.Demmel, J.Dongarra, J.Du Croz, A.Greenbaum, S.Hammarling, A.McKenney, S.Ostrouchov, and D.Sorensen. LAPACK Users’ Guide (2nd edition). SIAM, Philadelphia,PA, 1995.
Змістовий модуль 2. ОСНОВЫ АНАЛИЗА АЛГОРИТМОВ
Лекция 3. Понятие анализа алгоритма
План
Основные характеристики алгоритма при его анализе. Вычислительная сложность алгоритма
Классы входных данных
Сложность алгоритма по памяти
1. Основные характеристики алгоритма при его анализе. Вычислительная сложность алгоритма
Одну и ту же задачу может решать множество алгоритмов. Эффективность работы каждого из них описывается разнообразными характеристиками. Основные характеристики – это
Вычислительная сложность;
Запросы к памяти.
Прежде чем анализировать эффективность алгоритма, нужно доказать, что данный алгоритм правильно решает задачу. В противном случае вопрос об эффективности не имеет смысла.
При анализе алгоритма определяется количество «времени» для его выполнения. Это не реальное число секунд или других промежутков времени, а число операций, выполняемых алгоритмом. Число операций измеряет относительное время выполнения алгоритма или его вычислительную сложность. Фактическое количество секунд работы алгоритма непригодно для его анализа, т.к.
а) нас интересует относительная эффективность алгоритма;
б) алгоритм не становится лучше (хуже), если его перенести на более быстрый (медленный) компьютер.
Более того, даже фактическое количество операций алгоритма на тех или иных входных данных не представляет большого интереса и не очень много сообщает об алгоритме. Вместо этого более важной и интересной является зависимость числа операций алгоритма от размера входных данных. Мы можем сравнивать два алгоритма по скорости роста числа операций. Именно скорость роста играет ключевую роль, и, как правило, рассматривается как показатель вычислительной сложности алгоритма, поскольку при небольшом размере входных данных алгоритм А может требовать меньшего количества операций, чем алгоритм В, но при росте объема входных данных ситуация может поменяться на противоположную.
Два самых больших класса алгоритмов – это
алгоритмы с повторением,
рекурсивные.
В основе алгоритмов с повторением лежат циклы и условные выражения; для анализа таких алгоритмов требуется оценить число операций, выполняемых внутри цикла, и число итераций цикла.
Рекурсивные алгоритмы разбивают большую задачу на фрагменты и применяются к каждому фрагменту отдельно. Такие алгоритмы называются иногда «разделяй и властвуй». В процессе решения большой задачи путем деления ее на меньшие создаются небольшие простые и понятные алгоритмы. Анализ рекурсивного алгоритма требует подсчета количества операций, необходимых для разбиения задачи на части, выполнения алгоритма на каждой из частей и объединения отдельных результатов для решения задачи в целом. Объединяя эту информацию и информацию о числе частей, мы можем вывести рекурентное соотношение для сложности алгоритма.
Анализируя
алгоритм, можно получить представление
о том, сколько времени займет решение
данной задачи при помощи данного
алгоритма. Для каждого алгоритма
необходимо оценивать, насколько быстро
решается задача на множестве (массиве)
входных данных длины
.
Одну и ту же задачу можно решить при помощи различных алгоритмов. Анализ алгоритмов дает инструмент для выбора алгоритма.
Пример.
Выбрать наибольшую из трех величин
.
В каждом алгоритме делается два сравнения. Первый алгоритм легче прочесть и понять, но с точки зрения выполнения на компьютере у них одинаковый уровень сложности, но первый требует больше памяти из-за временной переменной . Это не играет значительной роли, если сравниваются числа или символы, но при работе с другими типами данных это может стать существенным. Многие современные языки программирования позволяют определять операторы сравнения для больших и сложных объектов или записей. В этих случаях размещение временной переменной может потребовать много места. При анализе эффективности алгоритмов нас, в первую очередь, будет интересовать вопрос времени, но в тех случаях, когда память играет существенную роль, мы будем обсуждать и ее.
Различные характеристики алгоритмов предназначены для сравнения эффективности разных алгоритмов, решающих одну задачу. Не имеет смысла сравнивать между собой, например, алгоритм сортировки и алгоритм умножения матриц.
Результат анализа алгоритмов – не формула для точного количества секунд или компьютерных циклов, которые потребует конкретный алгоритм. Такая информация бесполезна, т.к. в этом случае нужно указывать также тип компьютера, используется ли он одним пользователем или несколькими, какой у него процессор и тактовая частота, полный или редуцированный набор команд на чипе процессора и насколько хорошо компилятор оптимизирует выполняемый код. Эти условия влияют на скорость работы программы, реализующей алгоритм. Учет этих условий означал бы, что при переносе программы на более быстрый компьютер алгоритм становится лучше, т.к. он работает быстрее.Но это не так, поэтому анализ не должен учитывать указанных особенностей компьютера.
В
случае небольшой или простой программы
количество выполняемых алгоритмом
операций как функцию от
можно
посчитать точно. Однако в большинстве
случаев в этом нет нужды. Действительно,
рассмотрим для примера два простых
гипотетических алгоритма, один из
которых требует для своей реализации
операций, а второй -
.
Очевидно, что разница между ними
становится незаметной, как только
становится
достаточно большим. В силу этого имеет
смысл оценивать главный член в формуле
зависимости количества операций от
размера входных данных. В рассмотренном
случае - это
.