Техника частичного каскадирования
Техника частичного каскадирования (англ. fractional cascading technique) — это способ организации структуры данных, который предназначен для быстрого итеративного поиска в
каталогах.
Задача: |
Дано | каталогов , каталог представляет собой упорядоченный массив размера . Поступают запросы, которые представляют собой один элемент . Требуется для каждого запроса определить в каждом каталоге максимальный элемент меньше либо равный .
Различные подходы к решению
Пусть
1) Пусть пришел запрос . Пробежимся по всем каталогам. Пусть мы находимся в -ом каталоге, тогда мы можем ответить на запрос для данного каталога за используя бинарный поиск. Так как каталогов штук, то в итоге мы обработаем запрос за . Для хранения всех каталогов понадобится памяти.
2) Для второго способа построим сбалансированное бинарное дерево поиска их всех элементов всех каталогов. В каждой вершине дерева будет хранится дополнительно кортеж из элементов - максимальных представителей каталогов меньше либо равных ключу вершины. Таким образом такая структура будет занимать на дерево поиска и на дополнительные кортежи.Тогда для ответа на запрос найдем в дереве поиска максимальный ключ меньше либо равный и выведем элементов соответствующего кортежа, итого ответ на запрос производится за .
Итого имеем:
Тип подхода к решению | Необходимая память | Время ответа на один запрос |
---|---|---|
|
|
|
|
|
|
Решение с помощью техники частичного каскадирования
Как будет показано далее, эта техника берет лучшее от подходов к решению этой задачи, что были рассмотрены выше, а именно она требует
Идея данной техники построена на следующем:
1) Мы можем проводить ссылки из каталога номер в -ый каталог таким образом, что разница между элементами соединенными ссылками минимальна, что, очевидно, в некоторых случаях уменьшит время поиска.
2) Мы можем для оптимизации пункта 1 создать модифицированные каталоги , где -ый каталог будет представлять каталог слитый с
Построение
Рассмотрим подробнее построение каталогов
. Введем определения:Определение: |
Подставной элемент — элемент каталога | , который пришел из каталога . А также каталоги будем называть модифицированными каталогами.
Первый этап построения:
: Данный каталог не имеет никаких ссылок и равен .
: Для построения данного каталога будем сливать каталог с каждым вторым элементом каталога . Каждый элемент из каталога оснастим ссылкой на позицию, откуда мы его взяли.
Второй этап построения:
В каждом модифицированном каталоге для каждого элемента заведем две ссылки. Для неподставных элементов это будут ссылки на минимальный подставной элемент больше текущего и на максимальный подставной элемент меньше текущего. И наоборот, если элемент подставной, то ссылки будут на минимальный неподставной элемент больше текущего и на максимальный неподставной элемент больше текущего.
Рассмотрим на процесс построения на примере.
Пусть дано каталогов :
Для наглядности заведем таблицу, где в -ой строке -ая ячейка будет окрашена в зеленый цвет, если она присутствует в каталоге . Тогда результатом построения будет таблица, которая представлена на рисунке (без ссылок из подставных элементов).