Аноним

B-деревья без явного задания параметров кэша: различия между версиями

Материал из WEGA
нет описания правки
Нет описания правки
 
Строка 6: Строка 6:




Модель памяти без явного задания параметров кэша, предложенная Фриго и др. [18], изящно обобщает модель ввода-вывода на многоуровневую модель, обладающую следующим свойством: алгоритм не может знать значения B и M. Более точно, алгоритм без явного задания параметров кэша представляет собой алгоритм, формулируемый в рамках RAM-модели, но анализируемый в рамках модели ввода-вывода, причем анализ будет действительным при любых значениях B и M. Предполагается, что замещение содержимого кэша выполняется автоматически при помощи оптимальной автономной стратегии замещения. Поскольку анализ является допустимым при любых значениях B и M, он выполняется для всех уровней одновременно.
Модель памяти без явного задания параметров кэша, предложенная Фриго и др. [18], изящно обобщает модель ввода-вывода на многоуровневую модель, обладающую следующим свойством: алгоритм не может знать значения B и M. Более точно, алгоритм без явного задания параметров кэша представляет собой алгоритм, формулируемый в рамках RAM-модели, но анализируемый в рамках модели ввода-вывода, причем анализ будет действительным при любых значениях B и M. Предполагается, что замещение содержимого кэша выполняется автоматически при помощи оптимальной автономной стратегии замещения. Поскольку анализ является допустимым при ''любых'' значениях B и M, он выполняется для всех уровней одновременно.




Строка 12: Строка 12:


== Основные результаты ==
== Основные результаты ==
Первый словарь без явного задания параметров кэша предложил Прокоп [21], который показал, как расположить статическое бинарное дерево в памяти таким образом, чтобы поиск занимал O(logB n) переносов содержимого памяти. Это расположение, часто называемое расположением ван Эмде Боаса из-за того, что оно напоминает классическую структуру данных ван Эмде Боаса, также гарантирует, что поиск в диапазоне занимает O(logB n + k/ B) переносов содержимого памяти [2], где k – размер выходного значения. Обе границы являются оптимальными для поиска на основе сравнения.
Первый словарь без явного задания параметров кэша предложил Прокоп [21], который показал, как расположить статическое бинарное дерево в памяти таким образом, чтобы поиск занимал <math>O(log_B \; n)</math> переносов содержимого памяти. Это расположение, часто называемое ''расположением ван Эмде Боаса'' из-за того, что оно напоминает классическую структуру данных ван Эмде Боаса, также гарантирует, что поиск в диапазоне занимает <math>O(log_B \; n + k/B)</math> переносов содержимого памяти [2], где k – размер выходного значения. Обе границы являются оптимальными для поиска на основе сравнения.




Строка 18: Строка 18:




'''Теорема 1 ([10]). Существует структура словаря без явного задания параметров кэша, поддерживающая поиск за O(logB n) переносов содержимого памяти, а вставку и удаление – за амортизированные O(logB n) переносов содержимого памяти.'''
'''Теорема 1 ([10]). Существует структура словаря без явного задания параметров кэша, поддерживающая поиск за <math>O(log_B \; n)</math> переносов содержимого памяти, а вставку и удаление – за амортизированные <math>O(log_B \; n)</math> переносов содержимого памяти.'''




'''Теорема 2 ([10]). Существует структура словаря без явного задания параметров кэша, поддерживающая поиск за O(logB n) переносов содержимого памяти, вставку и удаление – за амортизированные O(logB n + (log 2n)/B) переносов, а поиск в диапазоне – за O(logB n + k/B) переносов, где k – размер выходного значения.'''
'''Теорема 2 ([10]). Существует структура словаря без явного задания параметров кэша, поддерживающая поиск за <math>O(log_B \; n)</math> переносов содержимого памяти, вставку и удаление – за амортизированные <math>O(log_B \; n + (log^2 \; n)/B)</math> переносов, а поиск в диапазоне – за <math>O(log_B \; n + k/B)</math> переносов, где k – размер выходного значения.'''




Строка 27: Строка 27:




'''Теорема 3 ([7, 10]). Существует структура словаря без явного задания параметров кэша, поддерживающая поиск за O(logB n) переносов содержимого памяти, вставку и удаление – за амортизированные O(logB n) переносов, а поиск в диапазоне – за амортизированные O(logB n + k/B) переносов, где k – размер выходного значения.'''
'''Теорема 3 ([7, 10]). Существует структура словаря без явного задания параметров кэша, поддерживающая поиск за <math>O(log_B \; n)</math> переносов содержимого памяти, вставку и удаление – за амортизированные <math>O(log_B \; n)</math> переносов, а поиск в диапазоне – за амортизированные <math>O(log_B \; n + k/B)</math> переносов, где k – размер выходного значения.'''




Строка 33: Строка 33:




Бендер и др. [11], а также Бродал и др. [16] предложили довольно близкие идеи для воспроизведения результата теоремы 2, однако использовали значительно более простые структуры вместо сбалансированных по весам B-деревьев. На базе экспоненциальных деревьев Бендер и др. [8] предложили вариант, поддерживающий запросы и обновления за O(logB n) переносов в худшем случае. Они также предложили решение с частичной устойчивостью, в котором поиск (во всех версиях структуры) и обновление (в последней версии структуры) требовали амортизированные O(logB(m + n)) переносов содержимого памяти, где m – количество версий, а n – количество элементов в версии, находящейся в данный момент в работе. Бендер и др. [14] расширили модель без явного задания параметров кэша на параллельный вариант и сформулировали три предложения по использованию B-деревьев без явного задания параметров кэша в этом варианте. Бендер и др. [12] предложили структуры словаря без явного задания параметров кэша, использующие компромисс между более быстрой операцией вставки и более медленным поиском. Франческини и Гросси [17] показали, как добиться стоимости запросов и обновлений O(logB n) в худшем случае, используя O(1) дополнительной памяти помимо той, что требуется для хранения n элементов. Были представлены расширения словаря на другие типы данных – такие как строки [13, 15] и геометрические данные [3, 4, 6].
Бендер и др. [11], а также Бродал и др. [16] предложили довольно близкие идеи для воспроизведения результата теоремы 2, однако использовали значительно более простые структуры вместо сбалансированных по весам B-деревьев. На базе экспоненциальных деревьев Бендер и др. [8] предложили вариант, поддерживающий запросы и обновления за <math>O(log_B \; n)</math> переносов в худшем случае. Они также предложили решение с частичной устойчивостью, в котором поиск (во всех версиях структуры) и обновление (в последней версии структуры) требовали амортизированные <math>O(log_B (m + n)) \;</math> переносов содержимого памяти, где m – количество версий, а n – количество элементов в версии, находящейся в данный момент в работе. Бендер и др. [14] расширили модель без явного задания параметров кэша на параллельный вариант и сформулировали три предложения по использованию B-деревьев без явного задания параметров кэша в этом варианте. Бендер и др. [12] предложили структуры словаря без явного задания параметров кэша, использующие компромисс между более быстрой операцией вставки и более медленным поиском. Франческини и Гросси [17] показали, как добиться стоимости запросов и обновлений <math>O(log_B \; n)</math> в худшем случае, используя O(1) дополнительной памяти помимо той, что требуется для хранения n элементов. Были представлены расширения словаря на другие типы данных – такие как строки [13, 15] и геометрические данные [3, 4, 6].




Было показано [9], что наилучная возможная мультипликативная константа в границе поиска @(logB n) для поиска на основе сравнения различается в модели ввода-вывода и в модели без явного задания параметров кэша.
Было показано [9], что наилучная возможная мультипликативная константа в границе поиска <math>\Theta(log_B \; n)</math> для поиска на основе сравнения различается в модели ввода-вывода и в модели без явного задания параметров кэша.


== Применение ==
== Применение ==
4430

правок