Этот алгоритм является более быстрым, чем линейный, но применяетсятолько к упорядоченным массивам. Среднее время дихотомического поиска пропорционально величине log2n, где n — количество элементов таблицы эталонов.
Метод основан на последовательном делении на 2 диапазона поиска. При этом на каждом шаге либо находится элемент, либо происходит переход в одну из половин диапазона. В процессе поиска выполняется не только сравнение на равенство, но и на больше-меньше. Последняя операция позволяет выбрать очередную половину диапазона таблицы. Если массив эталонов не упорядочен, то выбор будет сделан неверно, и результат можно не получить никогда (говорят, что алгоритм расходится).
Общий алгоритм поиска будет таким же, как в п. 18.1, т.е.
1. Ввести два исходных массива слов (таблицу-словарь).
2. Повторять
ввести новое слово и вывести русское
пока не надоест.
3. Закончить.
Для корректности работы алгоритма необходимо упорядочить словарь (массивы слов) по алфавиту. Эта операция выполняется применительно к основному массиву, используемому при поиске — к английским словам.
Уточненный алгоритм можно представить в следующем виде.
1.1. Ввести количество слов в словаре (n).
1.2. Для номера слова (i) от 1 до n выполнить
1.2.1. Ввести Английское_Слово[i].
1.2.2. Ввести Русское_Слово[i].
2. Упорядочить слова по алфивату:
Для номера просмотра (k) от 1 до n - 1 выполнить
Для номера слова (i) от 1 до n - k выполнить
Если Английское_Слово[i] > Английское_Слово[i+1] то
а) поменять местами Английское_Слово[i] и Английское_Слово[i+1];
б) поменять местами Русское _Слово[i] и Русское _Слово[i+1].
3. Повторять
3.2.1. Ввести Слово (для перевода);
3.2.2. Граница_левая (диапазона поиска):= 1;
3.2.3. Граница_правая (диапазона поиска):= n;
3.2.4. Признак:= "Не найдено".
3.2.5. Повторять
а) Номер Русского_Слова (k):= (Граница_левая + Граница_правая)/2;
б) Если Слово = Английское_Слово[i] ТО
Признак:= "Найдено"
Иначе
Если Слово > Английское_Слово[i] ТО
k:= Граница_левая
Иначе
k:= Граница_правая.
Пока не будет "Найдено" Или (Граница_левая = Граница_правая - 1).
3.2.6. Если "Найдено" 0 ТО
вывести Русское_Слово[k]
Иначе
вывести: 'Введенного слова нет в словаре'.
пока не будет Слово = 'End'.
4. Закончить.
Программа дихотомического поиска, соответствующая этому алгоритму, будет иметь вид.