НИКИТИН А. Е.

Научный руководитель – А. В. ТРУСОВ

Московский инженерно-физический институт (государственный университет)


АЛГОРИТМ ПОСТРОЕНИЯ ДЕРЕВА ОПТИМАЛЬНОГО ПОИСКА

Исследуется проблема построения дерева оптимального поиска для вершин с весами. Предлагается эвристический алгоритм для решения задачи.

При попытке построения дерева полным перебором количество различных деревьев поиска для заданного числа вершин n растет экспоненциально. ирт [1] отмечает немаловажное свойство оптимальных деревьев поиска: каждое их поддерево оптимально, что позволяет сразу же сократить затраты по количеству операций до Алгоритм решения, описанный Д. Кнутом [2], сокращает эти затраты до по количеству операций и по затратам памяти. Однако данные алгоритмы могут быть неприемлемы для действительно больших n (порядка десятков тысяч). Возникает потребность в более эффективных алгоритмах.

Алгоритм, предложенный Ху и Таккером, предусматривает точное решение упрощенной задачи. В решении не учитывается частота поиска ключевых слов, то есть фиксируются только неудачные попытки поиска. Оценки алгоритма – по количеству операций и по затратам памяти.

Другой подход заключается в решении задачи приближенными, эвристическими методами, не упрощая ее постановку. К подобным решениям относится алгоритм Уолкера и Готлиба, основанный на нахождении "центра тяжести" исходного набора ключей с соответствующими весами. Оценка сложности данного алгоритма аналогична оценке для алгоритма Ху и Таккера.

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

НЕ нашли? Не то? Что вы ищете?

Идея алгоритма заключается в следующем: для каждой вершины вычисляется величина

               (1)

где

       ,                (2)

а функция должна отражать структуру левого и правого поддеревьев при выборе i-ой вершины в качестве корня. Примем за среднюю высоту идеально сбалансированного дерева из k вершин. Выберем оптимальную корневую вершину по минимальному значению :

               (3)

и повторим данную процедуру для левого и правого поддеревьев -ой вершины. Несмотря на, казалось бы, существенное пренебрежение при определении , сравнение с точным алгоритмом при малом количестве вершин показало отклонение величины взвешенной длины пути в среднем не более чем на 1%.

Существует предложение о расширении алгоритма на случай, учитывающий неудачные поиски. Для этого расширим множество ключей следующим образом: , с нечетными индексами соответствуют псевдоключи неудачных поисков с соответствующими им количествами запросов. По формуле (3) теперь ищем только среди четных i. Эффективность такого подхода по сравнению с другими методами, однако, пока должным образом не исследована.

В данный момент ведется работа по проверке эффективности алгоритма при большом (несколько сотен) и очень большом (тысячи и десятки тысяч) количестве вершин. Также проводится теоретическая оценка максимального отклонения взвешенной длины пути для дерева, построенного по предложенному алгоритму, от оптимального.

Литература


Н. Вирт Алгоритмы и структуры данных – Невский диалект, СПб, 2001. Knuth D. A. Optimum Binary Search Trees. – Acta Informatica, 1, №1(1971), 14-25.