4551
правка
Irina (обсуждение | вклад) |
Irina (обсуждение | вклад) Нет описания правки |
||
Строка 6: | Строка 6: | ||
Модель памяти без явного задания параметров кэша, предложенная Фриго и др. [18], изящно обобщает модель ввода-вывода на многоуровневую модель, обладающую следующим свойством: алгоритм не может знать значения B и M. Более точно, алгоритм без явного задания параметров кэша представляет собой алгоритм, формулируемый в рамках RAM-модели, но анализируемый в рамках модели ввода-вывода, причем анализ будет действительным при любых значениях B и M. Предполагается, что замещение содержимого кэша выполняется автоматически при помощи оптимальной автономной стратегии замещения. Поскольку анализ является допустимым при любых значениях B и M, он выполняется для всех уровней одновременно. | Модель памяти без явного задания параметров кэша, предложенная Фриго и др. [18], изящно обобщает модель ввода-вывода на многоуровневую модель, обладающую следующим свойством: алгоритм не может знать значения B и M. Более точно, алгоритм без явного задания параметров кэша представляет собой алгоритм, формулируемый в рамках RAM-модели, но анализируемый в рамках модели ввода-вывода, причем анализ будет действительным при любых значениях B и M. Предполагается, что замещение содержимого кэша выполняется автоматически при помощи оптимальной автономной стратегии замещения. Поскольку анализ является допустимым при ''любых'' значениях B и M, он выполняется для всех уровней одновременно. | ||
Строка 12: | Строка 12: | ||
== Основные результаты == | == Основные результаты == | ||
Первый словарь без явного задания параметров кэша предложил Прокоп [21], который показал, как расположить статическое бинарное дерево в памяти таким образом, чтобы поиск занимал O( | Первый словарь без явного задания параметров кэша предложил Прокоп [21], который показал, как расположить статическое бинарное дерево в памяти таким образом, чтобы поиск занимал <math>O(log_B \; n)</math> переносов содержимого памяти. Это расположение, часто называемое ''расположением ван Эмде Боаса'' из-за того, что оно напоминает классическую структуру данных ван Эмде Боаса, также гарантирует, что поиск в диапазоне занимает <math>O(log_B \; n + k/B)</math> переносов содержимого памяти [2], где k – размер выходного значения. Обе границы являются оптимальными для поиска на основе сравнения. | ||
Строка 18: | Строка 18: | ||
'''Теорема 1 ([10]). Существует структура словаря без явного задания параметров кэша, поддерживающая поиск за O( | '''Теорема 1 ([10]). Существует структура словаря без явного задания параметров кэша, поддерживающая поиск за <math>O(log_B \; n)</math> переносов содержимого памяти, а вставку и удаление – за амортизированные <math>O(log_B \; n)</math> переносов содержимого памяти.''' | ||
'''Теорема 2 ([10]). Существует структура словаря без явного задания параметров кэша, поддерживающая поиск за O( | '''Теорема 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( | '''Теорема 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( | Бендер и др. [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], что наилучная возможная мультипликативная константа в границе поиска | Было показано [9], что наилучная возможная мультипликативная константа в границе поиска <math>\Theta(log_B \; n)</math> для поиска на основе сравнения различается в модели ввода-вывода и в модели без явного задания параметров кэша. | ||
== Применение == | == Применение == |
правка