- •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 просмотров.
Возможны различные модификации этого алгоритма. Так, очередное обращение может осуществляться не в конец блока, а в его начало, т.е. к его первой записи. Последовательный просмотр текущего блока также возможен с его конца или начала.