2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Подсчёт инверсий при помощи RB-tree с длиной ветки
Сообщение04.07.2011, 13:46 
Здравствуйте.

Поскажите, пожалуйста, как при помощи красно-чёрных деревьев (+ к каждой вершине хранить длину дерева, в котором эта вершина корень, ясно, что это и так восстанавливается, но для быстродейтвия, т.к. в процессе построения за этим добром уследить несложно) посчитать количество инверсий во входном массиве (из которого и было сделано это дерево) за время $O(n \cdot lgn)$. Задача из книги Кормен "Алгоритмы, построение и анализ".

Я так понимаю, считается, что дерево уже построено. Доступ к первоначальному массиву закрыт. Но только мне кажется, что тогда массив неоднозначно восстанавливается (отсюда не следует, конечно, что кол-во инверсий тоже неоднозначно восстанавливается).
По крайней мере в обычном дереве поиска он восстанавливается неоднозначно. (Пример: Вставить: 1, 2, 3, 5, 4, 9 и Вставить: 1, 2, 3, 5, 9, 4 получаются одинаковые деревья, а даже и кол-во инверсий в исходных массивах разные)

И тогда второй вопрос: можно ли в RB tree однозначно восстановить изначальный массив? Если нет, то, может, можно добавить какое-то дополнительное поле каждому элементу, и тогда можно будет?

Спасибо.

 
 
 [ 1 сообщение ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group