Изменения

Перейти к: навигация, поиск
Анализ реализации с ранговой эвристикой
{{Теорема
|statement=
Амортизационная стоимость <tex> \mathrm{get} = \mathrm{O(\log^{*}an)} </tex>
|proof=
Рассмотрим некоторое число <tex> x </tex>.
Разобьем наши ребра на три класса:
#Ведут в корень или В процессе выполнения каждой из операций <tex>get</tex> двигаемся вверх по одному из деревьев, заканчивая поиск в сына корняего корне.#Заметим, что на каждом шаге ранг вершины строго возрастает: если <tex> \mathrm{R(P(v))u} \geqslant x^{</tex> - вершина, встретившаяся на пути поиска, а <tex>\mathrm{R(v)}}</tex>.#Все остальные. Обозначим эти классы - следующая вершина, то есть <tex> T_1, T_2, T_3 \mathrm{v} = \mathrm{P(v)} </tex>. Амортизационная стоимость  <center>, то <tex>S = {\sum_{\mathrm{get}R(v)} \limits} ({leqslant \sum_mathrm{v:v \in R(u)}</tex>. Вершина <tex>\mathrm{getu}</tex> может неоднократно встречаться в путях поиска,v \in T_1} \limits 1}+{\sum_{vпри выполнении рассматриваемой в теореме последовательности операций. При этом за ней могут идти разные вершины:v \in если в некоторый момент за <tex>\mathrm{get},v \in T_2u} \limits 1} + {\sum_{v: \in </tex> будет следовать уже не <tex>\mathrm{get},v \in T_3} \limits 1} ) / b </tex>,</center>где а корень дерева, то есть вершина большего ранга, чем <tex> {v \in \mathrm{get} v} </tex> означает.Наблюдая за ростом ранга при переходе от вершины к её родителю, отдельно оценим количество шагов, при которых ранг сильно растет, что реброа количество шагов, начало которого находится когда он растет не сильно. Выберем в качестве границы некоторую функцию <tex> v \mathrm{B(k)}</tex>, было пройдено во время выполнения текущего определенную для неотрицательных целых <tex> \mathrm{getk} </tex>. Ребро Мы предполагаем, что функция <tex> v \mathrm{B}</tex> эквивалентно вершине, в которой оно начинается. В силу того, является монотонно возрастающей и что <tex>{\sum_{v:v \in \mathrm{get},v \in T_1B(k)} \limits 1} = leqslant \mathrm{O(1)k} </tex> получаем: <center>при всех <tex>S = \mathrm{O(1)k} + {\sum_{</tex>. При переходе от вершины <tex>\mathrm{get}u} </tex> к её родителю <tex>\limits} ~ {\sum_mathrm{v:v \in } = \mathrm{get},P(v \in T_2)} \limits} 1</b+ {\sum_{tex> ранг сильно растет сильно растет, если <tex> \mathrm{get}R(v)} \limits} ~ {\sum_{v:v \in geqslant \mathrm{getB(R(u))}</tex>. Оценим число шагов,v при которых ранг не сильно растет, и сгруппируем их по вершинам, из которых этот шаг делается. Для вершины ранга <tex>\in T_3mathrm{k} \limits} 1 </ btex> ранги ее предка могут меняться от </tex>.\mathrm{k+1}</centertexВо время до <tex> \mathrm{getB(k)} </tex> (после прохождения этого ранг растет сильно). Значит, число таких шагов(из данной вершины ранга <tex>K\mathrm{k}</tex> ребер из второго класса ) заведомо не больше <tex> \mathrm{RB(v_1k)} </tex>, поскольку каждый новый шаг ведёт в вершину большего ранга, чем предыдущий. Поскольку вершин ранга <tex>\geqslant x^mathrm{xk}</tex> не более <tex>n/2^{.^{.^{.^{x^{R(v)}}}}}k} </tex>. Из выше сказанного и первого следствия второго утверждения получаем, что:то общее число шагов, при которых ранг не сильно растет, не превосходит
<center>
<tex> {\sum_{v:v \in \mathrm{getk},v \in T_2} \limits} {\leqslant dfrac {n \mathrm{\log^*_xB(\log_2ak)} = } {2^{\mathrm{O(\log^*a)k}}}}}</tex>.
</center>
 Для того, чтобы Если выбрать функцию <tex> \mathrm{\log^*_x(\log_2a)B} </tex> существовал необходимотак, чтобы ряд <tex> x > e ^{ 1 /e } \approx 1,44 </tex>.  Рассмотрим сумму<center> <tex>{\sum_{\mathrm{get}} \limits} ~ {\sum_{v:v \in n \mathrm{get},v \in T_3} \limitsB(k)} 1/b < {\sum_2^{\mathrm{getk}} \limits} ~ {\sum_{v:v \in </tex> сходился, то общее число шагов такого рода есть <tex>\mathrm{get},v \in T_3} \limitsO(n)} 1/a </tex>. </center> Из первого утверждения и в силу использования сжатия путей следует,что Прежде чем выбрать функцию <tex> \mathrm{RB(P(x)k)}</tex> cтрого увеличивается , выясним, как оценить число шагов, при переходе которых ранг сильно растет. Такие шаги мы сгруппируем не по вершинам, а по ребру из путям: на каждом пути поиска таких шагов мало, так как ранг не может многократно сильно расти(он меняется всего лишь от <tex>0</tex> и <tex> T_3 \log n</tex>)Как максимум через Таким образом, на каждом пути число шагов, при котором ранг сильно растёт, не превосходит числа итераций функции <tex> x^{\mathrm{R(k)}B} </tex> переходов ребро перестанет появляться в классе , которые нужно сделать, чтобы дойти от <tex> T_3 0</tex>. и <centertex>\log n</tex>.{\sum_{Если положить <tex>\mathrm{getB(k)}} \limits}~ {\sum_= 2^{v:v \in \mathrm{get},v \in T_3k} \limits} 1</a = {tex>: тогда число итераций будет примерно равно <tex>\sum_v \limits ~\sum_mathrm{O(\mathrmlog^{get*}n)}: in ~ this ~ </tex>. Но тогда написанный выше ряд расходится. Возьмем меньшую функцию. Например, положим <tex>\mathrm{getB(k)} ~ v \in T_3} \limits } = 1/a \leqslant \sum_v \limits x,9^{\mathrm{R(v)k}} /a</tex>.</center> Из второго следствия второго утверждения следует:<center> , тогда ряд <tex> {\sum_{} \limits \mathrm{getB(k)}= 1,9^{\mathrm{k} \limits}~ /2^{\sum_{v:v \in \mathrm{get},v \in T_3k} \limits} 1/a \leqslant \sum_{Rank=0}^{\log_2a} \limits {\dfrac mathrm{axB(k)} = (1,9^{Rank\mathrm{k}} {+1)/2^{Rank} a\mathrm{k}}</tex>сходится.С другой стороны, число итераций функции <tex>\mathrm{B}</centertexПри , которые нужно сделать, чтобы от <tex> x < 2~0</tex>:<center>дойти до какого-то числа, возрастет(по сравнению с функцией <tex>{\sum_{\mathrm{get}} \limits}~ {\sum_{v:v \in \mathrm{getk}</tex>,v \in T_3} \limits} 1/a\leqslant\sum_{Rank=0}^{\log_2a} \limits {\dfrac {x^{Rank}} {стремящейся к <tex>2^{Rank}}}\leqslant\sum_mathrm{Rank=0}^\infty \limits {\dfrac {x^{Rank}} {2^{Rank}}}\leqslant{ \dfrac {2} {2-xk} } = \mathrm{O(1)}</tex>.</center>   Итак ) не более чем вдвое, поскольку <tex> S = \mathrm{OB(B(1k))} + \mathrmgeqslant 2^{O(\log^*x)} + \mathrm{O(1)k}} = </tex>, и потому есть <tex>\mathrm{O(\log^*xn)} </tex>.В силу того, что интервал <tex>(1.45; 2)</tex> не пустой, теорема Теорема доказана.
}}
Анонимный участник

Навигация