Skip quadtree: определение, время работы — различия между версиями
Gromak (обсуждение | вклад) |
Gromak (обсуждение | вклад) |
||
Строка 24: | Строка 24: | ||
О количестве шагов на одном уровне | О количестве шагов на одном уровне | ||
|statement= | |statement= | ||
− | На каждом уровне совершается <tex>O(1)</tex> шагов поиска. | + | На каждом уровне совершается <tex>O(1)</tex> шагов поиска для любой точки <tex>x</tex>. |
|proof= | |proof= | ||
− | + | Пусть в <tex>Q_i</tex> (то есть на <tex>i</tex>-ом уровне) поиск точки <tex>x</tex>, начинающийся с корня, проходит по квадратам <tex>p_0, p_1, \dots, p_m</tex>. Пусть случайная величина <tex>j</tex> {{---}} количество шагов поиска в <tex>Q_i</tex>, тогда <tex>p_{m - j}</tex> {{---}} последний квадрат из <tex>p_0, p_1, \dots, p_m</tex>, являющийся интересным в <tex>Q_{i + 1}</tex>. | |
+ | |||
+ | Оценим вероятность того, что делается <tex>j</tex> шагов. Забьём на случай <tex>j = 0</tex>, так как он не важен при расчёте мат. ожидания. На пути <tex>p_{m - j + 1} \dots, p_m</tex> будет хотя бы <tex>j + 1</tex> непустых четвертинок. У первого квадрата на этом пути есть хотя бы 2 непустых четвертинки, одна из них {{---}} следующий квадрат на пути, в котором тоже хотя бы 2 непустых четвертинки, и так далее. В последнем квадрате просто хотя бы 2 непустых четвертинки. Чтобы | ||
+ | <tex>p_{m - j}</tex> был последним из <tex>p_0, p_1, \dots, p_m</tex> интересным квадратом в <tex>Q_{i + 1}</tex> небходимо, чтобы среди этих <tex>j + 1</tex> непустых четвертинок только одна (вероятность этого назовём <tex>Pr_1</tex>) или ноль (вероятность этого назовём <tex>Pr_0</tex>) были непустыми в <tex>Q_{i + 1}</tex>. Иначе, если будет хотя бы 2 непустые четвертинки, то их наименьший общий предок в дереве будет интересным квадратом и будет находиться глубже <tex>p_{m - j}</tex>. Таким образом, искомая вероятность не превосходит <tex>Pr_0 + Pr_1</tex>. | ||
+ | |||
+ | ''Лично мне утверждение из предыдущего абзаца далось с трудом, если у вас тоже всё очень плохо, попробуйте напрячь мозг и залипнуть в картинку, вдруг поможет'' | ||
+ | |||
+ | <tex>Pr_0 \leq p^{(j + 1)}</tex>, потому что это в сущности вероятность того, что ни одна точка из как минимум <tex>j + 1</tex> непустых четвертинок не попала на уровень выше. | ||
+ | |||
+ | <tex>Pr_1 \leq (j + 1) \cdot p^{(j + 1)}</tex>, потому что это в сущности вероятность того, что ровно одна точка из как минимум <tex>j + 1</tex> непустых четвертинок не попала на уровень выше. | ||
+ | |||
+ | ''В общем, если чуть подумать, оценки на <tex>Pr_0</tex> и <tex>Pr_1</tex> довольно ясны.'' | ||
+ | |||
+ | <tex>E(j) = \sum\limits_{j = 1}^{m} j \cdot Pr(j) \leq \sum\limits_{j = 1}^{m} j \cdot (p^{(j + 1)} + (j + 1) \cdot p^{(j + 1)}) \leq \sum\limits_{j = 1}^{\infty} j \cdot (p^{(j + 1)} + (j + 1) \cdot p^{(j + 1)})</tex> | ||
+ | |||
+ | В общем, если так подумать, это <tex>O(1)</tex>. Мне пока лень совсем строго написать, но вообще и так понятно. Разумеется, при условии <tex>p \in (0, 1)</tex>. | ||
+ | |||
}} | }} | ||
== Источник == | == Источник == | ||
http://arxiv.org/pdf/cs.cg/0507049.pdf | http://arxiv.org/pdf/cs.cg/0507049.pdf |
Версия 21:18, 7 января 2014
Описание
Skip quadtree — как skip list, только вместо list'а quadtree. Поэтому желательно знать, что такое skip list, и необходимо знать, что такое сжатое квадродерево. В данной статье будет рассматриваться только рандомизированая версия этой структуры, потому что больше и не нужно, кажется.
The randomized skip quadtree — последовательность сжатых квадродеревьев над последовательностью подмножеств некоего исходного множества интересный в , то он интересный и в .
. , в каждый элемент из входит с вероятностью и так далее. The randomized skip quadtree состоит из последовательности , где — сжатое квадродерево над множеством . Будем называть эти квадродеревья уровнями, при этом нулевой уровень содержит в точности точки из . Заметим, что если какой-то квадратОперации над skip quadtree
Будем для каждого интересного квадрата на каждом уровне хранить указатели на тот же квадрат уровнем ниже и уровнем выше (если есть).
Локализация выполняется аналогично сжатому квадродереву. Под локализацией под разумевается, что мы хотим найти минимальный интересный квадрат задержащий данную точку (содержит геометрически, в самом дереве её может не быть, тут, возможно, правильнее сказать «пересекает»). Сначала локализуемся в квадродереве наибольшего уровня, начиная с его корня. Затем локализуемся в квадродереве уровня ниже, начиная уже не с корня, а с того квадрата, который нашли на прошлом уровне. И так далее, пока не дойдём до дна.
Для добавления сначала надо локализоваться. При этом мы локализуемся сразу на всех уровнях (так уж устроен процесс). Дальше добавляемся в нулевой уровень, затем с вероятностью
добавляемся на уровень выше и так далее до первого недобавления. При этом количество уровней должно увеличиться максимум на 1, то есть, если появился новый уровень, то процесс точно заканчивается.Удаление совсем просто: локализуемся, удаляем со всех уровней, на которых есть.
Время работы
Лемма (О количестве шагов на одном уровне): |
На каждом уровне совершается шагов поиска для любой точки . |
Доказательство: |
Пусть в (то есть на -ом уровне) поиск точки , начинающийся с корня, проходит по квадратам . Пусть случайная величина — количество шагов поиска в , тогда — последний квадрат из , являющийся интересным в .Оценим вероятность того, что делается шагов. Забьём на случай , так как он не важен при расчёте мат. ожидания. На пути будет хотя бы непустых четвертинок. У первого квадрата на этом пути есть хотя бы 2 непустых четвертинки, одна из них — следующий квадрат на пути, в котором тоже хотя бы 2 непустых четвертинки, и так далее. В последнем квадрате просто хотя бы 2 непустых четвертинки. Чтобы был последним из интересным квадратом в небходимо, чтобы среди этих непустых четвертинок только одна (вероятность этого назовём ) или ноль (вероятность этого назовём ) были непустыми в . Иначе, если будет хотя бы 2 непустые четвертинки, то их наименьший общий предок в дереве будет интересным квадратом и будет находиться глубже . Таким образом, искомая вероятность не превосходит .Лично мне утверждение из предыдущего абзаца далось с трудом, если у вас тоже всё очень плохо, попробуйте напрячь мозг и залипнуть в картинку, вдруг поможет , потому что это в сущности вероятность того, что ни одна точка из как минимум непустых четвертинок не попала на уровень выше. , потому что это в сущности вероятность того, что ровно одна точка из как минимум непустых четвертинок не попала на уровень выше. В общем, если чуть подумать, оценки на и довольно ясны.В общем, если так подумать, это . Мне пока лень совсем строго написать, но вообще и так понятно. Разумеется, при условии . |