Скачать презентацию АЛГОРИТМЫ Алгоритм — это последовательность инструкций для Скачать презентацию АЛГОРИТМЫ Алгоритм — это последовательность инструкций для

алгоритмы.pptx

  • Количество слайдов: 29

АЛГОРИТМЫ АЛГОРИТМЫ

Алгоритм - это последовательность инструкций для выполнения какого либо задания. Свойства алгоритма: ДИСКРЕТНОСТЬ – Алгоритм - это последовательность инструкций для выполнения какого либо задания. Свойства алгоритма: ДИСКРЕТНОСТЬ – разделение выполнения решения задачи на отдельные операции ОПРЕДЕЛЕННОСТЬ (точность) алгоритма – определение однозначных действий исполнителя ПОНЯТНОСТЬ – не должен быть рассчитан на принятие каких-либо самостоятельных решений РЕЗУЛЬТАТИВНОСТЬ (конечность) алгоритма – исполнение алгоритма должно закончиться за конечное число шагов

ФОРМЫ ЗАПИСИ АЛГОРИТМОВ v ЗАПИСАН НА ЕСТЕСТВЕННОМ ЯЗЫКЕ; v ИЗОБРАЖЕН В ВИДЕ БЛОК СХЕМЫ; ФОРМЫ ЗАПИСИ АЛГОРИТМОВ v ЗАПИСАН НА ЕСТЕСТВЕННОМ ЯЗЫКЕ; v ИЗОБРАЖЕН В ВИДЕ БЛОК СХЕМЫ; v ЗАПИСАН НА АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ.

РЕСУРСЫ И ВРЕМЯ 1. Скорость работы алгоритма 2. Требования к ПК 2. 1. Размер РЕСУРСЫ И ВРЕМЯ 1. Скорость работы алгоритма 2. Требования к ПК 2. 1. Размер оперативной памяти 2. 2. Скорость работы диска 2. 3. Скорость (частота) работы процессора

Запись в виде блок - схем a : = b b: =c Блок вычислений Запись в виде блок - схем a : = b b: =c Блок вычислений Логический блок Соединитель (указание связи прерванными линиями в пределах одного листа Межстраничные соединения Блоки ввода- вывода данных Начало (конец) Процесс пользователя (выч. по стандартной программе) Блок модификации (выполняет действия, изменяющее пункты (например, заголовок цикла)

БАЗОВЫЕ СТРУКТУРЫ АЛГОРИТМОВ Да Нет Условие действие 1 Действие 2 Линейные Разветвляющиеся БАЗОВЫЕ СТРУКТУРЫ АЛГОРИТМОВ Да Нет Условие действие 1 Действие 2 Линейные Разветвляющиеся

Параметры цикла Нет Условие Тело цикла Да Да Условие Тело цикла Нет Циклические Параметры цикла Нет Условие Тело цикла Да Да Условие Тело цикла Нет Циклические

начало Ввод A, B Ввод ДА НЕТ A>=B X=A*B Вывод X КОНЕЦ начало Ввод A, B Ввод ДА НЕТ A>=B X=A*B Вывод X КОНЕЦ

начало Ввод N K=1, N!=1 ДА N!=N!*K K=K+1 K<=N НЕТ Вывод N! КОНЕЦ начало Ввод 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 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 раз, и, следовательно, В итоге внутренний цикл выполняется 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 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 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 Поиск проблемных частей алгоритма 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 Sub Main. Program() Slow Fast End Sub O(N 3) + O(N 2) = О(N 3)

Сложность рекурсивных алгоритмов Рекурсивными процедурами (recursive procedure) называются процедуры, вызывающие сами себя Sub Count. Сложность рекурсивных алгоритмов Рекурсивными процедурами (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 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 Для больших значений с пар. 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 Требования рекурсивных алгоритмов к объему памяти 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 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 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) Наихудший и усредненный случай алгоритм выбора элемента из списка 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. Часто встречающиеся функции оценки порядка сложности Функция Функции оценки порядка сложности Таблица 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 Таблица 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