Анализ реализации с ранговой эвристикой — различия между версиями
Rybak (обсуждение | вклад) |
BoyCoder (обсуждение | вклад) |
||
Строка 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>). | ||
Строка 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>. | ||
}} | }} | ||
Строка 49: | Строка 49: | ||
Обозначим эти классы <tex> T_1, T_2, T_3 </tex>. | Обозначим эти классы <tex> T_1, T_2, T_3 </tex>. | ||
− | + | Амортизационная стоимость | |
<center> | <center> | ||
Строка 58: | Строка 58: | ||
</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> эквивалентно вершине, в которой оно начинается. | ||
Строка 71: | Строка 71: | ||
Во время <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)) |
Версия 14:28, 5 июня 2012
Пусть
— процедура объединения двух множеств, содержащих и , а — поиск представителя множества, содержащего . Рассмотрим операций и операций ( ). Не теряя общности, будем считать, что принимает в качестве аргументов представителей, то есть заменяем на .Оценим стоимость операции
. Обозначим — ранг вершины, — представитель множества, содержащего , — отец вершины, — количество вершин в поддереве, корнем которого является .Утверждение: |
Из принципа работы функции следует:
|
Утверждение: |
Докажем по индукции: Для 0 равенство очевидно. Ранг вершины станет равным при объединении поддеревьев ранга , следовательно: . |
Из последнего утверждения следует:
- Количество вершин ранга
Теорема: |
Амортизационная стоимость |
Доказательство: |
Рассмотрим некоторое число . Разобьем наши ребра на три класса:
Обозначим эти классы .Амортизационная стоимость
где означает, что ребро, начало которого находится в , было пройдено во время выполнения текущего . Ребро эквивалентно вершине, в которой оно начинается.В силу того, что получаем:
Во время после прохождения K ребер из второго классаИз выше сказанного и первого следствия второго утверждения получаем, что:
Для того, чтобы существовал необходимо, чтобы
Из первого утверждения и в силу использования сжатия путей следует, что cтрого увеличивается при переходе по ребру из .Как максимум через переходов ребро перестанет появляться в классе .Из второго следствия второго утверждения следует При :
|