Двійковий пошук

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

Загальна стратегія організації дерева полягає у поділі таблиці на підтаблиці, сукупності елементів на підмножини елементів. Тоді процедура пошуку елемента в дереві порівнянь нагадує пошук імені в телефонному довіднику. Для відшукання елемента потрібно спочатку вирішити, в якій підмножині знаходиться елемент, знайти цю підмножину і після цього продовжувати пошук.

12.2.1. Дерева порівнянь на векторній пам‘яті.

Розглянемо спочатку, як можна записати дерево у векторну пам‘ять.

Нехай ключі зберігаються увекторі КЛЮЧ(i;j). Елементи у векторній пам‘яті повинні бути впорядкованими за значенням ключів.

При пошуку певного елемента зробимо коренем дерева вмістиме КЛЮЧ(т), де m = [(і+j)/2]- найбільше ціле, менше або рівне (i+j)/2. Тоді ліве піддерево розміщується у векторі КЛЮЧ(i;m-1), а праве - у векторі KЛЮЧ(m+1;j). Цей процес повторюється, доки не буде знайдений потрібний елемент, тобто доки процес не зійдеться у одній вершині, для якої обидва індекси у векторі КЛЮЧ будуть мати однакові значення.

Тоді алгоритм D пошуку ключа К у векторі КЛЮЧ(і;j) можна записати наступною послідовністю кроків:

Алгоритм D

D0. Ініціалізація індексів і, j.

D1. Повторювати кроки D2 - D5 доти, доки i<j.

D2. Обчислення індекcа кореня дерева: m=[(i+j)/2].

D3. Якщо [КЛЮЧ (m)]= К, то REZ= т, кінець.

D4. Інакше: якщо [ КЛЮЧ (т)] <K,

тo і=т +1 (пошук справа); перехід на D2.

D5. Інакше j=m-1 ( пошукзліва); перехід на D2;

Основна задача полягає у виключенні на кожному кроці з подальшого пошуку як можна більшої кількості елементів. Оптимальним рішенням буде вибір середнього елемента, оскільки при цьому буде виключена половина кількості елементів. Максимальне число порівнянь дорівнює О (log2 n), де n- кількість елементів даних.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: