Реферат: Создание эффективной реализации сортированного списка с использованием generics

Таким образом можно убить сразу двух зайцев – сохранить скорость поиска и резко увеличить скорость вставки.

B+-деревья

Когда объем группировок начал подходить к миллионам записей, этот алгоритм начал «тормозить» из-за увеличения размера массива верхнего уровня. Проблемы с копированием больших объемов данных вернулись. Чтобы избавиться от этой проблемы, можно применить тот же самый механизм, и разбить массив верхнего уровня на несколько подмассивов. Это приведет к созданию трехуровневого массива, а когда-нибудь, возможно, и четырехуровневого. Так что в принципе есть резон сразу создавать универсальный алгоритм, автоматически увеличивающий количество уровней и строящий дерево. Структура этого дерева включает страницы двух типов – узловые, содержащие массивы ссылок на нижележащие страницы, и листовые, содержащие отсортированные списки данных. Такое дерево называется B+-деревом. Однако разбирать подробно реализацию B+-деревьев в этой статье я не буду.

Реализация двухуровневого массива

На практике в большинстве случаев достаточно двухуровневых массивов. К тому же, их намного проще описывать. Они используют те же подходы, что и в Б+-деревьях. Так что рассмотрим реализацию именно двухуровневых массивов.

Вначале нужно определить структуру, которая будет хранить пары ключ + значение (для листовых страниц) и ключ + ссылка на страницу (для узловых страниц). В принципе, ссылку можно рассматривать как частный случай данных. Так что с помощью generic-ов можно описать единую структуру. Вот эта структура:

internal struct KeyValuePair<K, V>

{

internal K Key;

internal V Value;

public KeyValuePair(K key, V value)

{

Key = key;

Value = value;

}

}

Определим класс PageBase, с единственным полем Count.

internal class PageBase

{

public int Count;

}

Описание страницы, находящейся на нулевом уровне:

internal class LeafPage<K, V> : PageBase

{

public KeyValuePair<K, V>[] PageItems; // массивэлементов

public LeafPage<K, V> PriorPage; // ссылканапредыдущуюстраницу

public LeafPage<K, V> NextPage; // ссылка на следующую страницу

public LeafPage()

{

Count = 0;

PageItems = new KeyValuePair<K, V>[BTConst.MaxCount];

К-во Просмотров: 517
Бесплатно скачать Реферат: Создание эффективной реализации сортированного списка с использованием generics