Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Метод оптимизации поиска путем перестановки в начало списка.Содержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте Суть этого метода заключается в том, что элемент списка с ключом, равным аргументу поиска, передвигается на первое место в списке, исходя из предположения, что к этому элементу будут обращаться чаще всего.
Алгоритм перестановки в начало q= nil p = table while (p <> nil) do if key = k(p) then search = p if q = nil then 'перестановка не нужна' return endif nxt(q) = nxt(p) nxt(p) = table table = p return endif q = p p = nxt(p) endwhile search = 0 return Этот алгоритм применим как для списков, так и для массивов. Однако, его не рекомендуется применять для массивов, так как на перестановку элементов массива затрачивается гораздо больше времени, чем на перестановку указателей.
Метод транспозиции при оптимизации поиска. В данном методе найденный элемент переставляется на один элемент к голове списка. И если к этому элементу обращаются часто, то, перемещаясь к голове списка, он скоро окажется на первом месте.
Для реализации данного метода понадобиться уже 3 рабочих указателя р - рабочий указатель
q - вспомогательный указатель, отстает на один шаг от р
s - вспомогательный указатель, отстает на два шага от р
Алгоритм метода транспозиции s = nil q = nil p = table while (p <> nil) do if key = k(p) then ‘ нашли, транспонируем if q = nil then ‘ переставлять не надо return endif nxt(q) = nxt(p) nxt(p) = q if s = nil then table = p else nxt(s) = p search = p endif return endif s =q q = p p = nxt(p) endwhile search = nil return
Этот метод удобен при поиске не только в списках, но и в массивах (так как меняются только два стоящих рядом элемента).
Бинарный поиск
Бинарный поиск (метод деления пополам)
Метод используется только для отсортированных массивов.
Основная идея - выбрать случайно некоторый элемент AM и сравнить его с аргументом поиска Х. Если AM=Х, то поиск закончен; если AM <X, то мы заключаем, что все элементы с индексами, меньшими или равными М, можно исключить из дальнейшего поиска.
Аналогично, если AM >X. Выбор М совершенно произволен в том смысле, что корректность алгоритма от него не зависит. Однако на его эффективность выбор влияет. Ясно, что наша задача - исключить как можно больше элементов из дальнейшего поиска. Оптимальным решением будет выбор среднего элемента, т.е. середины массива. Рассмотрим пример, представленный на рисунке ниже
Допустим необходимо найти элемент с ключом key = 52. Обозначим: low - индекс нижней границы интервала поиска hi - индекс верхней границы интервала поиска mid - индекс середины интервала поиска Алгоритм бинарного поиска low = 1 hi = n while (low <= hi) do mid = (low + hi) div 2 if key = k(mid) then search = mid return endif if key < k(mid) then hi = mid - 1 else low = mid + 1 endif endwhile search = 0 return Согласно алгоритму, в нашем примере первым сравниваемым элементом будет 49. Так как 49<52, то ищем следующую середину среди элементов, расположенных выше 49. Это число 86. 86>52, поэтому теперь ищем 52 среди элементов, расположенных ниже 86, но выше 49. На следующем шаге обнаруживаем, что очередное значение середины равно 52. Мы нашли элемент в массиве с заданным ключом. Количество сравнений при бинарном поиске (эффективность) имеет порядок
О(log2n) Например, n = 1024. При последовательном поиске С = 512, а при бинарном Можно совместить бинарный и индексно-последовательный поиск (при больших объемах данных), учитывая, что последний также используется при отсортированном массиве.
|
||
|
Последнее изменение этой страницы: 2017-02-05; просмотров: 1066; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.119 (0.01 с.) |