Изменения

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

Rope

54 байта убрано, 23:07, 5 июня 2014
Нет описания правки
===Время работы===
Асимптотика выполнения операции конкатенации двух строк очевидно <tex>\mathrm{O(1)}</tex>.
==Получение символа по индексу==
===Время работы===
Асимптотика выполнения одного такого запроса очевидно <tex>\mathrm{O(h)}</tex>, где <tex>h</tex> {{---}} высота дерева.
==Split==
Чтобы разбить строку на две по некоторому индексу <tex>\mathrm{i}</tex> необходимо спускаясь по дереву (аналогично операции <tex>\mathrm{get}</tex>), каждую вершину на пути поделить на две, каждая из которых будет соответствовать одно из половинок строк, при этом необходимо после деления пересчитать вес этих вершин.
Пускай дано дерево:
===Время работы===
Нетрудно заметить что асимптотическая сложность выполнения данной операции <tex>\mathrm{O(h)}</tex>, где <tex>h</tex> {{---}} высота дерева.
==Операции удаления и вставки==
===Время работы===
Так как данные операции используют только <tex>\mathrm{split}</tex> и <tex>\mathrm{merge}</tex> то асимптотика времени их работы <tex>\mathrm{O(h)}</tex>, где <tex>h</tex> - высота дерева.
==Балансировка==
[[file:Bamboo.png|800px|Пример вырождения дерева в бамбук.]]
Предлагается хранить его как [[АВЛ-дерево]] и делать соответствующие балансировки. Тогда, так как высота АВЛ-дерева <tex>h = \log{n}</tex>, то асимптотика операций <tex> \mathrm{get, split, delete, insert, merge}</tex> будет равна <tex>\mathrm{O(\log{n})}</tex>, где <tex>n</tex> {{---}} количество сконкатенированных строк.
==Оптимизации==
91
правка

Навигация