1313
правок
Irina (обсуждение | вклад) |
KVN (обсуждение | вклад) |
||
| (не показаны 2 промежуточные версии 2 участников) | |||
| Строка 1: | Строка 1: | ||
'''B-деревья без явного задания параметров кэша —''' ''Cache-oblivious B-trees'' | |||
== Ключевые слова и синонимы == | == Ключевые слова и синонимы == | ||
Деревья поиска без явного задания параметров кэша; | [[Деревья поиска без явного задания параметров кэша]]; [[словари без явного задания параметров кэша]] | ||
== Постановка задачи == | == Постановка задачи == | ||
| Строка 6: | Строка 8: | ||
Модель памяти без явного задания параметров кэша, предложенная Фриго и др. [18], изящно обобщает модель ввода-вывода на многоуровневую модель, обладающую следующим свойством: алгоритм не может знать значения B и M. Более точно, алгоритм без явного задания параметров кэша представляет собой алгоритм, формулируемый в рамках RAM-модели, но анализируемый в рамках модели ввода-вывода, причем анализ будет действительным при любых значениях B и M. Предполагается, что замещение содержимого кэша выполняется автоматически при помощи оптимальной автономной стратегии замещения. Поскольку анализ является допустимым при любых значениях B и M, он выполняется для всех уровней одновременно. | Модель памяти без явного задания параметров кэша, предложенная Фриго и др. [18], изящно обобщает модель ввода-вывода на многоуровневую модель, обладающую следующим свойством: алгоритм не может знать значения B и M. Более точно, алгоритм без явного задания параметров кэша представляет собой алгоритм, формулируемый в рамках RAM-модели, но анализируемый в рамках модели ввода-вывода, причем анализ будет действительным при любых значениях B и M. Предполагается, что замещение содержимого кэша выполняется автоматически при помощи оптимальной автономной стратегии замещения. Поскольку анализ является допустимым при ''любых'' значениях B и M, он выполняется для всех уровней одновременно. | ||
| Строка 12: | Строка 14: | ||
== Основные результаты == | == Основные результаты == | ||
Первый словарь без явного задания параметров кэша предложил Прокоп [21], который показал, как расположить статическое бинарное дерево в памяти таким образом, чтобы поиск занимал O( | Первый словарь без явного задания параметров кэша предложил Прокоп [21], который показал, как расположить статическое бинарное дерево в памяти таким образом, чтобы поиск занимал <math>O(log_B \; n)</math> переносов содержимого памяти. Это расположение, часто называемое '''расположением ван Эмде Боаса''' (''Van Emde Boas layout'') из-за того, что оно напоминает классическую структуру данных дерево ван Эмде Боаса (''Van Emde Boas tree, vEB tree''), также гарантирует, что поиск в диапазоне занимает <math>O(log_B \; n + k/B)</math> переносов содержимого памяти [2], где k – размер выходного значения. Обе границы являются оптимальными для поиска на основе сравнения. | ||
| Строка 18: | Строка 20: | ||
'''Теорема 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: | Строка 29: | ||
'''Теорема 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: | Строка 35: | ||
Бендер и др. [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> для поиска на основе сравнения различается в модели ввода-вывода и в модели без явного задания параметров кэша. | ||
== Применение == | == Применение == | ||
| Строка 48: | Строка 50: | ||
== См. также == | == См. также == | ||
* [[B-деревья]] | * [[B-дерево (дерево многоканального поиска)|B-деревья]] | ||
* [[Модель без явного задания параметров кэша]] | * [[Модель без явного задания параметров кэша]] | ||
* [[Сортировка без явного задания параметров кэша]] | * [[Сортировка без явного задания параметров кэша]] | ||
| Строка 97: | Строка 99: | ||
22. Rahman, N., Cole, R., Raman, R.: Optimised predecessor data structures for internal memory. In: Proc. Algorithm Engineering, 5th International Workshop, WAE. LNCS, vol. 2141, pp. 67-78. Springer, Berlin (2001) | 22. Rahman, N., Cole, R., Raman, R.: Optimised predecessor data structures for internal memory. In: Proc. Algorithm Engineering, 5th International Workshop, WAE. LNCS, vol. 2141, pp. 67-78. Springer, Berlin (2001) | ||
[[Категория: Совместное определение связанных терминов]] | |||