МЕНЮ:
Аналитик | Постановщик задач | Проектировщик | Программист | Программист БД
Инженер по тестированию | Тестировщик | Инженер по документированию
Инженер по внедрению | Инженер поддержки | Менеджер проекта | Менеджер подразделения
Менеджер по продажам | Менеджер по маркетингу | Администратор | Администратор БД
Литература | Контакты
\

Книга Жемчужены творчества программистов на IT БАЗАР

В. Дан словарь английских слов. Найдите все наборы анаграмм. Например, pots, stop и tops являются анаграммами по отношению друг к другу, так как каждое слово может быть образовано из другого перестановкой букв.
2.2. ВЕЗДЕСУЩИЙ ДВОИЧНЫЙ ПОИСК
Я задумываю целое число от 1 до 100, а вы его угадываете. 50? Слиш­ком мало. 75? Слишком много. И так игра продолжается до тех пор, пока вы не угадаете мое число. Если мое число было задумано в диапа­зоне от 1 до N, тогда вы угадаете его 3alog„N попыток. Если N = 1000, будет сделано 10 попыток, а если N= 1 000 000, вам потребуется не более 20 попыток.
Этот пример иллюстрирует метод, который позволяет решить мно­жество задач программирования, он называется двоичный поиск. В начальный момент мы знаем, что объект находится в заданной облас­ти, а операция выбора и проверки значения "сообщает" нам, где нахо­дится объект - в заданной позиции, ниже или выше ее. При двоичном поиске местоположение объекта обнаруживается с помошью повторяю­щегося выбора элемента из середины текущей области. Если выбранный элемент не тот, который мы ищем, делим текущую область пополам и продолжаем. Мы остановимся, если найдем то, что искали, или область станет пуста.
Наиболее простым примером применения двоичного поиска в прог­раммировании является поиск элемента в упорядоченном массиве. При поиске числа 50 алгоритм делает следующие попытки:
26
26
31
31
32
38
38
41
43
50
53
58
59
79
97
} f Т Т
Рис. 2.1
3 4
Бытует мнение, что программу двоичного поиска тяжело написать без ошибок. Подробно мы изучим ее в гл. 4.
При последовательном поиске выполняется в среднем около N/2 сравнений, если таблица содержит N элементов, в то время как при двоичном поиске никогда не выполняется более log2N сравнений. Это может привести к существенному различию в эффективности системы. Вот типичная история, взятая из июльского номера журнала "Communi­cations of the ACM" за 1404 г., где приведен анализ "Системы резервиро­вания TWA".
У нас была программа, осуществлявшая примерно 100 раз/с линей­ный поиск для очень большого объема данных. В связи с ростом сети среднее время работы процессора, затрачиваемое на обработку
22


Страница №23
*
Зайцев нет
© "IT БАЗАР", 2003. Все права защищены. Создание: © "z-group" студия веб-дизайна, 2003.
Также может поискать работу на прямую в следуйщих организациях:
IT БАЗАР