Изменения

Перейти к: навигация, поиск

Деревья Эйлерова обхода

1507 байт добавлено, 00:55, 31 декабря 2016
Добавление ребра
[[Файл:Link11.png |thumb|400px|center]]
Пусть хотим добавить ребро <tex>\{Для добавления ребра (c, g\} \</tex>):В эйлеровом обходе *Выберем любое вхождение вершины c в эйлеров обход T1.*Разрежем эйлеров обход T1 на 2 части:*: A1 - часть обхода до выбранного вхождения вершины c.*: A2 - часть обхода после выбранного вхождения вершины c.*Аналогично, выберем любое вхождение вершины g в эйлеров обход T2 и разрежем его на 2 части B1 и B2.*Соберем результирующий эйлеров обход в порядке A1 B2 B1 A2. Чтобы быстро находить место, где разрезать эйлеровы обходы деревьев T1 и T2, будем хранить эйлеровы обходы в двоичных деревьях поиска. Ключом вершины, для построения дерева поиска, будет время посещения этой вершины эйлеровым обходом.Для каждой вершины дерева (T1, T2) будем хранить указатель на вершину в дереве поиска, которая соответствует вхождению вершины дерева в эйлеров обход. Тогда за O(1) переходим от вершины дерева к вершине дерева поиска, по которой за O(log n) можно будет разделить дерево поиска на 2 части.
===Разрезание ребра===
Анонимный участник

Навигация