Основы анализа (продолжение).ppt
- Количество слайдов: 18
Основы анализа эффективности алгоритмов (продолжение) 1. Эмпирический анализ алгоритмов
ОБЩИЙ ПЛАН ЭМПИРИЧЕСКОГО АНАЛИЗА ЭФФЕКТИВНОСТИ АЛГОРИТМА • 1. Уяснение цели предстоящего эксперимента. • 2. Определение измеряемой метрики M и единиц измерения (количество операций или время работы). • 3. Определение характеристик входных данных (их диапазон, размер и т. д. ). • 4. Создание программы, реализующей алгоритм (или алгоритмы), для проведения эксперимента. • 5. Генерация образца входных данных. • 6. Выполнение алгоритма (или алгоритмов) над образцом входных данных и запись наблюдаемых данных. • 7. Анализ полученных данных.
Выводы по эмпирическому анализу • Эмпирический анализ алгоритма осуществляется путем выполнения программы, реализующей алгоритм, для некоторого образца входных данных и анализа полученных результатов (количества выполненных базовых операций или физического времени работы программы). • Зачастую при этом используются псевдослучайные числа. Главным преимуществом этого подхода является его применимость к любым алгоритмам, а недостатком — зависимость результатов эксперимента от конкретного компьютера и образца исходных данных.
2. Визуализация алгоритмов • Помимо математического и эмпирического анализа имеется еще один путь изучения алгоритмов. Он называется визуализацией алгоритма и может быть определен как использование изображений для передачи некоторой полезной информации об алгоритмах. • Эта информация может быть визуальной иллюстрацией действий, выполняемых алгоритмом, или его производительности для разных • входных данных, либо его скорости выполнения по сравнению с другими алгоритмами для решения той же задачи. • Для достижения данной цели визуализация алгоритма использует графические элементы (точки, отрезки, прямоугольники или параллелепипеды и т. д. ) для представления некоторых “интересных событий” в работе алгоритма. • Имеются два основных варианта визуализации алгоритма: • А) статическая визуализация • Б) динамическая визуализация, именуемая также анимацией алгоритма.
• Статическая визуализация алгоритма представляет выполнение алгоритма посредством серии изображений. • Анимация алгоритма, в свою очередь, использует непрерывную презентацию действий алгоритма в стиле мультфильма. Анимация — более привлекательный выбор, но, конечно, и существенно сложнее в реализации.
• Первые попытки визуализации алгоритмов относятся к 1970 -м годам. Переломным моментом стало появление в 1981 году классической визуализации алгоритма — тридцатиминутного цветного звукового фильма Сортировка за сортировкой. • Для входных данных большего размера в фильме Сортировка за сортировкой использована остроумная идея представить данные точками на плоскости, где первая координата точки представляет позицию элемента в массиве данных, а вторая — его значение.
Заповеди анимации алгоритмов (Питер Глур) • • • 1. Последовательность. 2. Интерактивность. 3. Ясность и краткость. 4. Снисходительность к пользователю и прощение его ошибок. 5. Адаптация к уровню знаний пользователя. 6. Упор на визуальную часть. 7. Удержание интереса пользователя. 8. Включение символьного и пиктограммного представления. 9. Включение анализа алгоритма (статистики выполнения) и сравнение с другими алгоритмами для решения той же задачи. 10. Включение истории выполнения.
Выводы по визуализации • Визуализация алгоритма представляет собой использование изображений для вывода полезной информации об алгоритме. • Два основных варианта визуализации алгоритма — статическая визуализация и динамическая визуализация (именуемая также анимацией алгоритма).
3. Математический анализ рекурсивных алгоритмов • ОБЩИЙ ПЛАН АНАЛИЗА ЭФФЕКТИВНОСТИ РЕКУРСИВНЫХ АЛГОРИТМОВ • 1. Выберите параметр (или параметры), по которому будет оцениваться размер входных данных алгоритма. • 2. Определите основную операцию алгоритма. • 3. Проверьте, зависит ли число выполняемых основных операций только от размера входных данных. Если оно зависит и от других факторов, рассмотрите при необходимости, как меняется эффективность алгоритма для наихудшего, среднего и наилучшего случаев. • 4. Составьте рекуррентное уравнение, выражающее количество выполняемых основных операций алгоритма, и укажите соответствующие начальные условия. • 5. Найдите решение рекуррентного уравнения или, если это невозможно, определите хотя бы его порядок роста.
4. Математический анализ нерекурсивных алгоритмов • ОБЩИЙ ПЛАН АНАЛИЗА ЭФФЕКТИВНОСТИ НЕРЕКУРСИВНЫХ АЛГОРИТМОВ • 1. Выберите параметр (или параметры), по которому будет оцениваться размер входных данных алгоритма. • 2. Определите основную операцию алгоритма. (Как правило, она находится в наиболее глубоко вложенном внутреннем цикле алгоритма. ) • 3. Проверьте, зависит ли число выполняемых основных операций только от размера входных данных. Если оно зависит и от других факторов, рассмотрите при необходимости, как меняется эффективность алгоритма для наихудшего, среднего и наилучшего случаев. • 4. Запишите сумму, выражающую количество выполняемых основных операций алгоритма. • 5. Используя стандартные формулы и правила суммирования, упростите полученную формулу для количества основных операций алгоритма. Если это невозможно, определите хотя бы их порядок роста.
Выводы по математическому анализу • Главным инструментом анализа временной эффективности нерекурсивного алгоритма является построение выражения для суммы количества выполнений его основной операции и выяснение порядка ее роста. • Главным инструментом анализа временной эффективности рекурсивного алгоритма является построение рекуррентного соотношения для количества выполнений его основной операции и выяснение порядка его роста.
Тема: Метод глубокой силы • Метод грубой силы представляет собой прямой подход к решению задачи, обычно основанный непосредственно на формулировке задачи и определениях используемых ею концепций.
Достоинства метода • Во-первых, в отличие от других стратегий, метод грубой силы применим к очень широкому диапазону задач. • В частности, метод грубой силы используется для многих элементарных, но важных алгоритмических задач, таких как вычисление суммы n чисел, поиск наибольшего элемента в списке и тому подобных. • Во-вторых, для некоторых важных задач (например, сортировки, поиска, умножения матриц, поиска подстрок) метод грубой силы дает вполне рациональные алгоритмы. • В-третьих, стоимость разработки более эффективного алгоритма может оказаться неприемлемой, если требуется решить только несколько экземпляров задачи, а алгоритм, основанный на грубой силе, позволяет решить их за приемлемое время. • В-четвертых, даже будучи неэффективным в общем случае, метод грубой силы может оказаться полезен для решения небольших по размеру экземпляров задачи. • В-пятых, алгоритм, основанный на грубой силе, может служить для важных теоретических или дидактических целей, например мерилом для определения эффективности других алгоритмов для решения данной задачи.
1. Сортировка выбором • Мы начинаем сортировку выбором с поиска наименьшего элемента в списке и обмена его с первым элементом (таким образом, наименьший элемент помещается в окончательную позицию в отсортированном списке). • Затем мы сканируем список, начиная со второго элемента, в поисках наименьшего среди оставшихся n− 1 элементов и обмениваем найденный наименьший элемент со вторым, т. е. помещаем второй наименьший элемент в окончательную позицию в отсортированном списке. • В общем случае, при i-ом проходе по списку (0 меньше или равно i меньше или равно n− 2) алгоритм ищет наименьший элемент среди последних n−i элементов и обменивает его с Ai: • После выполнения n − 1 проходов список оказывается отсортирован. • Общее количество сравнений зависит только от размера массива и определяется следующей суммой: • C (n) =сумма(от 0 до п-2) последовательности (n − 1 − i).
2. Пузырьковая сортировка • Еще одно применение метода грубой силы к задаче сортировки состоит в сравнении соседних элементов и их обмене, если они находятся не в надлежащем порядке. • Неоднократно выполняя это действие, мы заставляем наибольший элемент “всплывать” к концу списка. Следующий проход приведет к всплыванию второго наибольшего элемента, и так до тех пор, пока после n− 1 итерации список не будет полностью отсортирован.
3. Последовательный поиск методом грубой силы • Этот алгоритм просто по очереди сравнивает элементы заданного списка с ключом поиска до тех пор, пока не будет найден элемент с указанным значением ключа (успешный поиск) или весь список будет проверен, но требуемый элемент не найден (неудачный поиск). • Последовательный поиск представляет превосходную иллюстрацию метода грубой силы, с его характерными сильными (простота) и слабыми (низкая эффективность) сторонами.
• 4) Задачи поиска пары ближайших точек • 5) Задача вычисления выпуклой оболочки с использованием грубой силы • 6) Поиск подстроки • 7) Задача коммивояжера: надо найти такой кратчайший путь по заданным n городам, чтобы каждый город посещался только один раз и конечным пунктом оказался город, с которого начиналось путешествие. • 8) Задача о рюкзаке: Дано n предметов весом w 1, . . . , wn и ценой v 1, . . . , vn, а также рюкзак, выдерживающий вес W. Требуется найти подмножество предметов, которое можно разместить в рюкзаке, и которое имеет при этом максимальную стоимость.
Выводы по теме: • 1) Подход к решению задачи с использованием грубой силы обычно основан непосредственно на формулировке задачи и определениях применяемых в ней концепций. • 2) Главные достоинства подхода с использованием грубой силы — широкая применимость и простота; главный недостаток — очень низкая эффективность таких алгоритмов. • 3) Примером подхода с использованием грубой силы могут служить следующие известные алгоритмы: • а) алгоритм умножения матриц, основанный на определении этой операции; • б) сортировка выбором; • в) последовательный поиск; • г) простой алгоритм поиска подстрок. • 4) Исчерпывающий перебор представляет собой подход с использованием грубой силы для решения комбинаторных задач. Он предполагает генерацию всех комбинаторных объектов задачи, выбор среди них тех, которые удовлетворяют ограничениям из условий задачи, и последующий поиск нужного объекта.