SlideShare a Scribd company logo
1 of 29
Анализ комбинаторных
алгоритмов
Лекция №6
Элементарные
структуры данных
Часть IV
Порядковые деревья
 Порядковым называется красно-черное
дерево, каждая вершина которого, помимо
обычной информации имеет поле в котором
хранится размер поддерева (не считая NULL-
листьев) с корнем в x (size).
 Считая что размер поддерева листа равен 0
можно написать следующее соотношение:
x->size = x->left->size + x->right->size +1
Порядковые деревья
11
4
14
2
15
1
2
4
1
1
7
9
5
2
8
1
4
1
void OTSelect(x,i){
r = x->left->size+1;
if(i==r) return x;
else if(i<r)
return OTSelect(x->left,i);
else
return OTSelect(x->right,
i-r);
}
Порядковые деревья
void OTRank(root, x){
r = x->left->size+1;
y = x;
while (y!=root){
if(y==y->parent->right);
r=r + y->parent->left->size+1;
y = y->parent;
}
return r;
}
Порядковые деревья
 Для того чтобы при балансировке
дерево продолжало оставаться
порядковым в процедуру вращения
необходимо и достаточно добавить
строки:
y->size = x->size;
x->size = x->left->size+x->right->size +1;
42
19
93
12
α
β γ
42
11
93
19
α
β
γ
Левое
вращение
Порядковые деревья
 Порядковые деревья позволяют осуществлять
операции доступа к элементу по данному
индексу и получения индекса по данному
элементу за время O(log(n)).
 Порядковые деревья хороши для реализации
разреженных массивов.
B-Деревья
B-деревом называется корневое дерево в котором
 Каждая вершина содержит поля хранящие
 количество ключей хранящихся в ней(n);
 сами ключи (с доп. инф.) в неубывающем порядке;
 булевское значение (leaf), истинное когда вершина
является листом
 Если x – внутренняя вершина, то она содержит
n+1 указателей на детей.
B-Деревья
 Ключи служат границами, разделяющими
значения ключей в поддеревьях.
 Все листья находятся на одной и той же
глубине (равной высоте дерева)
 Число ключей в одной вершине ограничено
сверху и снизу. Обычно ограничение задают
одним числом t. Каждая вершина (кроме
листьев) содержит по меньшей мере t-1 ключ,
но не более 2t-1 ключей (полная вершина).
B-Деревья
M
Q T XD H
B C F G V WR SN PJ K L Y Z
2-3-4 дерево
B-Деревья
Теорема.
Для всякого дерева высотой h и
минимальной степени t, хранящего n>1
ключей выполняется неравенство:
2
1
log
+
≤
n
h t
B-Деревья. Основные операции.
void BTreeSearch(x,k){
i = 1;
while ((i <= x->n)&&(k>x->key[i]))
i = i+1;
if ((i<=x->n)&&(k==x->key[i]))
return (x, i);
if (x->leaf) return null;
else return BTreeSearch(x->child[i],k);
}
B-Деревья. Основные операции.
// x-неполная, y-полная
void BTreeSplitChild(x, i , y){
z = NewNode(); z ->leaf = y->leaf; z->n = t-1;
for (j=1; j<t; j++) z->key[j] = y->key[j+t];
if (! y->leaf)
for(j=1; j<=t; j++) z->child[j]=y->child[j+t];
y->n = t-1;
for(j=x->n+1;j>=i+1;j--)
x->child[j+1] =x->child[j];
x->child[i] = z;
for(j=x->n; j>=i; j--) x->key[j+1] = x->key[j];
x->key[i]=y->key[t]; x->n = x->n+1;
}
B-Деревья. Основные операции.
… N W …
P Q R S T U V T U V
… N S W …
P Q R
B-Деревья. Основные операции.
void BTreeInsert(root , k){
r = root;
if (r->n == 2t-1){
s = NewNode();
root = s; s->leaf = false;
s->n = 0; s->c[1] = r;
BTreeSplitChild(s.1.r);
BTreeInsertNonFull(s,k);
}
else BTreeInsertNonFull(r,k);
}
B-Деревья. Основные операции.
void BTreeInsertNonFull(x , k){
i = x->n;
if (x->leaf){
while ((i>=1)&&(k<x->key[i])){
x->key[i+1] = x->key[i]; i--;}
x->key[i+1] = k; x->n = x->n+1; }
else{
while((i>=1)&&(k<x->key[i])) i--;
i++;
if(x->child[i]->n == 2*t-1) {
BTreeSplitChild(x,i,x->child[i]);
if (k>x->key[i]) i--; }
BTreeInsertNonFull(x->child[i],k); };
}
B-Деревья. Основные операции.
G M P X
A C D E J K R S T U VN O Y Z
B-Деревья. Основные операции.
G M P X
A B C D E J K R S T U VN O Y Z
B-Деревья. Основные операции.
G M P T X
A B C D E J K Q R SN O Y ZU V
B-Деревья. Основные операции.
G M
A B C D E J K L Q R SN O Y ZU V
P
T X
B-Деревья. Основные операции.
C G M
A B J K L Q R SN O Y ZU V
P
T X
D E F
B-Деревья. Основные операции.
При удалении вершины из B-дерева возможны
следующие случаи:
 Если k находится в вершине x являющейся
листом – удаляем k из x.
B-Деревья. Основные операции.
C G M
A B J K L Q R SN O Y ZU V
P
T X
D E
- F
B-Деревья. Основные операции.
 Если k в внутренней вершине x, то:
 Если ребенок y вершины x, предшествующий k,
содержит не менее t элементов, то находим k`,
непосредственно предшествующий k. Он
находится в листе поддерева с корнем в y. Удаляем
k` (рекурсивный вызов), заменяем ключ k на k`.
 Если ребенок z, следующий за k, сдержит не менее
t элементов, поступаем аналогично.
 Если y и x содержат по t-1 элементов, тогда
соединяем y, z и k. Удаляем k (рекурсивный вызов).
B-Деревья. Основные операции.
C G L
A B J K Q R SN O Y ZU V
P
T X
D E
- M
B-Деревья. Основные операции.
C L
A B D E J K Q R SN O Y ZU V
P
T X
- G
B-Деревья. Основные операции.
 Если x внутренняя вершина, но k в ней нет,
найдем среди ее детей корень поддерева в
котором должен лежать искомый ключ. Если
корень содержит не менее t детей, то вершину
можно удалить рекурсивно, иначе надо
предварительно сделать один из
дополнительных шагов.
B-Деревья. Основные операции.
 Если вершина (корень поддерева) содержит t-1
элемент, но один из ее соседей (ближних братьев)
содержит t элементов, тогда добавим в вершину
элемент вершины x разделяющий соседей, а в
вершину x поместим самый правый(левый) элемент
соседа.
 Если оба соседа содержат t-1 элементов, тогда
объединим вершину с одним из соседей.
B-Деревья. Основные операции.
C L P T X
A B E J K Q R SN O Y ZU V
- D
B-Деревья. Основные операции.
C L P T X
A E J K Q R SN O Y ZU V
- B

More Related Content

What's hot

Функция y = x^2 и её график
Функция y = x^2 и её графикФункция y = x^2 и её график
Функция y = x^2 и её график
Formula.co.ua
 
Разбор заданий В8 ЕГЭ по математике
Разбор заданий В8 ЕГЭ по математикеРазбор заданий В8 ЕГЭ по математике
Разбор заданий В8 ЕГЭ по математике
Eza2008
 
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Nikolay Grebenshikov
 
Лекция 2: АВЛ-деревья (AVL trees)
Лекция 2: АВЛ-деревья (AVL trees)Лекция 2: АВЛ-деревья (AVL trees)
Лекция 2: АВЛ-деревья (AVL trees)
Mikhail Kurnosov
 
практика 15
практика 15практика 15
практика 15
student_kai
 
Алгоритмы и структуры данных осень 2013 лекция 6
Алгоритмы и структуры данных осень 2013 лекция 6Алгоритмы и структуры данных осень 2013 лекция 6
Алгоритмы и структуры данных осень 2013 лекция 6
Technopark
 
Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5
Technopark
 

What's hot (20)

Функция y = x^2 и её график
Функция y = x^2 и её графикФункция y = x^2 и её график
Функция y = x^2 и её график
 
Функции
ФункцииФункции
Функции
 
Разбор заданий В8 ЕГЭ по математике
Разбор заданий В8 ЕГЭ по математикеРазбор заданий В8 ЕГЭ по математике
Разбор заданий В8 ЕГЭ по математике
 
Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)
 
Лекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиЛекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировки
 
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
 
Функциональное программирование.Списки. Функции высших порядков
Функциональное программирование.Списки. Функции высших порядковФункциональное программирование.Списки. Функции высших порядков
Функциональное программирование.Списки. Функции высших порядков
 
Лекция 2: АВЛ-деревья (AVL trees)
Лекция 2: АВЛ-деревья (AVL trees)Лекция 2: АВЛ-деревья (AVL trees)
Лекция 2: АВЛ-деревья (AVL trees)
 
эскизирование графиков
эскизирование графиковэскизирование графиков
эскизирование графиков
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
 
практика 15
практика 15практика 15
практика 15
 
Урок математики "Графики функций y=ах2+n и y=а(х-m)2"
Урок математики "Графики функций y=ах2+n и y=а(х-m)2"Урок математики "Графики функций y=ах2+n и y=а(х-m)2"
Урок математики "Графики функций y=ах2+n и y=а(х-m)2"
 
Алгоритмы и структуры данных осень 2013 лекция 6
Алгоритмы и структуры данных осень 2013 лекция 6Алгоритмы и структуры данных осень 2013 лекция 6
Алгоритмы и структуры данных осень 2013 лекция 6
 
L6: Метод опорных векторов
L6: Метод опорных векторовL6: Метод опорных векторов
L6: Метод опорных векторов
 
Лекция 7 Элементарные структуры данных часть 5
Лекция 7 Элементарные структуры данных часть 5Лекция 7 Элементарные структуры данных часть 5
Лекция 7 Элементарные структуры данных часть 5
 
Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5
 
L3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессияL3: Линейная и логистическая регрессия
L3: Линейная и логистическая регрессия
 
Tablicy istinnosti
Tablicy istinnostiTablicy istinnosti
Tablicy istinnosti
 
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
 
Лекция 4 Элементарные структуры данных часть 2
Лекция 4 Элементарные структуры данных часть 2Лекция 4 Элементарные структуры данных часть 2
Лекция 4 Элементарные структуры данных часть 2
 

Viewers also liked

Viewers also liked (10)

Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1
 
Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1
 
Лекция 1 Скорость роста функций
Лекция 1 Скорость роста функцийЛекция 1 Скорость роста функций
Лекция 1 Скорость роста функций
 
Лекция 15 Поиск подстрок
Лекция 15 Поиск подстрокЛекция 15 Поиск подстрок
Лекция 15 Поиск подстрок
 
Мобильные Сервисные Службы
Мобильные Сервисные СлужбыМобильные Сервисные Службы
Мобильные Сервисные Службы
 
Лекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмыЛекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмы
 
Лекция 10 NP-полнота
Лекция 10 NP-полнотаЛекция 10 NP-полнота
Лекция 10 NP-полнота
 
Лекция 11 Приближенные алгоритмы
Лекция 11 Приближенные алгоритмыЛекция 11 Приближенные алгоритмы
Лекция 11 Приближенные алгоритмы
 
Лекция 8 Динамическое программирование
Лекция 8 Динамическое программированиеЛекция 8 Динамическое программирование
Лекция 8 Динамическое программирование
 
Лекция 2 Сортировки, поиск и порядковые статистики
Лекция 2 Сортировки, поиск и порядковые статистикиЛекция 2 Сортировки, поиск и порядковые статистики
Лекция 2 Сортировки, поиск и порядковые статистики
 

Similar to Лекция 6 Элементарные структуры данных часть 4 (6)

03 двоичные деревья поиска и очередь с приоритетами
03 двоичные деревья поиска и очередь с приоритетами03 двоичные деревья поиска и очередь с приоритетами
03 двоичные деревья поиска и очередь с приоритетами
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
 
Обработка текста на Haskell - это просто!
Обработка текста на Haskell - это просто!Обработка текста на Haskell - это просто!
Обработка текста на Haskell - это просто!
 
4 b stepennye fukcii
4 b stepennye fukcii4 b stepennye fukcii
4 b stepennye fukcii
 
Функциональное программирование - Александр Алексеев
Функциональное программирование - Александр АлексеевФункциональное программирование - Александр Алексеев
Функциональное программирование - Александр Алексеев
 
Лекция 9: Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 9: Декартовы деревья (Treaps, дучи, дерамиды)Лекция 9: Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 9: Декартовы деревья (Treaps, дучи, дерамиды)
 

Лекция 6 Элементарные структуры данных часть 4