Изменения

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

Анализ реализации с ранговой эвристикой

121 байт добавлено, 19:21, 4 сентября 2022
м
rollbackEdits.php mass rollback
Пусть <tex> union(v1v_1,v2v_2) </tex> - процедура слития объединения двух множеств , содержащих <tex> v1 v_1 </tex>,и <tex> v2 v_2 </tex>, а <tex> get(v) </tex> - поиск корня поддерева представителя множества, содержащего <tex> v </tex>. Рассмотрим <tex> n </tex> операций <tex> union </tex> и <tex> m </tex> операций <tex> get </tex>(<tex> m > n </tex>). Для удобства и без потери Не теряя общности , будем считать , что <tex> union </tex> принимает в качестве аргументов корни поддеревьев и <tex> m > n </tex>представителей, то есть <tex> union(v1v_1,v2v_2) </tex> заменяем на <tex> union(get(v1v_1),get(v2v_2)) </tex>.
Тогда нам надо оценить Оценим стоимость операции <tex> get(v) </tex>. Обозначим <tex>R(v)</tex> - ранг вершины,<tex>P(v)</tex> - отец вершины— представитель множества, содержащего <tex> v </tex>,<tex>L(v) </tex> - самый первый отец вершины, <tex> K(v) </tex> - количество вершин в поддерева поддереве, корнем которого является <tex> v </tex> .
{{Утверждение
|statement=
<tex> R(P(v))>R(v) </tex>
|proof=
Из того как работает принципа работы функции <tex> get </tex> следует:1.#<tex> R(L(v))>R(v) </tex>. 2. #Между <tex> v </tex> и <tex> P(v) </tex> существует путь вида : <tex> v \rightarrow L(v) \rightarrow L(L(v)) \rightarrow ... \dots \rightarrow P(v) </tex>.Записав неравенство из первого пункта вдоль пути из второго пункта следует что <tex> R(P(v))>R(v) </tex> , получаем требуемое.
}}
{{Утверждение
|statement=
<tex> R(v)=i \Rightarrow K(v) \ge 2^i </tex>
|proof=
Докажем по индукции:
 Для 0 равенство очевидноеочевидно.Ранг вершины стает станет равным <tex> i </tex> при сливании объединении поддеревьев ранга <tex>i-1</tex>, отсюда следуетследовательно:<tex>K(v) \ge K(v1v_1)+K(v2v_2) \ge 2^{i-1}+2^{i-1} \ge 2^i </tex>.
}}
Из последнего утверждения следует:
Из второго утверждения следует: 1. #<tex> R(v) \le \log_2(n) </tex>. 2. #Количество вершин ранга <tex> i \le {n \over 2^i} </tex>.
{{Теорема
Амортизационная стоимость <tex> get = O(\log^{*}(n)) </tex>
|proof=
Рассмотрим некоторое число <tex> x </tex> .
Разобьем наши ребра на три класса:
1.#Ведут в корень или в сына корня.#<tex> R(P(v)) \ge x^{R(v)}</tex>.#Все остальные.
2.Обозначим эти классы <tex> R(P(v)) \ge x^{R(v)}T_1, T_2, T_3 </tex>.
3. Все остальные.Амортизационная стоимость
Обозначим эти классы <center><tex> T1S = {\sum_{get} \limits} ({\sum_{v:v \in get,v \in T_1} \limits 1}+{\sum_{v:v \in get,v \in T2} \limits 1} + {\sum_{v: \in get,v \in T_3} \limits 1} ) / m </tex>,</center>где <tex> {v \in get } </tex> означает, что ребро, начало которого находится в <tex> v </tex>,T3 было пройдено во время выполнения текущего <tex> get </tex>. Ребро <tex> v </tex> эквивалентно вершине, в которой оно начинается.
Амортизированная стоимость В силу того, что <tex>{\sum_{v:v \in get,v \in T_1} \limits 1} = O(1) </tex> получаем:
<center><tex>S= O(1) + {\sum_{get} \limits} (~ {\sum_{v:v \in get,v \in T1T_2} \limits } 1} /m+ {\sum_{v:v \in get,v \in T2} \limits 1} + ~ {\sum_{v: v \in get,v \in T3T_3} \limits } 1} ) / m </tex></center>где <tex> {v \in get } </tex> означает что ребро начало которого находится в <tex> v </tex> было пройдено во время выполнения текущего <tex> get </tex>. Ребро <tex> v </texcenter> эквивалентно вершине в которой оно начинается.
В силу того что Во время <tex>{\sum_{v:v \in get,v \in T1} \limits 1} = O(1) </tex> получаем: <center>после прохождения K ребер из второго класса <tex> S = OR(1v_1) + \ge x^{x^{\sum_.^{.^{get} \limits} ~ .^{\sum_x^{R(v:v \in get,v \in T2)} \limits} 1/m+ {\sum_{get} \limits} ~ {\sum_{v:v \in get,v \in T3} \limits} 1/m </tex></center>.
Во время Из выше сказанного и первого следствия второго утверждения получаем, что:<texcenter> get </tex> после прохождения K ребер из второго класса <tex> R{\sum_{v:v \in get,v \in T_2} \limits} \le \log^*_x(\log_2(v1n) ) = O(\ge x^{x^{.^{.log^{.^{x^{R*(vn))}}}}}} </tex>.</center>
Из выше сказанного и первого следствия второго утверждения получаем что:<center> Для того, чтобы <tex> {\sum_{v:v \in get,v \in T2} \limits} \le \log^*_x(\log_2(n)) = O(\log^*(n)) </tex>существовал необходимо, чтобы <tex> x > e ^{ 1 /e } \approx 1,44 </centertex>.
Для того, чтобы <tex> \log^*_x </tex> существовал необходимо, чтобы <tex> x > e ^{ 1 /e } \approx 1,44 </tex>
Рассмотрим сумму
<center> <tex>
{\sum_{get} \limits} ~ {\sum_{v:v \in get,v \in T_3} \limits} 1~/m
<
{\sum_{get} \limits} ~ {\sum_{v:v \in get,v \in T_3} \limits} 1/n
</tex>. </center>
Из первого утверждения и в силу использования сжатия путей следует,
что <tex> R(P(x))</tex> cтрого увеличивается при переходе по ребру из <tex> T_3 </tex>.
Рассмотрим сумму<center> Как максимум через <tex>x^{\sum_{get} \limits} ~ {\sum_{v:v \in get,v \in T3} \limits} 1~/m < {\sum_{get} \limits} ~ {\sum_{v:v \in get,v \in T3} \limitsR(k)} 1/n </tex> </center> Из первого утверждения и того что происходит сжатие путей следует переходов ребро перестанет появляться в классе <tex> R(P(x))T_3 </tex> cтрого увеличивается при переходе по ребру из Т3.
Как максимум через <center><tex> {\sum_{get} \limits}~ {\sum_{v:v \in get,v \in T_3} \limits} 1/n = {\sum_v \limits ~\sum_{get: in ~ this ~ get ~ v \in T_3} \limits } 1/n \le \sum_v \limits x^{R(kv)} /n</tex> переходов ребро перестанет появляться в классе Т3.</center>
Из второго следствия второго утверждения следует:<center><tex> {\sum_{get} \limits}~ {\sum_{v:v \in get,v \in T3T_3} \limits} 1/n = {\sum_v \limits ~le \sum_{get: in ~ this ~ get ~ v Rank=0}^{\in T3log_2(n)} \limits {nx^{Rank} 1/n \le \sum_v \limits xover 2^{R(v)Rank} /n }</tex>.</center>
Из второго следствия второго утверждения следует<center> <tex> {\sum_{get} \limits}~ {\sum_{v:v \in get,v \in T3} \limits} 1/n \le \sum_{Rank=0}^{log_{2}(n)} \limits {nx^{Rank} \over 2^{Rank} n} </tex></center> При <tex> x < 2~</tex> :<center> <tex>{\sum_{get} \limits}~ {\sum_{v:v \in get,v \in T3} \limits} 1/n \le \sum_{Rank=0}^{log_{2}\log_2(n)} \limits {x^{Rank} \over 2^{Rank}} \le \sum_{Rank=0}^\infty \limits {x^{Rank} \over 2^{Rank} } \le { 2 \over 2-x } = O(1) </tex>.</center>.
В результате Итак <tex> S=O(1)+O(\log^*(x))+O(1)=O(\log^*(x)) </tex>.В силу того , что интервал <tex> (1,45...2) </tex> не пустой , теорема доказана.
}}
1632
правки

Навигация