Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

4 курс / Практика / Лабораторная работа №2 по дисциплине ТП

.pdf
Скачиваний:
10
Добавлен:
17.04.2015
Размер:
396.89 Кб
Скачать

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

«Поиск»

При выполнении любого рода вычислений часто требуется решать задачу поиска, заключающуюся в решении вопроса о соответствии данных,

содержащихся в некоторой записи информационного массива,

установленному критерию выдачи. Запрос на поиск формализуется заданием аргумента поиска. Поиск записи с определенным признаком называется одноаспектным; если аргумент поиска представляет собой перечень признаков, поиск является многоаспектным.

1.2.1. Виды информационного поиска

Поиск по совпадению

Аргумент содержит наименование одного или нескольких признаков. В

процессе поиска из информационного массива выделяют записи, значения полей с наименованиями из аргумента поиска которых равны значениям полей из аргумента поиска.

Поиск по интервалу

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

Поиск по выражению

Аргумент представляет собой арифметическое или теоретико-

множественное выражение или формулу булевой алгебры. Операндами являются имена признака. В процессе поиска выполняются необходимые

3

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

Используемые при таком поиске критерии выдачи называются логическими.

1.2.2. Методы поиска

Различают последовательный и ускоренный поиск. Блочный и двоичный методы ускоренного поиска применяют только для упорядоченных информационных массивов с записями фиксированной длины, находящихся в оперативной памяти. Поиск по двоичному дереву может применяться к массивам с записями переменной длины.

Метод последовательного перебора (2.а)

Заключается в последовательном просмотре информационного массива и сравнении каждого элемента массива с элементом поиска. Среднее число обращений для информационного массива длины N – N/2, в худшем случае будет осуществлено N обращений. Может применяться для неупорядоченных массивов данных.

Двоичный поиск (2.б)

Текущий элемент сравнивается с аргументом поиска. Если значение аргумента поиска меньше текущего элемента, исходной считается последовательность от первого элемента до элемента с номером N/2, иначе если значение аргумента поиска больше текущего элемента – последовательность от элемента с номером N/2 до N. В целом, осуществляется последовательное деление пополам интервала поиска до тех пор, пока не будет найден искомый элемент или длина последовательности не станет равной единице.

Блочный поиск (2.в)

Исходная последовательность разбивается на блоки. Поиск осуществляется за два просмотра. Во время первого просмотра аргумент

4

поиска сравнивается со значениями последних записей блоков. Если не будет получено значение, превосходящее аргумент поиска, результат поиска – отрицательный, иначе осуществляется второй просмотр, который проводится в найденном блоке в направлении от последней к первой записи в блоке.

Практика показывает, что N является лучшим количеством блоков для N

записей. В среднем требуется N сравнений, в худшем случае – 2 N

сравнений.

Поиск по двоичному дереву (2.г)

Осуществляется в соответствии с принципами, по которым построено дерево поиска (см. п. 1.1.1). Первое обращение производится в корень. Если текущий элемент (из узла дерева, в начале – из корня) меньше аргумента,

следующим будет рассматриваться правое поддерево; если текущий элемент больше аргумента, следующим будет рассматриваться левое поддерево; если при попытке осуществить переход по левой или правой обнаруживается, что ссылка отсутствует, результат поиска является отрицательным. Наименьшее число сравнений, требующееся при поиске в двоичном сбалансированном дереве, log2N.

Хеширование (2.д)

По значению аргумента поиска вычисляется адрес требуемой записи в информационном массиве. Это соответствует вычислению значения некоторой заранее выбранной функции (которая называется хеш-функцией), аргументом которой является ключ поиска. Например, если в некотором массиве хранятся фамилии студентов и рейтинговые оценки, и фамилия является ключевым полем, к ней может быть применена хеш-функция, вычисляемая как сумма кодов составляющих ее символов. Для реализации одного из способов

(первого способа) хеширования вначале по исходному массиву следует создать хеш-таблицу. Записи размещаются в соответствии с адресами

(индексами), получаемыми при преобразовании соответствующих ключевых полей посредством хеш-функции. Если в результате применения хеш-функции

5

к различным ключам получились одинаковые адреса (индексы) записей, ко второму и последующим ключам следует применять процедуру повторного хеширования. Другой способ хеширования состоит в том, что записи массива организуются в виде набора односвязных списков. Адрес каждого списка является результатом применения функции хеширования к одному или нескольким ключам. В каждом списке последовательно хранятся записи,

имеющие одинаковые значения результатов преобразования ключей в адреса.

Многоаспектный поиск с использованием инверсных массивов (2.е)

Данные хранятся во внешней памяти. Среди записей выделяют поля, по которым может быть осуществлен запрос на многоаспектный поиск. Пусть имеется m таких полей. Создается m копий информационного массива, каждая из которых сортируется по одному из m ключевых полей и называется инверсным массивом. Для осуществления поиска по аргументу, состоящему из m ключей, в каждой из копий информационного массива проводится поиск по соответствующему ключевому полю. Над полученными m множествами записей проводится операция теоретико-множественного пересечения.

Ускоренный поиск, основанный на использовании общего справочника (2.ж)

Общий справочник может создаваться на основе неупорядоченного массива, содержащего записи фиксированной или переменной длины. В нем для каждой записи основного массива создается одна справочная запись,

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

определяющий адрес записи в информационном массиве. Статьи в справочнике упорядочиваются по значениям ключа. Поиск реализуется одним из методов ускоренного поиска (двоичный – 2.ж.1, блочный – 2.ж.2) в

справочнике, по полученному указателю происходит выбор требуемой записи из информационного массива. При пополнении информационного массива происходит пополнение справочника, при условии сохранения упорядоченности.

6

Ускоренный поиск, основанный на использовании единого справочника (2.з)

Информационный массив упорядочивается, делится на блоки. Каждый блок содержит заданное количество записей. Каждому блоку в едином справочнике соответствует статья, содержащая поле ключа и поле указателя.

Поле указателя содержит адрес первой записи в блоке. Поле ключа – значение ключа последней записи этого блока. Поиск осуществляется в два этапа,

аналогично описанному выше блочному поиску, за исключением того, что просмотр блока начинается с его первой записи. При большом объеме информационного массива единый справочник может оказаться настолько велик, что потребуется также разбить его на блоки, создав справочник следующего, второго уровня. Создание справочников выше третьего уровня не является целесообразным. Оптимальный размер блока одноуровнего справочника равен квадратному корню из количества записей массива.

7

2. Лабораторная работа №2 "Программирование алгоритмов ускоренного поиска информации"

Цель работы

Приобретение навыков реализации алгоритмов программного поиска в информационных массивах.

Задание

Написать программу, реализующую один из алгоритмов программного поиска данных в информационном массиве, расположенном в оперативной памяти (по желанию, можно считывать данные из файла)

Варианты:

Номер варианта

Задание №1

Задание №2

 

 

 

1, 11, 21

2.а

2.ж

 

 

 

2, 12, 22

2.б

2.з

 

 

 

3, 13, 23

2.в

2.д

 

 

 

4, 14, 24

2.г

2.е

 

 

 

5, 15, 25

2.а

2.ж

 

 

 

6, 16, 26

2.б

2.з

 

 

 

7, 17, 27

2.в

2.д

 

 

 

8, 18, 28

2.г

2.е

 

 

 

9, 19, 29

2.а

2.ж

 

 

 

10, 20, 30

2.в

2.з

 

 

 

8

Контрольные вопросы

1.Виды информационного поиска.

2.Методы поиска.

Содержание отчета

1.Титульный лист.

2.Задание соответствующее варианту.

3.Цель работы.

4.Краткие теоретические сведения.

5.Формализованный алгоритм.

6.Листинг программы.

7.Контрольный пример.

8.Выводы по работе.

Библиографический список

Кнут, Д. Э. Искусство программирования, том 3. Сортировка и поиск / Д. Э. Кнут. – М.: "Вильямс", 2000. – 832 с.

Ахо, А. В. Структуры данных и алгоритмы / А. В. Ахо, Дж. Хопкрофт,

Дж. Д. Ульман. – М.: "Вильямс", 2000. – 384 с.

Кондратьева, С. Д. Введение в структуры данных / С. Д. Кондратьева. –

М.: Изд-во МГТУ им. Н.Э. Баумана, 2000. – 376 с.

Макконнелл, Дж. Основы современных алгоритмов / Дж. Макконнелл. –

М.: Техносфера, 2004. – 368 с.

9