Скачать презентацию Программирование и основы алгоритмизации Тема 8 Алгоритмы и Скачать презентацию Программирование и основы алгоритмизации Тема 8 Алгоритмы и

Тема 8. Алгоритмы и структуры данных.ppt

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

Программирование и основы алгоритмизации Тема 8. Алгоритмы и структуры данных Шевченко А. В. Тема Программирование и основы алгоритмизации Тема 8. Алгоритмы и структуры данных Шевченко А. В. Тема 8. Алгоритмы и структуры данных 1

Программирование и основы алгоритмизации Роль алгоритмов и структур данных Предметная область Модель процессов Модель Программирование и основы алгоритмизации Роль алгоритмов и структур данных Предметная область Модель процессов Модель объектов Структуры данных Алгоритмы Программы Шевченко А. В. Тема 8. Алгоритмы и структуры данных 2

Программирование и основы алгоритмизации Понятие алгоритма Алгоритм — это конечный набор правил, который определяет Программирование и основы алгоритмизации Понятие алгоритма Алгоритм — это конечный набор правил, который определяет последовательность операций для решения конкретного множества задач и обладает пятью важными чертами: конечность, определённость, ввод, вывод, эффективность. Дональд Эрвин Кнут Шевченко А. В. Тема 8. Алгоритмы и структуры данных 3

Программирование и основы алгоритмизации Свойства алгоритма Дискретность — алгоритм должен представлять процесс решения задачи Программирование и основы алгоритмизации Свойства алгоритма Дискретность — алгоритм должен представлять процесс решения задачи как последовательное выполнение некоторых простых шагов. При этом для выполнения каждого шага алгоритма требуется конечный отрезок времени. Детерминированность — определённость. В каждый момент времени следующий шаг работы однозначно определяется состоянием системы. Таким образом, алгоритм должен выдавать один и тот же результат для одних и тех же исходных данных. Конечность — при корректно заданных исходных данных алгоритм должен завершать работу и выдавать результат за конечное число шагов. Масштабируемость — алгоритм должен быть применим к разным наборам исходных данных. Результативность — завершение алгоритма определенными результатами. Эффективность — завершение алгоритма определенными результатами за определенное число шагов (время). Шевченко А. В. Тема 8. Алгоритмы и структуры данных 4

Программирование и основы алгоритмизации Пример алгоритма - задача о Ханойских башнях Легенда. В одном Программирование и основы алгоритмизации Пример алгоритма - задача о Ханойских башнях Легенда. В одном из буддийских монастырей монахи уже тысячу лет занимаются перекладыванием колец. Они располагают тремя пирамидами, на которых надеты кольца разных размеров. В начальном состоянии 64 кольца были надеты на первую пирамиду и упорядочены по размеру. Монахи должны переложить все кольца с первой пирамиды на вторую, выполняя единственное условие — кольцо нельзя положить на кольцо меньшего размера. При перекладывании можно использовать все три пирамиды. Монахи перекладывают одно кольцо за одну секунду. Как только они закончат свою работу, наступит конец света. . . Шевченко А. В. Тема 8. Алгоритмы и структуры данных 5

Программирование и основы алгоритмизации Решение задачи о Ханойских башнях Шаг 4 Шаг 1 Шаг Программирование и основы алгоритмизации Решение задачи о Ханойских башнях Шаг 4 Шаг 1 Шаг 5 Шаг 2 Шаг 6 Шаг 3 Шаг 7 Число шагов алгоритма вычисляется по формуле 2 N − 1, где N − число колец. Для перекладывания 64 -х колец потребуется 18 446 744 073 709 551 615 шагов. При скорости в одно перекладывание в секунду, потребуется около 584 542 046 091 лет. Шевченко А. В. Тема 8. Алгоритмы и структуры данных 6

Программирование и основы алгоритмизации Эффективность алгоритмов Временные фукции сложности Полиномиальные (P-задачи) Экспоненциальные (NP-задачи) f(n) Программирование и основы алгоритмизации Эффективность алгоритмов Временные фукции сложности Полиномиальные (P-задачи) Экспоненциальные (NP-задачи) f(n) 10 20 10 18 10 16 10 14 10 12 10 10 10 8 10 6 10 4 10 2 1 1 Шевченко А. В. n 22 nn 10 n 2 n n 10 n 5 n 2 n 10 Тема 8. Алгоритмы и структуры данных 100 n 7

Программирование и основы алгоритмизации Трансвычислительные задачи Не существует системы обработки данных, искусственной или естественной, Программирование и основы алгоритмизации Трансвычислительные задачи Не существует системы обработки данных, искусственной или естественной, которая могла бы обрабатывать более 2*1047 бит в секунду на грамм своей массы. Ханс Бреммерманн Предел Бреммермана = 1093 бит Трансвычислительные задачи Шевченко А. В. Тема 8. Алгоритмы и структуры данных 8

Программирование и основы алгоритмизации Представления алгоритмов Блок-схема Псевдокод Начало Ввод N I=1 F=1 Да Программирование и основы алгоритмизации Представления алгоритмов Блок-схема Псевдокод Начало Ввод N I=1 F=1 Да F=F*I I=1 F=1 ЦИКЛ ПОКА I <= N Нет F=F*I ВСЁ-ЦИКЛ Вывод F Конец Шевченко А. В. Тема 8. Алгоритмы и структуры данных 9

Программирование и основы алгоритмизации Блок-схемы алгоритмов ГОСТ 19. 701 -90 (ИСО 5807 -85). Схемы Программирование и основы алгоритмизации Блок-схемы алгоритмов ГОСТ 19. 701 -90 (ИСО 5807 -85). Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. Наименование Терминатор Процесс Решение Обозначение Функция Элемент отображает вход из внешней среды или выход из нее (наиболее частое применение − начало и конец программы). Выполнение одной или нескольких операций, обработка данных любого вида Отображает решение с одним входом и двумя или более альтернативными выходами, из которых только один может быть выбран. Предопределенный процесс Символ отображает выполнение процесса, который определен в другом месте программы Преобразование данных в форму, пригодную для обработки (ввод) или Данные отображения результатов обработки (вывод). Символ отображает выход в часть схемы и вход из другой части этой Соединитель Комментарий Шевченко А. В. схемы. Используется для более подробного описания шага, процесса или группы процессов. Тема 8. Алгоритмы и структуры данных 10

Программирование и основы алгоритмизации Классы алгоритмов Сортировка Поиск Алгоритмы Обходы графов Оптимизация Шевченко А. Программирование и основы алгоритмизации Классы алгоритмов Сортировка Поиск Алгоритмы Обходы графов Оптимизация Шевченко А. В. Тема 8. Алгоритмы и структуры данных 11

Программирование и основы алгоритмизации Сортировка массивов Код ТОВАР Наименование Цена 44 Яблоки 35. 50 Программирование и основы алгоритмизации Сортировка массивов Код ТОВАР Наименование Цена 44 Яблоки 35. 50 55 Апельсины 29. 90 12 Бананы 22. 00 . . typedef struct Ключ { short code; char name[10]; float price; Уникальный Неуникальный } PROD; PROD prod[8]; Шевченко А. В. Сортировка - упорядочение массива в соответствии со значениями ключа Тема 8. Алгоритмы и структуры данных 12

Программирование и основы алгоритмизации Алгоритмы сортировки массивов Сортировка с помощью включения Сортировка с помощью Программирование и основы алгоритмизации Алгоритмы сортировки массивов Сортировка с помощью включения Сортировка с помощью выделения Сортировка с помощью обмена n 2 Прямые Прямое включение Двоичное включение Прямой выбор n*log(n) Шейкерная Улучшенные Включение с уменьшающимися расстояниями (Шелла) Шевченко А. В. Пузырьковая С помощью дерева Тема 8. Алгоритмы и структуры данных Разделение (быстрая) 13

Программирование и основы алгоритмизации Сортировка прямым включением (Straight. Insertion) 44 55 12 42 94 Программирование и основы алгоритмизации Сортировка прямым включением (Straight. Insertion) 44 55 12 42 94 18 06 67 Шаг 1 44 55 12 42 94 18 06 67 Шаг 2 12 44 55 42 94 18 06 67 Шаг 3 12 42 44 55 94 18 06 67 Шаг 4 12 42 44 55 94 18 06 67 Шаг 5 12 18 42 44 55 94 06 67 Шаг 6 06 12 18 42 44 55 94 67 Шаг 7 06 12 18 42 44 55 67 94 Эффективность (n 2 -n)/2 Шевченко А. В. Тема 8. Алгоритмы и структуры данных 14

Программирование и основы алгоритмизации Пример сортировки прямым включением void Straight. Insertion(PROD* prod, int n) Программирование и основы алгоритмизации Пример сортировки прямым включением void Straight. Insertion(PROD* prod, int n) { for(int i = 1; i < n; i++) { PROD tmp = prod[i]; int j; for(j = i; j > 0 && tmp. code < prod[j-1]. code; j--) prod[j] = prod[j-1]; prod[j] = tmp; } } Шевченко А. В. Тема 8. Алгоритмы и структуры данных 15

Программирование и основы алгоритмизации Сортировка прямым выбором (Straight. Selection) 44 55 12 42 94 Программирование и основы алгоритмизации Сортировка прямым выбором (Straight. Selection) 44 55 12 42 94 18 06 67 Шаг 1 06 55 12 42 94 18 44 67 Шаг 2 06 12 55 42 94 18 44 67 Шаг 3 06 12 18 42 94 55 44 67 Шаг 4 06 12 18 42 94 55 44 67 Шаг 5 06 12 18 42 94 55 94 67 Шаг 6 06 12 18 42 44 55 94 67 Шаг 7 06 12 18 42 44 55 67 94 Эффективность (n 2 -n)/2 Шевченко А. В. Тема 8. Алгоритмы и структуры данных 16

Программирование и основы алгоритмизации Пример сортировки прямым выбором void Straight. Selection(PROD* prod, int n) Программирование и основы алгоритмизации Пример сортировки прямым выбором void Straight. Selection(PROD* prod, int n) { for(int i = 0; i < n-1; i++) { PROD tmp = prod[i]; int k = i; for(int j = i+1; j < n; j++) if(prod[j]. code < tmp. code) { tmp = prod[j]; k = j; } prod[k] = prod[i]; prod[i] = tmp; } } Шевченко А. В. Тема 8. Алгоритмы и структуры данных 17

Программирование и основы алгоритмизации Сортировка прямым обменом (Bubble. Sort) 44 55 12 42 94 Программирование и основы алгоритмизации Сортировка прямым обменом (Bubble. Sort) 44 55 12 42 94 18 06 67 Шаг 1 06 44 55 12 42 94 18 67 Шаг 2 06 12 44 55 18 42 94 67 Шаг 3 06 12 18 44 55 42 67 94 Шаг 4 06 12 18 42 44 55 67 94 Шаг 5 06 12 18 42 44 55 67 94 Шаг 6 06 12 18 42 44 55 67 94 Шаг 7 06 12 18 42 44 55 67 94 Эффективность (n 2 -n)/2 Шевченко А. В. Тема 8. Алгоритмы и структуры данных 16

Программирование и основы алгоритмизации Пример сортировки прямым обменом void Bubble. Sort(PROD* prod, int n) Программирование и основы алгоритмизации Пример сортировки прямым обменом void Bubble. Sort(PROD* prod, int n) { for(int i = 1; i < n; i++) for(int j = n-1; j > i; j--) if(prod[j-1]. code < prod[j]. code) { PROD tmp = prod[j-1]; prod[j-1] = prod[j]; prod[j] = tmp; } } Шевченко А. В. Тема 8. Алгоритмы и структуры данных 19

Программирование и основы алгоритмизации Шейкерная сортировка (Shaker. Sort) 44 55 12 42 94 18 Программирование и основы алгоритмизации Шейкерная сортировка (Shaker. Sort) 44 55 12 42 94 18 06 67 Шаг 1 06 44 55 12 42 94 18 67 Шаг 2 06 44 12 42 55 18 67 94 Шаг 3 06 12 44 18 42 55 67 94 Шаг 4 06 12 18 42 44 55 67 94 Эффективность (n 2 -n(k+ln(n)))/2 Шевченко А. В. Тема 8. Алгоритмы и структуры данных 20

Программирование и основы алгоритмизации Шейкерная сортировка (Shaker. Sort) void Shaker. Sort(PROD* prod, int n) Программирование и основы алгоритмизации Шейкерная сортировка (Shaker. Sort) void Shaker. Sort(PROD* prod, int n) { int L = 1, R = n-1, k = n-1; do { for(int j = R; j >= L; j--) if(prod[j-1]. code > prod[j]. code) { PROD tmp = prod[j-1]; prod[j-1] = prod[j]; prod[j] = tmp; k = j; } L = k+1; for(int j = L; j <= R; j++) if(prod[j-1]. code > prod[j]. code) { PROD tmp = prod[j-1]; prod[j-1] = prod[j]; prod[j] = tmp; k = j; } } R = k-1; } while(L < R) Шевченко А. В. Тема 8. Алгоритмы и структуры данных 21

Программирование и основы алгоритмизации Улучшенный метод сортировки Шелла (Shell. Sort) (сортировка включением с уменьшающимися Программирование и основы алгоритмизации Улучшенный метод сортировки Шелла (Shell. Sort) (сортировка включением с уменьшающимися расстояниями) 44 55 12 42 94 18 06 67 h=4 Шаг 1 44 18 06 42 94 55 12 67 h=2 Шаг 2 06 18 12 42 44 55 94 67 h=1 Шаг 3 06 12 18 42 44 55 67 94 Последовательность расстояний 1, 3, 7, 15, 31. . . Эффективность n 1. 2 Шевченко А. В. Тема 8. Алгоритмы и структуры данных 22

Программирование и основы алгоритмизации Метод быстрой сортировки Хоара (Quick. Sort) (сортировка разделением) 44 55 Программирование и основы алгоритмизации Метод быстрой сортировки Хоара (Quick. Sort) (сортировка разделением) 44 55 12 42 94 18 06 67 Шаг 1 06 18 12 42 94 55 44 67 Шаг 2 06 12 18 42 44 55 94 67 Шаг 3 06 12 18 42 44 55 67 94 Эффективность n*log(n) Шевченко А. В. Тема 8. Алгоритмы и структуры данных 23

Программирование и основы алгоритмизации Пример быстрой сортировки void sort(PROD* prod, int L, int R) Программирование и основы алгоритмизации Пример быстрой сортировки void sort(PROD* prod, int L, int R) { int i = L, j = R; PROD x = prod[(L+R)/2]; do { while(prod[i]. code < x. code) i++; while(x. code < prod[j]. code) j--; if(i <= j) { PROD tmp = prod[i]; prod[i] = prod[j]; prod[j] = tmp; } i++; j--; } while(i <= j); void Quick. Sort(PROD* prod, int n) if(L < j) sort(prod, L, j); { sort(prod, 0, n); if(i < R) sort(prod, i, R); } } Шевченко А. В. Тема 8. Алгоритмы и структуры данных 24