Анализ реализации с ранговой эвристикой — различия между версиями
Rybak (обсуждение | вклад) |
|||
| Строка 54: | Строка 54: | ||
<center><tex> | <center><tex> | ||
S= {\sum_{get} \limits} ({\sum_{v:v \in get,v \in T1} \limits 1} + {\sum_{v:v \in get,v \in T2} \limits 1} + {\sum_{v: \in get,v \in T3} \limits 1} ) / m | S= {\sum_{get} \limits} ({\sum_{v:v \in get,v \in T1} \limits 1} + {\sum_{v:v \in get,v \in T2} \limits 1} + {\sum_{v: \in get,v \in T3} \limits 1} ) / m | ||
| − | </tex> | + | </tex></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> эквивалентно вершине в которой оно начинается. | ||
В силу того что <tex>{\sum_{v:v \in get,v \in T1} \limits 1} = O(1) </tex> получаем: | В силу того что <tex>{\sum_{v:v \in get,v \in T1} \limits 1} = O(1) </tex> получаем: | ||
| − | <center><tex> S = O(1) + {\sum_{get} \limits} ~ {\sum_{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> | + | <center><tex> S = O(1) + {\sum_{get} \limits} ~ {\sum_{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> |
Во время <tex> get </tex> после прохождения K ребер из второго класса <tex> R(v1) \ge x^{x^{.^{.^{.^{x^{R(v)}}}}}} </tex> | Во время <tex> get </tex> после прохождения K ребер из второго класса <tex> R(v1) \ge x^{x^{.^{.^{.^{x^{R(v)}}}}}} </tex> | ||
| Строка 73: | Строка 73: | ||
Как максимум через <tex> x^{R(k)} </tex> переходов ребро перестанет появляться в классе Т3. | Как максимум через <tex> x^{R(k)} </tex> переходов ребро перестанет появляться в классе Т3. | ||
| − | <center><tex> {\sum_{get} \limits}~ {\sum_{v:v \in get,v \in T3} \limits} 1/n = {\sum_v \limits ~\sum_{get: in ~ this ~ get ~ v \in T3} \limits } 1/n \le \sum_v \limits x^{R(v)} /n </tex></center> | + | <center><tex> {\sum_{get} \limits}~ {\sum_{v:v \in get,v \in T3} \limits} 1/n = {\sum_v \limits ~\sum_{get: in ~ this ~ get ~ v \in T3} \limits } 1/n \le \sum_v \limits x^{R(v)} /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> | + | <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}(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> 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}(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>. | ||
| Строка 85: | Строка 85: | ||
}} | }} | ||
| + | == Ссылки == | ||
* [http://en.wikipedia.org/wiki/Iterated_logarithm Wikipedia -Iterated logarithm] | * [http://en.wikipedia.org/wiki/Iterated_logarithm Wikipedia -Iterated logarithm] | ||
Версия 22:25, 29 июня 2011
Пусть - процедура слития двух множеств содержащих ,, а - поиск корня поддерева содержащего . Рассмотрим операций и операций . Для удобства и без потери общности будем считать принимает в качестве аргументов корни поддеревьев и , то есть заменяем на .
Тогда нам надо оценить стоимость операции . Обозначим - ранг вершины, - отец вершины, - самый первый отец вершины, - количество вершин в поддерева корнем которого является
| Утверждение: |
|
Из того как работает следует: 1. 2. Между и существует путь вида : Записав неравенство из первого пункта вдоль пути из второго пункта следует что |
| Утверждение: |
|
Докажем по индукции: Для 0 равенство очевидное. Ранг вершины стает равным при сливании поддеревьев ранга i-1, отсюда следует: . |
Из второго утверждения следует:
1.
2. Количество вершин ранга
| Теорема: |
Амортизационная стоимость |
| Доказательство: |
|
Рассмотрим некоторое число . Разобьем наши ребра на три класса: 1.Ведут в корень или в сына корня. 2. 3. Все остальные. Обозначим эти классы Амортизированная стоимость где означает что ребро начало которого находится в было пройдено во время выполнения текущего . Ребро эквивалентно вершине в которой оно начинается. В силу того что получаем: Во время после прохождения K ребер из второго класса Из выше сказанного и первого следствия второго утверждения получаем что:Для того, чтобы существовал необходимо, чтобы
Из первого утверждения и того что происходит сжатие путей следует cтрого увеличивается при переходе по ребру из Т3. Как максимум через переходов ребро перестанет появляться в классе Т3. Из второго следствия второго утверждения следует
|