Анализ реализации с ранговой эвристикой — различия между версиями
Строка 1: | Строка 1: | ||
− | Пусть union(v1,v2) - процедура слития двух множеств содержащих | + | Пусть <tex> union(v1,v2) </tex> - процедура слития двух множеств содержащих <tex> v1 </tex>,<tex> v2 </tex>, а <tex> get(v) </tex> - поиск корня поддерева содержащего <tex> v </tex>. Рассмотрим <tex> n </tex> операций <tex> union </tex> и <tex> m </tex> операций <tex> get </tex>. Для удобства и без потери общности будем считать <tex> union </tex> принимает в качестве аргументов корни поддеревьев и <tex> m > n </tex>, то есть <tex> union(v1,v2) </tex> заменяем на <tex> union(get(v1),get(v2)) </tex>. |
− | Обозначим <tex>R(v)</tex> - ранг вершины,<tex>P(v)</tex> - отец вершины,<tex>L(v) </tex> - самый первый отец вершины | + | |
+ | Тогда нам надо оценить стоимость операции <tex> get(v) </tex>. | ||
+ | Обозначим <tex>R(v)</tex> - ранг вершины,<tex>P(v)</tex> - отец вершины,<tex>L(v) </tex> - самый первый отец вершины, <tex> K(v) </tex> - количество вершин в поддерева корнем которого является <tex> | ||
+ | v </tex> | ||
{{Утверждение | {{Утверждение | ||
Строка 8: | Строка 11: | ||
Из того как работает функция get следует: | Из того как работает функция get следует: | ||
1.<tex> R(L(v))>R(v) </tex> | 1.<tex> R(L(v))>R(v) </tex> | ||
+ | |||
2. Между <tex> v </tex> и <tex> P(v) </tex> существует путь вида : <tex> v -> L(v) -> L(L(v)) ... ->P(v) </tex> | 2. Между <tex> v </tex> и <tex> P(v) </tex> существует путь вида : <tex> v -> L(v) -> L(L(v)) ... ->P(v) </tex> | ||
Записав неравенство из первого пункта вдоль пути из второго пункта следует что <tex> R(P(v))>R(v) </tex> | Записав неравенство из первого пункта вдоль пути из второго пункта следует что <tex> R(P(v))>R(v) </tex> | ||
+ | }} | ||
+ | |||
+ | {{Утверждение | ||
+ | |statement= | ||
+ | <tex> R(v)=i => K(v) >=2^i </tex> | ||
+ | |proof= | ||
+ | Докажем по индукции: | ||
+ | Для 0 равенство очевидное. | ||
+ | Ранг вершины стает равным <tex> i </tex> при сливании поддеревьев ранга i-1, отсюда следует: | ||
+ | <tex>K(v)>=K(v1)+K(v2)>=2^(i-1)+2^(i-1)>=2^i </tex>. | ||
+ | |||
}} | }} |
Версия 00:07, 8 марта 2011
Пусть
- процедура слития двух множеств содержащих , , а - поиск корня поддерева содержащего . Рассмотрим операций и операций . Для удобства и без потери общности будем считать принимает в качестве аргументов корни поддеревьев и , то есть заменяем на .Тогда нам надо оценить стоимость операции
. Обозначим - ранг вершины, - отец вершины, - самый первый отец вершины, - количество вершин в поддерева корнем которого являетсяУтверждение: |
Из того как работает функция get следует: 1. 2. Между Записав неравенство из первого пункта вдоль пути из второго пункта следует что и существует путь вида : |
Утверждение: |
Докажем по индукции: Для 0 равенство очевидное. Ранг вершины стает равным при сливании поддеревьев ранга i-1, отсюда следует: . |