Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции_ по алгоритм и структуре.doc
Скачиваний:
56
Добавлен:
07.08.2019
Размер:
1.34 Mб
Скачать

5. 2. Двоичный поиск

При отсортированных данных может использоваться двоичный метод поиска.

При таком поиске используется метод "разделяй и властвуй". Сначала производится проверка среднего элемента. Если его ключ больше ключа требуемого элемента, то делается проверка для среднего элемента из первой половины.

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

Например, для поиска числа 4 в массиве 1 2 3 4 5 6 7 8 9 сначала делается проверка среднего элемента, которым является число 5.

Поскольку этот элемент больше 4, поиск будет продолжен в первой половине массива, т.е. среди чисел 1 2 3 4 5. Здесь средним элементом является 3. Это значение меньше 4 и поэтому первая половина не будет больше рассматриваться и поиск продолжается среди чисел 4 5. На следующем шаге нужный элемент будет найден.

При двоичном поиске число сравнений в худшем случае равно log n. Для среднего случая это значение будет несколько лучше, а в лучшем случае оно равно единице.

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

Пример программы

function BSearch (item: DataArray; count:integer;

key:DataItem):integer;

var

low, high, mid: integer;

found:boolean;

begin

low:=1; high:=count;

found:=false; { не найден }

while (low<=high) and (not found) do

begin

mid:=(low+high) div 2;

if key<item[mid] then high:=mid-1

else if key>item[mid] then low:=mid+1

else found:=true; { найден }

end;

if found then BSearch:=mid

else BSearch:=0; { не найден }

end; { конец поиска }

5. 3. Индексно-последовательный поиск

При индексно-последовательном поиске организуется две таблицы:

  • таблица данных со своими ключами (упорядоченная по возрастанию)

  • таблица индексов, которая тоже состоит из ключей данных, но эти ключи взяты из основной таблицы через определен­ный интервал (рис. 5.3).

Сначала производится последовательный поиск в табли­це индексов по заданному аргументу поиска. Затем проходим ключ, который оказался меньше заданного и устанавливаем нижнюю границу поиска в основной таб­лице - low, а затем - верхнюю – hil на которой (kind > key).

Например, key = 101.

Поиск идет не по всей таблице, а от low до hi.

рис. 26 – индексно-последовательный поиск

Эффективность индексно-последовательного по­иска

Если считать равновероятным появление всех случаев, то эффективность поиска можно рассчитать следующим образом:

Например, m = n/р, где т - размер индекса; р - размер шага, тогда

Q = (n+1)/2 + (р+1)/2 = (n/р+1)/2 + (р+1)/2 = n/2р+р/2+1

Продифференцируем Q по р и приравняем производную к нулю:

dQ/dp=(d/dp) (n/2p+p/2+]) = -n/2р2 + 1/2 = 0

Следовательно р2 = n; Ропт =

Подставив ропт в выражение для Q, получим следую­щее количество сравнений:

Порядок эффективности индексно-последовательного поиска О ( )

Методы оптимизации поиска

Существует некоторая вероятно­сть поиска того или иного элемента в таблице. Пусть в таблице данный элемент существует. Тогда вся таблица по­иска может быть представлена как система с дискретными состояниями, а вероятность нахождения искомого эле­мента - p(i), т.е i - го состояния системы.

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

Z=Q=1p(l)+2p(2)+3p(3) +... +nр(n)

Желательно, чтобы р(1)≥р(2)≥р(3) ≥...≥р(п) – это минимизирует количество сравнений и увели­чивает эффективность.

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