- •1.Введение
- •2.Архитектура машинной памяти
- •3.Адресация основной памяти
- •4.Три уровня представления данных.
- •5.Внутренняя структура записи
- •6.Операции над структурами данных и типы структур данных.
- •7.Последовательное представление данных в памяти эвм.
- •8.Связанное представление данных в памяти эвм.
- •9.Способ хранения, основанный на преобразовании ключа записи в ее адрес.
- •10.Массивы
- •11.Стек.
- •12.Очередь.
- •13.Таблица
- •14.Основные понятия сортировки.
- •15.Основные принципы сортировки
- •16.Сортировка методом выбора
- •17.Сортировка методом обмена (метод пузырька)
- •18.Сортировка методом вставок
- •19.Сортировка методом подсчета (в отсутствии и при наличии одинаковых ключей)
- •20.Сортировка методом Шелла
- •21.Внешняя сортировка.
- •22. Основные принципы информационного поиска
- •23.Последовательный поиск
- •24.Ускоренный последовательный поиск
- •25.Двоичный поиск
- •26.Блочный поиск
- •27.Поиск по двоичному дереву
24.Ускоренный последовательный поиск
Процедура последовательного поиска в неупорядоченном массиве может быть несколько ускорена.
Любой алгоритм поиска содержит блок проверки на окончание массива. Проверка обычно осуществляется всякий раз перед обращением к очередной записи. Однако проверка на окончание массива может осуществляться при каждом сравнении. Для этого в конец массива включается (N+1)-я фиктивная запись с ключом, равным искомому. Тогда проверка на окончание массива осуществляется лишь при совпадении аргумента поиска со значением ключа текущей записи. Если эта запись находится внутри массива, то поиск заканчивается удачно и нужная запись считается найденной. Если же эта запись оказалась (N+1)-ой, то поиск считается неудачным, т.е. нужной записи нет в массиве.
Последовательный поиск в неупорядоченном массиве потребует меньше времени, если для массива организован общий справочник. Так как объем справочника существенно меньше объема основного массива, то и поиск в нем будет происходить быстрее.
25.Двоичный поиск
Двоичный
поиск, или, как его еще называют, бинарный
или дихотомический поиск, является
одним из самых быстрых. Первое обращение
происходит к записи, расположенной в
середине массива, упорядоченного по
возрастанию значений ключей записей.
После сравнения ключа записи с аргументом
поиска определяется, к какой части
массива следует обращаться дальше. Если
значение ключа записи больше значения
аргумента поиска, то следующее обращение
осуществляется к записи, расположенной
в середине первой части массива. В
противном случае обращение происходит
к записи, расположенной во второй части
массива. Указанная процедура повторяется
для
и т.д. массива до тех пор пока не будет
найдена искомая запись или не станет
пустым интервал, в котором осуществляется
поиск.
Недостаток в том, что между каждыми двумя обращениями необходимо выполнять вычисления для определения адреса или номера следующей записи, которую следует читать.
Чтобы
найти нужную запись в массиве в среднем
требуется
сравнений. В худшем случае
ПРИМЕР
t=10
2 4 6 8 10 12
[1] [2] [3] [4] [5] [6]
26.Блочный поиск
Блочный
поиск состоит в том, что массив
упорядоченный по возрастанию значений
ключа записей, разбивается на определенное
число блоков. Для поиска потребуется
наименьшее время, если число блоков
равно
.
Здесь
- общее число записей в массиве. Число
записей в блоке при этом также равно
.
В процессе поиска аргумент поиска сравнивается последовательно с последними записями блоков. Если при сравнении оказывается, что значение аргумента поиска меньше, чем ключ последней записи очередного блока, то ключи всех записей этого блока последовательно сравниваются с аргументом поиска. При нахождении нужной записи она передается на дальнейшую обработку. Если нужная запись не найдена, то в алгоритме можно предусмотреть выдачу сообщения о неудачном окончании поиска.
Число записей в последнем блоке массива может оказаться не равным числу записей в остальных блоках, поэтому поиск элемента в последнем блоке (его последовательный просмотр) удобно описывать отдельным алгоритмом.
Для
нахождения нужной записи требуется
сравнений. В худшем случае
сравнений. Худшим окажется тот случай,
когда нужная запись оказывается в
последнем блоке и занимает в нем первую
позицию (при последовательном просмотре
этого блока с конца) или последнюю
позицию (при последовательном просмотре
этого блока с начала). В массиве из 10 000
записей при этом потребуется 199 просмотров.
Возможны различные модификации этого алгоритма. Так, очередное обращение может осуществляться не в конец блока, а в его начало, т.е. к его первой записи. Последовательный просмотр текущего блока также возможен с его конца или начала.
