Лабораторная работа 1

advertisement
ЛАБОРАТОРНАЯ РАБОТА №1.
Понятие алгоритма и основы анализа его эффективности
Цель: Изучить основные понятие алгоритма, свойства их.
Задачи:
1. Изучить понятие алгоритма;
2. Изучить свойства алгоритма;
3. Изучение понятия «временная эффективность»;
4. Изучение понятия «размер входных данных».
1. Теоретический материал и примеры выполнения заданий
Понятие алгоритма. Описание алгоритма. Эффективность алгоритма.
Алгоритмом называют упорядоченный набор четко определенных инструкций,
предназначенный для решения некоторой задачи.
Описание алгоритма может быть словесным, пошаговым, графическим в виде
блок-схемы, но наиболее формализованным является описание на псевдокоде, которое
существенно облегчает следующий этап формализации - написание программы.
Алгоритмы обладают следующими свойствами:
1) Корректность
2) Эффективность
3) Простота
4) Универсальность
И др..
Рассмотрим некоторые из них.
Корректность алгоритма подразумевает, что если алгоритм создан для решения
определенной задачи, то для всех исходных данных он должен всегда давать
правильный результат и ни для каких исходных данных не будет получен
неправильный результат. Если хотя бы один из полученных результатов противоречит
хотя бы одному из ранее установленных и получивших признание фактов, алгоритм
нельзя признать корректным. Универсальным методом доказательства корректности
алгоритма считается метод математической индукции. Опишем этот метод на примере
1.
Пример 1. Докажем известную формулу для суммы арифметической прогрессии
первых n чисел.
1+2+…+i+…+n=n(n+1)/2
1 шаг. База индукции. Для n=1 очевидно, что 1=1(1+1)/2.
2 шаг. Предположение. Пусть для n-1 чисел верно, что
1+2+…+i+…+(n-1)=(n-1)((n-1)+1)/2, после упрощения
1+2+…+i+…+(n-1)=(n-1)n/2.
3 шаг. Докажем для произвольного n.
С учетом равенства из предположения на шаге 2
1+2+…+i+…+(n-1)+n)=(n-1)n/2+n, после упрощения
1+2+…+i+…+(n-1)+n=(n2-n+2n)/2 , после упрощения
1+2+…+i+…+(n-1)+n=n(n+1)/2 , ч.т.д.
1
Аналогично доказывается, что в общем случае для n чисел х1, ... , хn,
образующих арифметическую прогрессию сумма равна
n(х1+ хn )/2
Эффективность – это понятие в информатике и теории алгоритмов,
обозначающее функцию зависимости объёма работы, которая выполняется некоторым
алгоритмом, от размера входных данных.
Эффективность бывает пространственная и временная. Пространственная
эффективность алгоритма связана с объемом памяти, а временная – с количеством
базовых операций. Рассмотрим более подробно временную эффективность.
Временная эффективность (трудоемкость) алгоритма определяется как
зависимость количества базовых операций алгоритма от размера входных данных:
t=t(n). К базовым операциям (элементарным действиям), определяющим временну́ю
трудоемкость алгоритма относят операции сравнения и присваивания, сложения и
умножения. Предполагается, что любая элементарная операция требует одну единицу
некоторого условного времени, которая зависит от аппаратной части компьютера.
Рассмотрим пример 2, в котором показано как временная трудоемкость зависит
от количества базовых операций.
Пример 2.
Есть два алгоритма сортировки:
1) Сортировка вставкой сложностью c1*n2
2) Сортировка слиянием сложностью c2*n*log2n
Есть два компьютера:
А) 109 инструкций в сек. для 1 метода
Б) 107 инструкций в сек. для 2 метода
Пусть n=106, c1=2, c2=50
Компьютер А.
Компьютер Б.
Для сортировки 10 миллионов чисел методом
вставки
приблизительно 2,3 дня, а методом слиянием — меньше 20 минут.
потребуется
В примере 3 на рис.1 проход одной итерации цикла i←i+1, if i<=n потребует 3
операции. Покажем это в таблице 1.
Пример 3. Подсчитать количество операций для алгоритма для нахождения
суммы n чисел х1, ... , хn.
Словесное описание алгоритма.
К первому числу последовательно по одному прибавляем все другие числа,
и после прибавления последнего получаем сумму n чисел.
Пошаговое описание.
0 шаг. Пусть S=0, начальное значение суммы.
1 шаг. S=S+ х1 .
2
…………………
i-тый шаг. S=S+ хi
……………………
n-ный шаг. S=S+ хn
S - искомая сумма n чисел.
Описание на псевдокоде (рис.1).
Sum←0;
for i←1 to n do
Sum←Sum + x[i];
Рис.1. Псевдокод алгоритма сложения n чисел
Таблица 1
Расчет количества операций для алгоритма сложения n чисел
Шаг алгоритма
Sum←0
for i←1 to n
Количество операций
умножение
сравнение
сложение
присвоение
1
(в каждой из n итераций цикла)
do Sum←Sum + x[i]
(в каждой из n итераций цикла)
Итого
1*n
1*n
1*n
1*n
1*n
2n
n
1+2n
Можно считать, что общее количество операций для алгоритма сложения n
чисел составляет 5n+1, т.о. t(n)=5n+1.
Рассмотрим пример 4.
Пример 4.
Задача: проверить, есть ли символ х среди символов х1, ... , хn.
i←1;
while (i<=n) and (A[i]<>x)
do i←i+1;
if i<=n then WriteLn('Символ х имеет номер ', i)
else WriteLn('Искомого символа нет’);
Рис.2. Алгоритм линейного поиска вхождения символа в х1, ... , хn.
Размер входных данных задачи.
Размер входных данных определяется для каждой задачи с учетом алгоритма,
выбранного для ее решения.
- в задачах обработки одномерных массивов - количество элементов в массиве;
- в задачах обработки двумерных массивов - количество элементов в массиве или
для векторных алгоритмов количество строк и столбцов массива;
- в задачах обработки чисел (длинная арифметика, проверка на простоту и т.д.) общее число битов, необходимое для представления данных в памяти
компьютера;
- в задачах обработки графов – число вершин графа, число вершин и число ребер
графа, число элементов в матрицах смежности.
2. Задания для выполнения лабораторной работы 1.
3
Задание 1. Используя метод математической индукции, доказать, что n^3+2n делится
на 3.
Задание 2. Оценить размер входных и выходных данных для типовых.
1
Найти сумму чисел: (5,2,4,6,1,3).
2
Найти минимум чисел: (5,2,4,6,1,3).
3
Доказать, что a+b может быть меньшим, чем значение min{a,b}.
4
Доказать, что a*b может быть меньшим, чем значение min{a,b}.
5
Упорядочить по возрастанию: (5,2,4,6,1,3).
6
Вычислить
7
Найти корни
р7(х) = а7х7 + .. + а0
8
Вычислить
р7(х)/g5(x)
9
Найти решение системы трех уравнений с пятью неизвестными.(по числу коэффициентов)
10
р7(х) = а7х7 + .. + а0
Найти решение системы трех уравнений с пятью неизвестными.(по числу строк и столбцов)
Задание 3. Составить таблицу расчета количества операций для перемножения n чисел
Таблица 4
Расчет количества операций для алгоритма перемножения n чисел
Количество операций
Шаг алгоритма
сложение
умножение
сравнение присвоение
P←0
for i←1 to n
(в каждой из n итераций цикла)
do P←P*x[i]
(в каждой из n итераций цикла)
Итого
Задание 4 Составить таблицу расчета количества операций для алгоритма линейного
поиска
Таблица 5
Расчет количества операций для алгоритма линейного поиска
Количество операций
Шаг алгоритма
сложение
умножение
сравнение присвоение
i←1
while (i<=n) and (A[i]<>x)
(в каждой из n итераций цикла)
do i←i+1
(в каждой из n итераций цикла)
if i<=n
then WriteLn('Символ х
имеет номер ', i)
else WriteLn('Искомого
символа нет’)
4
Итого
Задание 5. Прямой подсчет числа базовых операций (присвоения, сложения, множения,
сравнения).Укажите базовые операции и число их выполнения для следующих задач
Найти сумму чисел: (5,2,4,6,1,3).
Найти минимум чисел: (5,2,4,6,1,3).
Решить квадратное уравнение а2х2 + а1х + а0=0
Доказать, что a+b может быть меньшим, чем значение min{a,b}.
Доказать, что a*b может быть меньшим, чем значение min{a,b}.
Упорядочить по возрастанию: (1,2,3,4,5,6).
Упорядочить по убыванию: (1,2,3,4,5,6).
Вычислить р7(х) = а7х7 + .. + а0
2
9. Найти корни р2(х) = а2х + а1х + а0
р4(х) = а4х4 + .. + а0
10. Вычислить
р7(х)/g5(x)
11. Вычислить
12. Найти решение системы трех уравнений с пятью неизвестными.
13. Найти решение системы четырех уравнений с семью неизвестными.
1.
2.
3.
4.
5.
6.
7.
8.
Задание 6. Пусть известно, что трудоемкость алгоритма А для решения задачи
размерности n составляет 8n2 шагов, а для алгоритма В – 64*n*log2n шагов. При каком
значении n число шагов в алгоритме А превысит число шагов в алгоритме В.
Задание 7. Пусть известно, что трудоемкость алгоритма А для решения задачи
n
размерности n составляет 100n2 шагов, а для алгоритма В – 2 шагов. При каком
минимальном значении n алгоритм А работает быстрее, чем алгоритм В (делает
меньшее число шагов).
Задание 8. Для каждого из приведенных ниже алгоритмов определите: 1) естественные
единицы измерения размера входных данных; 2) основную операцию алгоритма; 3)
будет ли изменяться количество основных операций, выполняемых алгоритмом, в
зависимости от используемого набора входных данных одинакового размера.
а) Вычисление суммы n чисел.
б) Вычисление n!.
в) Поиск наибольшего элемента в списке из n чисел.
г) Алгоритм Евклида.
3. Контрольные вопросы лабораторной работы 1.
1. Дайте понятие алгоритма.
2. Какими свойствами обладает алгоритм. Опишите их.
3. Что такое временная эффективность, пространственная
алгоритма.
4. Как определяется размер входных данных.
5
эффективность
Download