Лабораторная работа №1
Тема: Исследование временных характеристик алгоритмов.
Цель работы: Развитие умений и навыков теоретической и практической оценки временных характеристик алгоритмов.
Выполнение работы
Вариант 1.
Алгоритм линейного поиска. Вход: последовательность n чисел A= и число v. Выход: индекс i, для которого v=A[i] или NIL, если v не принадлежит А.
Использовать последовательный просмотр при поиске v. Оценить сколько сравнений потребуется алгоритму, если искомым может быть любой элемент массива А (с одинаковой вероятностью). Каково время работы в среднем и в худшем случае? Выразить это время ?-обозначением. При поиске в отсортированном массиве можно сначала сравнивать искомый элемент со средним элементом массива и, узнав в какой из полученных частей массива находится искомый, продолжить поиск рекурсивно (двоичный поиск).
Написать программу двоичного поиска, учтя время на сортировку, с рекурсией. Определить её ?.
Сравнить временные характеристики алгоритмов:
- линейного поиска,
- сортировки с двоичным поиском, представленными циклами,
- сортировки с двоичным поиском, представленными рекурсией.
Для заданных описаний задачи составить указанные алгоритмы ее решения.
Составим линейный алгоритм поиска
алг
нач
конст цел n:=4
цел i,v,j
целтаб A[1:n]
нц для i от 1 до n //вводим последовательность чисел
ввод A[i]
кц
ввод v // вводим с клавиатуры значение v
j:=0
нц для i от 1 до n // проверяем каждый элемент на совпадение с v
если A[i]=v то вывод i // если элемент равен v, то выводим его номер
иначе j:=j+1 // если нет, то увеличиваем счетчик элементом отличных от v
Все
кц
если j=n то вывод NIL
Все
кон
По разработанным алгоритмам составить программы.
Составим программу линейного поиска на языке С++
#include
using namespace std;
int main()
{
int i,j=0,v;
const int n=100;
int A[n];
for (i=0; i
A[i]=rand()%10;
cinv;
for (i=0; i
if (A[i]==v) cout
else j++;
if (j==n) cout
return 0;
}
Асимптотическая сложность алгоритма – O(n). Для списка из n элементов лучшим случаем будет тот, при котором искомое значение равно первому элементу списка и требуется только одно сравнение. Худший случай будет тогда, когда значения в списке нет (или оно находится в самом конце списка), в случае чего необходимо n сравнений.
Если искомое значение входит в список k раз и все вхождения равновероятны, то ожидаемое число сравнений
Например, если искомое значение встречается в списке один раз, и все вхождения равновероятны, то среднее число сравнений равно . Однако, если известно, что оно встречается один раз, то достаточно n — 1 сравнений и среднее число сравнений будет равняться
В любом случае, вычислительная сложность алгоритма O(n).
Статьи к прочтению:
Программирование. Как составить алгоритм для программы?
Похожие статьи:
-
Линейные алгоритмы и программы
Цель работы: 1. Построение схемы линейного алгоритма; 2. Изучение структуры программ на языке TurboPascal 3. Использование оператора присваивания. 4….
-
Принципы разработки алгоритмов и программ для решения прикладных задач
ОПЕРАЦИОНАЛЬНЫЙ ПОДХОД В настоящее время создание алгоритмов — написание программ для электронных вычислительных машин — стало видом человеческой…