Изменения

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

СНМ с операцией удаления за О(1)

12 байт добавлено, 22:57, 13 июня 2014
Расширение структуры данных
=== Расширение структуры данных ===
Расширим [[СНМ_(реализация_с_помощью_леса_корневых_деревьев)|лес корневых деревьев]] следующим образом:
* Разделим понятия '''вершина дерева''' и '''элемент множества''':
** '''вершиной дерева''' назовем объект, содержащий ссылки <tex>next</tex>, <tex>prev</tex> и <tex>head</tex> (где необходимо) для каждого из вышеперечисленных списков, а так же ссылку на соответствующий вершине '''элемент множества''';
** '''элемент множества''' {{---}} объект, содержащий значение элемента и ссылку на соотв. '''вершину дерева'''.
Это нововведение, очевидно, позволит нам менять элементы в дереве местами за <tex>O(1)</tex>.
<br />
* Для каждой вершины дерева, не являющейся листом, будем хранить двусвязный список <tex> \mathrm{C_{list}} </tex> ее детей. Будем считать, что дети упорядочены по направлению списка слева направо.
* Для корня каждого дерева храним двусвязный список <tex> \mathrm{NL_{list}} </tex> его детей, не являющихся листьями.
* Для каждого дерева (включая поддеревья) храним циклический двусвязный список <tex> \mathrm{DFS_{list}} </tex> его вершин, располагаемых в порядке обхода в глубину, начиная с левой вершины.
* Разделим понятия '''вершина дерева''' и '''элемент множества''': ** '''вершиной дерева''' назовем объект, содержащий ссылки <tex>next</tex>, <tex>prev</tex> и <tex>head</tex> (где необходимо) для каждого из вышеперечисленных списков, а так же ссылку на соответствующий вершине '''элемент множества''';** '''элемент множества''' - объект, содержащий значение элемента и ссылку на соотв. '''вершину дерева'''.<br />Последнее нововведение, очевидно, позволит нам менять элементы в дереве местами за <tex>O(1)</tex>. <br />Первые Эти три нововведения необходимы для нахождения листа в дереве (как оказывается, это гораздо более нетривиальная задача)<br/><br/>
Введем также следующие определения:
116
правок

Навигация