Анализ реализации с ранговой эвристикой — различия между версиями
Rybak (обсуждение | вклад) |
м (rollbackEdits.php mass rollback) |
||
(не показано 10 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
− | Пусть <tex> union(v_1,v_2) </tex> — процедура объединения двух множеств содержащих <tex> v_1 </tex> и <tex> v_2 </tex>, | + | Пусть <tex> union(v_1,v_2) </tex> — процедура объединения двух множеств, содержащих <tex> v_1 </tex> и <tex> v_2 </tex>, |
а <tex> get(v) </tex> — поиск представителя множества, содержащего <tex> v </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> n </tex> операций <tex> union </tex> и <tex> m </tex> операций <tex> get </tex> (<tex> m > n </tex>). | ||
Строка 15: | Строка 15: | ||
|proof= | |proof= | ||
Из принципа работы функции <tex> get </tex> следует: | Из принципа работы функции <tex> get </tex> следует: | ||
− | #<tex> R(L(v))>R(v) </tex> | + | #<tex> R(L(v))>R(v) </tex>. |
− | #Между <tex> v </tex> и <tex> P(v) </tex> существует путь вида: <tex> v \rightarrow L(v) \rightarrow L(L(v)) \rightarrow \dots \rightarrow P(v) </tex> | + | #Между <tex> v </tex> и <tex> P(v) </tex> существует путь вида: <tex> v \rightarrow L(v) \rightarrow L(L(v)) \rightarrow \dots \rightarrow P(v) </tex>. |
− | Записав неравенство из первого пункта вдоль пути из второго пункта получаем требуемое. | + | Записав неравенство из первого пункта вдоль пути из второго пункта, получаем требуемое. |
}} | }} | ||
Строка 27: | Строка 27: | ||
Для 0 равенство очевидно. | Для 0 равенство очевидно. | ||
− | Ранг вершины | + | Ранг вершины станет равным <tex> i </tex> при объединении поддеревьев ранга <tex>i-1</tex>, следовательно: |
<tex>K(v) \ge K(v_1) + K(v_2) \ge 2^{i-1}+2^{i-1} \ge 2^i </tex>. | <tex>K(v) \ge K(v_1) + K(v_2) \ge 2^{i-1}+2^{i-1} \ge 2^i </tex>. | ||
}} | }} | ||
Строка 33: | Строка 33: | ||
Из последнего утверждения следует: | Из последнего утверждения следует: | ||
− | #<tex> R(v) \le \log_2(n) </tex> | + | #<tex> R(v) \le \log_2(n) </tex>. |
− | #Количество вершин ранга <tex> i \le {n \over 2^i} </tex> | + | #Количество вершин ранга <tex> i \le {n \over 2^i} </tex>. |
{{Теорема | {{Теорема | ||
Строка 44: | Строка 44: | ||
#Ведут в корень или в сына корня. | #Ведут в корень или в сына корня. | ||
− | #<tex> R(P(v)) \ge x^{R(v)}</tex> | + | #<tex> R(P(v)) \ge x^{R(v)}</tex>. |
#Все остальные. | #Все остальные. | ||
Обозначим эти классы <tex> T_1, T_2, T_3 </tex>. | Обозначим эти классы <tex> T_1, T_2, T_3 </tex>. | ||
− | + | Амортизационная стоимость | |
<center> | <center> | ||
Строка 56: | Строка 56: | ||
+ | + | ||
{\sum_{v:v \in get,v \in T2} \limits 1} + {\sum_{v: \in get,v \in T_3} \limits 1} ) / m | {\sum_{v:v \in get,v \in T2} \limits 1} + {\sum_{v: \in get,v \in T_3} \limits 1} ) / m | ||
− | </tex> | + | </tex>, |
</center> | </center> | ||
− | где <tex> {v \in get } </tex> означает что ребро начало которого находится в <tex> v </tex> было пройдено во время выполнения текущего <tex> get </tex>. | + | где <tex> {v \in get } </tex> означает, что ребро, начало которого находится в <tex> v </tex>, было пройдено во время выполнения текущего <tex> get </tex>. |
Ребро <tex> v </tex> эквивалентно вершине, в которой оно начинается. | Ребро <tex> v </tex> эквивалентно вершине, в которой оно начинается. | ||
Строка 66: | Строка 66: | ||
<tex> | <tex> | ||
S = O(1) + {\sum_{get} \limits} ~ {\sum_{v:v \in get,v \in T_2} \limits} 1/m+ {\sum_{get} \limits} ~ {\sum_{v:v \in get,v \in T_3} \limits} 1 / m | S = O(1) + {\sum_{get} \limits} ~ {\sum_{v:v \in get,v \in T_2} \limits} 1/m+ {\sum_{get} \limits} ~ {\sum_{v:v \in get,v \in T_3} \limits} 1 / m | ||
− | </tex> | + | </tex>. |
</center> | </center> | ||
− | Во время <tex> get </tex> после прохождения K ребер из второго класса <tex> R(v_1) \ge x^{x^{.^{.^{.^{x^{R(v)}}}}}} </tex> | + | Во время <tex> get </tex> после прохождения K ребер из второго класса <tex> R(v_1) \ge x^{x^{.^{.^{.^{x^{R(v)}}}}}} </tex>. |
− | Из выше сказанного и первого следствия второго утверждения получаем что: | + | Из выше сказанного и первого следствия второго утверждения получаем, что: |
<center> | <center> | ||
<tex> {\sum_{v:v \in get,v \in T_2} \limits} \le \log^*_x(\log_2(n)) = O(\log^*(n)) | <tex> {\sum_{v:v \in get,v \in T_2} \limits} \le \log^*_x(\log_2(n)) = O(\log^*(n)) | ||
− | </tex> | + | </tex>. |
</center> | </center> | ||
− | Для того, чтобы <tex> \log^*_x </tex> существовал необходимо, чтобы <tex> x > e ^{ 1 /e } \approx 1,44 </tex> | + | Для того, чтобы <tex> \log^*_x(\log_2(n)) </tex> существовал необходимо, чтобы <tex> x > e ^{ 1 /e } \approx 1,44 </tex>. |
Строка 85: | Строка 85: | ||
< | < | ||
{\sum_{get} \limits} ~ {\sum_{v:v \in get,v \in T_3} \limits} 1/n | {\sum_{get} \limits} ~ {\sum_{v:v \in get,v \in T_3} \limits} 1/n | ||
− | </tex> </center> | + | </tex>. </center> |
Из первого утверждения и в силу использования сжатия путей следует, | Из первого утверждения и в силу использования сжатия путей следует, | ||
− | что <tex> R(P(x))</tex> cтрого увеличивается при переходе по ребру из <tex> | + | что <tex> R(P(x))</tex> cтрого увеличивается при переходе по ребру из <tex> T_3 </tex>. |
− | Как максимум через <tex> x^{R(k)} </tex> переходов ребро перестанет появляться в классе <tex> | + | Как максимум через <tex> x^{R(k)} </tex> переходов ребро перестанет появляться в классе <tex> T_3 </tex>. |
<center><tex> | <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 } | {\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(v)} /n | 1/n \le \sum_v \limits x^{R(v)} /n | ||
− | </tex></center> | + | </tex>.</center> |
− | Из второго следствия второго утверждения следует | + | Из второго следствия второго утверждения следует: |
<center> <tex> | <center> <tex> | ||
− | {\sum_{get} \limits}~ {\sum_{v:v \in get,v \in T_3} \limits} 1/n \le \sum_{Rank=0}^{ | + | {\sum_{get} \limits}~ {\sum_{v:v \in get,v \in T_3} \limits} 1/n \le \sum_{Rank=0}^{\log_2(n)} \limits {nx^{Rank} \over 2^{Rank} n} |
− | </tex></center> | + | </tex>.</center> |
При <tex> x < 2~</tex>: | При <tex> x < 2~</tex>: | ||
Строка 105: | Строка 105: | ||
{\sum_{get} \limits}~ {\sum_{v:v \in get,v \in T3} \limits} 1/n | {\sum_{get} \limits}~ {\sum_{v:v \in get,v \in T3} \limits} 1/n | ||
\le | \le | ||
− | \sum_{Rank=0}^{ | + | \sum_{Rank=0}^{\log_2(n)} \limits {x^{Rank} \over 2^{Rank}} |
\le | \le | ||
\sum_{Rank=0}^\infty \limits {x^{Rank} \over 2^{Rank}} | \sum_{Rank=0}^\infty \limits {x^{Rank} \over 2^{Rank}} | ||
\le | \le | ||
{ 2 \over 2-x } = O(1) | { 2 \over 2-x } = O(1) | ||
− | </tex></center> | + | </tex>.</center> |
Текущая версия на 19:21, 4 сентября 2022
Пусть
— процедура объединения двух множеств, содержащих и , а — поиск представителя множества, содержащего . Рассмотрим операций и операций ( ). Не теряя общности, будем считать, что принимает в качестве аргументов представителей, то есть заменяем на .Оценим стоимость операции
. Обозначим — ранг вершины, — представитель множества, содержащего , — отец вершины, — количество вершин в поддереве, корнем которого является .Утверждение: |
Из принципа работы функции следует:
|
Утверждение: |
Докажем по индукции: Для 0 равенство очевидно. Ранг вершины станет равным при объединении поддеревьев ранга , следовательно: . |
Из последнего утверждения следует:
- .
- Количество вершин ранга .
Теорема: |
Амортизационная стоимость |
Доказательство: |
Рассмотрим некоторое число . Разобьем наши ребра на три класса:
Обозначим эти классы .Амортизационная стоимость , где означает, что ребро, начало которого находится в , было пройдено во время выполнения текущего . Ребро эквивалентно вершине, в которой оно начинается.В силу того, что получаем:. Во время после прохождения K ребер из второго класса .Из выше сказанного и первого следствия второго утверждения получаем, что: . Для того, чтобы существовал необходимо, чтобы .
Из первого утверждения и в силу использования сжатия путей следует, что cтрого увеличивается при переходе по ребру из .Как максимум через переходов ребро перестанет появляться в классе .Из второго следствия второго утверждения следует: При :
|