
алгоритмы.pptx
- Количество слайдов: 29
АЛГОРИТМЫ
Алгоритм - это последовательность инструкций для выполнения какого либо задания. Свойства алгоритма: ДИСКРЕТНОСТЬ – разделение выполнения решения задачи на отдельные операции ОПРЕДЕЛЕННОСТЬ (точность) алгоритма – определение однозначных действий исполнителя ПОНЯТНОСТЬ – не должен быть рассчитан на принятие каких-либо самостоятельных решений РЕЗУЛЬТАТИВНОСТЬ (конечность) алгоритма – исполнение алгоритма должно закончиться за конечное число шагов
ФОРМЫ ЗАПИСИ АЛГОРИТМОВ v ЗАПИСАН НА ЕСТЕСТВЕННОМ ЯЗЫКЕ; v ИЗОБРАЖЕН В ВИДЕ БЛОК СХЕМЫ; v ЗАПИСАН НА АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ.
РЕСУРСЫ И ВРЕМЯ 1. Скорость работы алгоритма 2. Требования к ПК 2. 1. Размер оперативной памяти 2. 2. Скорость работы диска 2. 3. Скорость (частота) работы процессора
Запись в виде блок - схем a : = b b: =c Блок вычислений Логический блок Соединитель (указание связи прерванными линиями в пределах одного листа Межстраничные соединения Блоки ввода- вывода данных Начало (конец) Процесс пользователя (выч. по стандартной программе) Блок модификации (выполняет действия, изменяющее пункты (например, заголовок цикла)
БАЗОВЫЕ СТРУКТУРЫ АЛГОРИТМОВ Да Нет Условие действие 1 Действие 2 Линейные Разветвляющиеся
Параметры цикла Нет Условие Тело цикла Да Да Условие Тело цикла Нет Циклические
начало Ввод A, B Ввод ДА НЕТ A>=B X=A*B Вывод X КОНЕЦ
начало Ввод N K=1, N!=1 ДА N!=N!*K K=K+1 K<=N НЕТ Вывод N! КОНЕЦ
Анализ скорости выполнения алгоритмов Производительность алгоритма можно оценить по порядку величины. Алгоритм имеет сложность порядка O(f(N)) (произносится «О большое от F от N» ), если с увеличением размерности исходных данных N время выполнения алгоритма растет пропорционально функции f(N).
For I = 1 То N ' Поиск наибольшего элемента в списке. Max. Value = О For J = 1 to N If Value(J) > Max. Value Then Max. Value = Value(J) Max. J = J End If Next J ‘Вывод наибольшего элемента на печать. Print Format$(Max. J) & ": " & Str$(Max. Value) ' Обнуление элемента для исключения ' его из дальнейшего поиска. Value(Max. J) = О Next I
В итоге внутренний цикл выполняется N * N или N 2 раз, и, следовательно, сложность алгоритма будет порядка O(N 2). N 3 +N O(N 3). При N = 100 разность N 3 + N = 1 000 100 и N 3 = 100, или менее чем 0, 01 процента. При N = 2 разность между N 3 + N = 10 и N 3 = 8 равна 2, то есть уже 20 процентов.
3 * N 2, будет иметь порядок O(N 2). N 2, 3 * N 2 или 3 * N 2 + N
Sub Main. Program() Fast End Sub Fast() O(NJ). Dim I As Integer Dim J As Integer Dim К As Integer For I = 1 To N For J = 1 To N Slow ' Вызов процедуры Slow Next J Next I End Sub O(N 2) и O(N 3) или O(N 3 * N 2) = O(N 5).
Поиск проблемных частей алгоритма Sub Slow() Dim I As Integer Dim J As Integer Dim К As Integer O(N 3) For I = 1 To N For J = 1 To N For К = 1 To N ' Выполнить какие-либо действия. Next К Next J Next I End Sub
Sub Main. Program() Slow Fast End Sub O(N 3) + O(N 2) = О(N 3)
Сложность рекурсивных алгоритмов Рекурсивными процедурами (recursive procedure) называются процедуры, вызывающие сами себя Sub Count. Down(N As Integer) If N <= 0 Then Exit Sub Count. Down N - 1 End Sub вычислительная сложность фрагмента будет порядка O(N)
Многократная рекурсия Sub Double. Count. Down(N As Integer) If N <= 0 Then Exit Sub Double. Count. Down N - 1 End Sub T(N) - 2 * O(N) = O(N) число раз, которое выполняется процедура Double. Count. Down с параметром N Т(0) = 1 N=0 после первого шага закончит работу
Для больших значений с пар. N – 1 выполнялась Т(0) – 1 и N 0 1 2 Т(М) 1 3 7 3 1 + 2 * T(N - 1) T(N) - 1 + 2 * T(N - 1) 4 5 6 7 8 15 31 63 127 255 511 T(N) = 2(N+1) - 1 O(2 N). 9 1023 10 2047
Требования рекурсивных алгоритмов к объему памяти Sub Gobble. Memory(N As Integer) Dim Array() As Integer Re. Dim Array (1 To 32000) Gobble. Memdry N + 1 End Sub для рекурсивных алгоритмов необходимо хотя бы приблизительно оценивать требования к объему памяти, чтобы убедиться, что программа не исчерпает при выполнении все доступные ресурсы
Sub Use. Stack() Static Count As Integer Count = Count + 1 Use. Stack End Sub
Sub Use. Stack() Static Count As Integer Dim I As Variant Dim J As Variant Dim К As Variant Count = Count + 1 Use. Stack End Sub программа исчерпает стековое пространство еще быстрее:
Наихудший и усредненный случай алгоритм выбора элемента из списка Function Locate. Item(target As Integer) As Integer For I = 1 To N If Value(I) = target Then Exit For Next I Locate. Item = I End Sub В конце списка - сложность порядка O(N). в начале списка -сложность порядка О(1). в усредненном случае - порядка O(N/2) O(N)
Функции оценки порядка сложности Таблица 1. 2. Часто встречающиеся функции оценки порядка сложности Функция f(N)=C f(N)=log(N)) f(N)=log(N) f(N)=NC Примечание С -постоянная единицы от нуля до f(N)=N*log(N) f(N)=Nc f(N)=CN С -постоянная больше единицы f(N)=N! т. е. 1*2*. . . N
Таблица 1. 3. Время выполнения сложных алгоритмов N=10 N=20 N=30 N=40 N=50 N 3 0, 001 с 0, 008 с 0, 027 с 0, 064 с 0, 125 с 2 N 0, 001 с 1, 05 с 17, 9 мин 1, 27 дня 35, 7 лет 3 N 0, 059 с 58, 1 мин 6, 53 года 3, 86*1 05 лет 2, 28*1 010 лет N! 3, 63 с 7, 71*1 04 лет 8, 41*1018 лет 2, 59*1034 лет 9, 64*1050 лет
Обращение к файлу подкачки
Основной прием - экономное расходование памяти. Второй способ - написать код так, чтобы программа обращалась к блокам памяти последовательно.
Списки Четыре основных способа распределения памяти: объявление переменных стандартных типов (целые, с плавающей точкой и т. д. ); объявление переменных типов, определенных пользователем; создание экземпляров классов при помощи оператора New и изменение размера массивов
списки Простые списки Коллекции Связанные списки Циклические Связанные списки Неупорядоченные списки Потоки Двусвязные списки Set top_cell. Next. Cell = Nothing Set top_cell = Nothing