Реализовать в среде Maple и на языке С++ функции работы в соответствии с вариантом, представленном в таблице. В качестве структуры данных использовать целочисленный массив.
№
п/п
Описание функции
Варианты
Примечание
1.
Вставка элементов в неупорядоченный массив (Insert)
+
+
+
+
+
+
+
+
+
+
2.
Удаление заданного элемента из массива (Delete)
+
+
+
+
+
+
+
+
+
+
3.
Линейный поиск заданного элемента (Search)
+
+
+
+
+
+
+
+
+
+
4.
Вывод содержимого массива (Display)
+
+
+
+
+
+
+
+
+
+
5.
Сортировка методом «пузырька» (SortBuble)
+
c. 89 [1]
6.
Сортировка методом выбора (SortSelect)
+
c. 98 [1]
7.
Сортировка методом вставки (SortInsert)
+
c. 104 [1]
8.
Функция MaxSubSum1
+
Лекция
9.
Функция
MaxSubSum2
+
Лекция
10.
Функция
MaxSubSum3
+
Лекция
11.
Функция
MaxSubSum4
+
Лекция
12.
Двоичный поиск в упорядоченном массиве (BinarySearch)
+
с. 67 [1]
13.
Исключение из массива всех повторяющихся элементов (DoubleClean)
+
14.
Удаление из массива всех элементов, не являющихся простыми (ToPrime)
+
Литература:
1. Лафоре Р. Структуры данных и алгоритмы в Java. Классика Computer Science. 2-е изд. – СПб.: Питер, 2011., стр 67-68, 87-116.
2. Матросов А.В. Maple6. Решение задач высшей математики и механики. – СПб.: БХВ-Петербург, 2001. – стр.106-134, 273-339
Лабораторная работа № 2
«Оценка вычислительной сложности алгоритмов».
Цель работы: знакомство с элементами теории сложности и освоение методов оценки вычислительной сложности алгоритмов
Теоретические сведения
Сложность алгоритма определяется вычислительными мощностями, необходимыми для его исполнения. Вычислительную сложность алгоритма обычно определяют двумя параметрами Т (временная сложность) и S (пространственная сложность или требования к памяти ). Параметры Т и S выражают как функции от n, где n – размер входных данных, подлежащих обработке.
Вычислительную сложность алгоритма выражают через символ «О большое», указывающий порядок вычислительной сложности. Оценка вычислительной сложности наглядно показывает, как объём входных данных влияет на требования в времени выполнения и объёму памяти. Алгоритмы классифицируют в соответствии с их временной и пространственной сложностью (таблица 2).
Таблица 2 Классификация алгоритмов по сложности
№
п/п
Класс
Сложность
Число операций при n=106
1.
Постоянные
O (1)
2.
Линейные
O (n)
106
3.
Квадратичные
O (n2)
1012
4.
Кубические
O (n3)
1018
5.
Логарифмические
O (nLog(n))
108
6.
Экспоненциальные
O (2n)
10301030
На рисунке 1 построены графики, соответствующие классам алгоритмов № 2-4.
Рисунок 1 Функции времени выполнения алгоритмов № 2–6
На практике приближенная оценка времени выполнения программ основывается на использовании следующих правил:
1. Правило сумм. Пусть Т1(n) и Т2(n) – время выполнения двух программных фрагментов P1 и P2 , Т1(n) имеет степень роста O(f(n)), a Т2(n) – O(g(n)). Тогда время последовательного выполнения фрагментов P1 и P2 имеет степень роста O(max(f(n) ,g(n))). Чаще всего данное правило используется для оценки времени выполнения последовательности операторов.
2. Время выполнения операторов присваивания, чтения и записи обычно имеет порядок O (1).
3. Правило произведений. Время выполнения циклов вычисляется, как произведение количества выполненных итераций цикла на наибольшее возможное время операторов тела цикла.
4. Рекурсивная функция имеет порядок O (nLog(n)).
Порядок выполнения работы
1. Для выполнения работы использовать функцию f(n), реализованную в ходе выполнения лабораторной работы №1 (функции № 5-14).
2. В соответствии с правилами, представленными выше оценить порядок вычислительной сложности О (f(n)).
3. Реализовать программу на С++ и в пакете Maple, которая «засекает» время выполнения функции f(n), при этом каждый раз осуществляя увеличение объема обрабатываемых данных на приращение k.
4. C помощью программы разработанной п. 3 провести серию экспериментов и получить экспериментальную зависимость Tf(n)(n) для функций выбранной в п. 1 и построить график этой зависимости.
5. Произвести сопоставление эмпирических и теоретических данных. Сделать выводы о проделанной работе.
Приложение 1: Вид графического интерфейса и исходный текст программы к лабораторной работе №2
Приложение №1
Вид графического интерфейса и исходный текст программы
к лабораторной работе №2
Рисунок 2 Вид программы, осуществляющей оценку вычислительной сложности алгоритма