Как придумать потенциал суммы логов
Давайте рассмотрим алгоритм BST который для каждого доступа к элементу x переставляет только элементы в пути поиска P из x, называемого before-path, в некоторое дерево, называемое after-tree. Для любого элемента а , пусть с ( ) и с ' ( ) быть размером поддерева с корнем в до и после перегруппировки соответственно. Таким образом, s ( a ) и s ′ ( a ) могут отличаться, если a ∈ PAИкспИксaс ( а )s'( а )aс ( а )s'( а )a ∈ P .
Кроме того, A только постоянно переставляет множество элементов в пути поиска в любой момент. Давайте назовем этот тип алгоритма «локальным» алгоритмом. Например, Splay Tree является локальным. Зигзаг, зигзаг и зигзаг перестраивает не более 3 элементов одновременно.
Теперь любой локальный алгоритм, который создает «много» листьев в последующем дереве, например, Splay Tree, имеет следующее приятное свойство.
Мы можем создать отображение такое, чтое: P→ P
- Линейно много , где s ′ ( f ( a ) ) ≤ s ( a ) / 2 .a ∈ Ps'( е( а ) ) ≤ с ( а ) / 2
- Постоянно много , где s ′ ( f ( a ) ) может быть большим, но тривиально не более na ∈ Ps'( е( а ) )N .
- Другие элементы , s ′ ( f ( a ) ) ≤ s ( a ) .a ∈ Ps'( е( а ) ) ≤ с ( а )
Мы можем увидеть это, развернув изменение пути поиска. Отображение на самом деле вполне естественно. Эта статья, Глобальный Геометрический Вид Splaying , точно показывает детали того, как увидеть вышеприведенное наблюдение.
Зная этот факт, очень естественно выбрать потенциал суммы логов. Потому что мы можем использовать потенциальное изменение элементов типа 1 для оплаты всей перестановки. Более того, для элементов другого типа мы должны платить за потенциальное изменение не более чем логарифмически. Следовательно, мы можем получить логарифм амортизированной стоимости.
Я думаю, что причина, по которой люди думают, что это «черная магия», заключается в том, что предыдущий анализ не «раскрывает» общее изменение пути поиска и позволяет увидеть, что действительно происходит за один шаг. Вместо этого они показывают изменение потенциала для каждого «локального преобразования», а затем показывают, что эти потенциальные изменения могут быть волшебным образом телескопированы.
PS В статье даже показано некоторое ограничение потенциала суммы логарифмов. То есть можно доказать выполнимость леммы доступа с помощью потенциала суммы логарифмов только для локального алгоритма.
Интерпретация суммы сумм бревен
Есть еще один способ определить потенциал BST в статье Георгакопулоса и МакКларкина, который по сути совпадает с потенциалом суммы логарифмов в статье Слеатора Тарьяна. Но это дает мне хорошую интуицию.
Теперь я переключаюсь на обозначения бумаги. Мы присваиваем вес каждому узлу u . Пусть W ( u ) - сумма веса поддерева u . (Это просто размер поддерева u , когда вес каждого узла равен единице.)W ( U )UW( и )UU
Теперь, вместо того, чтобы определять ранг на узлах, мы определяем ранг для ребер, который они называют фактором прогресса .
р ф( е ) = журнал( W( и ) / Вт( v ) ) .
S
Φ ( S) = ∑e ∈ Sр ф( д ) .
( U , V )UvW( и ) / Вт( v )
Заметьте, что это почти равный потенциал Слеатора Тарьяна, и он аддитивен на путях.
редактировать: оказывается, что это альтернативное определение и интуиция за ним были описаны давно Kurt Mehlhorn. См. Его книгу «Структуры данных и алгоритмы», том I, раздел III. 6.1.2 Splay Trees, стр. 263 - 274.