По разработанным алгоритмам составить программы.

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

Тема: Исследование временных характеристик алгоритмов.

Цель работы: Развитие умений и навыков теоретической и практической оценки временных характеристик алгоритмов.

Выполнение работы

Вариант 1.

Алгоритм линейного поиска. Вход: последовательность n чисел A=<a1,…,an> и число 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 <iostream>

using namespace std;

int main()

{

int i,j=0,v;

const int n=100;

int A[n];

for (i=0; i<n; i++)

A[i]=rand()%10;

cin >> v;

for (i=0; i<n; i++)

if (A[i]==v) cout << i+1

else j++;

if (j==n) cout<<"NIL";

return 0;

}

Асимптотическая сложность алгоритма – O(n). Для списка из n элементов лучшим случаем будет тот, при котором искомое значение равно первому элементу списка и требуется только одно сравнение. Худший случай будет тогда, когда значения в списке нет (или оно находится в самом конце списка), в случае чего необходимо n сравнений.

Если искомое значение входит в список k раз и все вхождения равновероятны, то ожидаемое число сравнений по разработанным алгоритмам составить программы. - student2.ru

Например, если искомое значение встречается в списке один раз, и все вхождения равновероятны, то среднее число сравнений равно по разработанным алгоритмам составить программы. - student2.ru . Однако, если известно, что оно встречается один раз, то достаточно n - 1 сравнений и среднее число сравнений будет равняться по разработанным алгоритмам составить программы. - student2.ru

В любом случае, вычислительная сложность алгоритма O(n).

Наши рекомендации