на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Анализ алгоритмов нечисленной обработки данных
p align="left">По данным таблицы 2 построены графики функции зависимости времени поиска от количества элементов массива (рисунок 2).

Рисунок 1. График результатов линейного поиска

Вывод: Из рисунка 2 видно, что график линейного поиска имеет линейный характер. Теоретическое время незначительно отличается от практического, что означает правильность результатов выполнения линейного поиска.

Данный метод удобен для массивов с малой длиной, но использование его для больших массивов занимает много времени.

5.2 Двоичный поиск

Анализ двоичного поиска был проведен на примере числового одномерного массива длиной в 16, 128, 512, 1024 элементов. В качестве искомых элементов были взяты числа, расположенные в первой, средней, последней и произвольной позициях. Для двоичного поиска теоретическое время поиска определяется по формуле Tтеор.=[время сравнения]Ч log2N

Результаты приведены в таблице, которая приведена ниже.

Таблица 3. Результаты двоичного поиска

Количество элементов массива

16

128

512

1024

Позиция элемента

Искомый элемент

Количество сравнений

Искомый элемент

Количество сравнений

Искомый элемент

Количество сравнений

Искомый элемент

Количество сравнений

Первая

0

4

0

7

0

9

0

10

Средняя

13

1

310

1

156

1

491

1

Последняя

45

4

901

7

491

9

942

10

Произвольная

2

2

80

3

127

7

660

9

Элемент отсутствует

88

4

1001

7

1002

9

1003

10

Среднее количество сравнений

3

5

7

8

Теоретическое значение

4

7

9

10

Ниже приведен график зависимости времени поиска от количества элементов массива.

Рисунок 2. График результатов двоичного поиска

Вывод: Из рисунка 2 видно, что график двоичного поиска имеет логарифмический характер. Теоретическое время незначительно отличается от практического, что означает правильность результатов выполнения двоичного поиска.

Данный метод удобен для массивов с большой длиной, но его использование возможно только в упорядоченных массивах.

5.3 Анализ сортировки деревом

Анализ сортировки деревом был проведен на примере массива длиной в 16, 128, 512, 1024 элементов.

Результаты представлены в виде нижеследующей таблицы.

Таблица 6. Результаты сортировки

Количество элементов в массиве

16

128

512

1024

Количество перестановок

18

130

514

1026

Ниже приведен график сортировки деревом.

Рисунок 3. График сортировки деревом.

Вывод: Организация массива в виде двоичного дерева требует несколько больших затрат как на организацию массива, так и на поиск в нем нужного элемента, чем это минимально необходимо. Впрочем, это увеличение не столь существенно. Этот метод оптимален по порядку роста трудоемкости поиска в зависимости от размера массива.

Сортировка деревом не является минимальной по памяти, так как на построения дерева необходимы большие затраты памяти, но процесс сортировки с помощью данного метода занимает мало времени.

Заключение

В процессе выполнения данного курсового проекта изучены и разработаны алгоритмы нечисленной обработки данных: линейный и двоичный поиск заданного элемента, а также упорядочение массива методом сортировки дерева. Был проведен анализ результатов программы, который подтвердил правильность составления и отладки программы. Для наглядности результатов работы программы построены графики и составлены таблицы.

Список литературы

1. Лорин Г. Сортировка и системы сортировки. М.: Наука, 1983г.

2. Лавров С.С, Гончаров Л.И. Автоматическая обработка данных. Хранение информации в памяти ЭВМ. М.: Наука, 1971г.

3. Попов В.Б. Turbo Pascal. М.: Финансы и статистика, 2007г.

Приложение А

Таблицы идентификаторов

Таблица А.1: Идентификаторы основной программы

Имя параметра

Физический смысл параметра

Тип параметра

n

Длина исходного массива до 1024 элементов

integer

i

Счетчик, индекс элемента массива

integer

j

Счетчик, индекс элемента массива, указатель

integer

x

Искомое число

integer

a

Одномерный числовой массив (исходный массив)

mas=array [1..1024] of integer

b

Двумерный числовой массив, дерево, образованное из исходного массива

mas2=array [1..1024, 1..5] of integer

b1

Двумерный числовой массив, сортируемое дерево

mas2=array [1..1024, 1..5] of integer

F

Текстовый файл для хранения исходного массива

text

F_1

Текстовый файл для хранения отсортированного массива, сортируемого массива после каждой перестановки

text

Таблица А.2: Идентификаторы процедуры VVod

Имя параметра

Физический смысл параметра

Тип параметра

i

Счетчик, индекс элемента формируемого массива

integer

n

Длина формируемого массива

integer

a

Формируемый массив

mas=array [1..1024] of integer

Таблица А.3: Идентификаторы процедуры Vivod

Имя параметра

Физический смысл параметра

Тип параметра

i

Счетчик, индекс элемента выводимого на экран массива

integer

n

Длин массива, выводимого на экран

integer

a

Выводимый на экран массив

mas=array [1..1024] of integer

Таблица А.4: Идентификаторы процедуры Save_To_File

Имя параметра

Физический смысл параметра

Тип параметра

i1

Счетчик, индекс элемента массива, сохраняемого в файл

integer

F

Файл, в который необходимо записывать сортируемый массив после каждой перестановки

text

n

Длина массива

integer

a

Исходный массив, сохраняемый в файл

mas=array [1..1024] of integer

m

Количество перестановок

integer

А.5 Идентификаторы процедуры Lin_Poisk

Имя параметра

Физический смысл параметра

Тип параметра

i

Счетчик, индекс элемента массива

integer

k

Количество сравнений

integer

n

Длина массива

integer

a

Массив, в котором необходимо найти искомый элемент

mas=array [1..1024] of integer

x

Искомый элемент

integer

Таблица А.6 Идентификаторы процедуры Dv_Poisk

Имя параметра

Физический смысл параметра

Тип параметра

sri

Индекс среднего элемента в массиве

integer

k

Количество сравнений

integer

vi

Индекс верхнего элемента в массиве

integer

ni

Индекс нижнего элемента в массиве

integer

n

Длина массива

integer

a

Массив, в котором необходимо найти искомый элемент

mas=array [1..1024] of integer

x

Искомый элемент

integer

f

Флаг нахождения искомого элемента в массиве

boolean

Таблица А.7: Идентификаторы процедуры Tree

Имя параметра

Физический смысл параметра

Тип параметра

i

Счетчик, индекс элемента массива (строка)

integer

j

Счетчик, индекс элемента массива (столбец)

integer

s

Рабочая память, необходимая для хранения значения

integer

k

Индекс элемента в массиве

integer

a

Исходный массив, из которого следует построить дерево

mas=array [1..1024] of integer

n

Длина массива

integer

b

Дерево, полученное из массива A

mas2=array [1..1024, 1..5] of integer

Таблица А.8: Идентификаторы процедуры TreeSort

Имя параметра

Физический смысл параметра

Тип параметра

k

Число вершин дерева

integer

m

Количество перестановок

integer

i1

Счетчик, индекс элемента массива

integer

b

Дерево, полученное из массива

mas2=array [1..1024, 1..5] of integer

b1

Сортируемое дерево

mas2=array [1..1024, 1..5] of integer

a

Отсортированный массив

mas=array [1..1024] of integer

Приложение Б

Текст программы

Program Fariza_Kurs;

uses crt;

type

mas= array [1..1024] of integer;

mas2= array [1..1024, 1..5] of integer;

var n,i,j,x: integer;

a: mas;

b,b1: mas2;

f, f1: text;

Procedure Vvod(n: integer; Var a: mas);

var i: integer;

begin

if n<=16 then

begin

writeln('Vvedite elementy massiva');

for i:=1 to n do read(A[i]);

end

else

for i:=1 to n do

A[i]:=random(1000);

writeln(f,'Ishodnii masssiv');

for i:=1 to n do write(f,a[i]:4);

end;

Procedure Vivod(n: integer; a: mas);

var i: integer;

begin

for i:=1 to n do write(a[i], ' ');

end;

{zapis v fail}

Procedure Save_To_File(var f:text; n: integer; a: mas; m:integer);

var i1: integer;

begin

if n<=16 then

begin

writeln(f,m,'-yi shag:');

for i1:=1 to n do

write(f,A[i1]:4);

writeln(f);

end;

if (n>16) and (m mod 10=0) then

begin

writeln(f,m,'-yi shag:');

for i1:=1 to n do

write(f,A[i1]:4);

writeln(f);

end;

end;

{metod lineinogo poiska}

Procedure Lin_Poisk(n: integer; a: mas; x: integer);

var i,k: integer;

begin

writeln('Metod lineinogo poiska:');

k:=0;

for i:=1 to n do

if a[i]=x then begin k:=i; break;

end;

if k<>0 then Writeln('Element naiden. Sravnenii - ',k)

else writeln('Element ne naiden');

end;

{========metod dvoichnogo poiska ================}

procedure Dv_Poisk(n:integer;a:mas; x:integer);

var k,ni,vi, sri:integer;

f:boolean;

begin

writeln('Metod dvoichnogo poiska:');

vi:=N;

ni:=1;

k:=0;

f:=FALSE;

repeat

sri:=( (ni+vi) div 2);

k:=k+1;

if a[sri] = X then f:=TRUE

else if X > a[sri] then ni:=sri else vi:=sri;

until (k>trunc(ln(n)/ln(2))) or (f=true);

if f=true then writeln('Element naiden, Index= ', sri,'. Sravnenii ',k)

else writeln('Element ne naiden');

end;

{predstavlenie massiva A v vide dereva}

Procedure Tree(a:mas; n: integer; var b: mas2 );

label l;

var i,j,s,k: integer;

begin

b[1,3]:=0;

b[1,4]:=0;

b[1,5]:=0;

for i:=1 to n do begin

b[i,1]:=a[i];

b[i,2]:=a[i];

end;

for i:=2 to n do

begin

k:=1;

l: if b[i,1]<b[k,1] then j:=3 else j:=4;

s:=b[k,j];

if s<>0 then begin

k:=s;

goto l;

end;

b[k,j]:=i;

b[i,3]:=0;

b[i,4]:=0;

b[i,5]:=k;

end;

end;

{sortirovka derevom}

procedure Tree_Sort(b: mas2; var b1: mas2; n: integer);

label l1,l2,l3;

var k,m,i1: integer;

begin m:=0;

for i:=1 to n do

for j:=1 to 5 do

b1[i,j]:=b[i,j];

i:=1;

k:=0;

l1:

if b[i,3]<>0 then

begin

i:= b[i,3];

goto ll;

end;

m:=m+1;

for i1:=1 to n do A[i1]:=b1[i1,1];

savetofile(f1,n,a,m);

l2:

k:=k+1;

b1[k,1]:=b[i,1];

b1[k,2]:=b[i,2];

if b[i,4]<>0 then

begin

i:=b[i,4];

goto ll;

end;

m:=m+1;

for i1:=1 to n do A[i1]:=b1[i1,1];

savetofile(f1,n,a,m);

l3:

j:=i;

i:=b[i,5];

if i<>0 then

begin

if b[i,1]> b[j,1] then goto lm else goto ln;

end;

m:=m+1;

for i1:=1 to n do A[i1]:=b1[i1,1];

savetofile(f1,n,a,m);

writeln('Otsortirovanii massiv');

Vivod(n,a);

readln;

writeln('Kolichestvo perestanovok=',m);

end;

BEGIN

writeln(' VVedite 4islo elementov massiva N<=1024');

readln(n);

assign (f, 'd:\dan.txt');

rewrite(f);

Vvod(n,a);

close(f);

writeln('Ishodnii massiv:');

Vivod(n,a);

{====================lineinii poisk===============}

writeln;

writeln('Vvedite element dla poiska');

readln(x);

LinPoisk(n,a,x);

{========sortirovka============}

assign (f1, 'd:\res.txt');

rewrite(f1);

tree(a,n,b);

Treesort(b,b1,n);

writeln(f1, 'Otsortirovannyi massiv:');

for i:=1 to n do write(f1, A[i]:4);

close(f1);

{========dvoichnii poisk===========}

DvPoisk(n,a,x);

end.

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.