Тип работы:
Предмет:
Язык работы:


Улучшение оценок времени работы алгоритмов Segment Tree Beats

Работа №142504

Тип работы

Бакалаврская работа

Предмет

прикладная информатика

Объем работы62
Год сдачи2022
Стоимость4750 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
27
Не подходит работа?

Узнай цену на написание


Введение 3
Постановка задачи 4
1. Обзор литературы 5
2. Постановка решаемой задачи 6
3. Пререквизиты 8
4. Основная идея 11
5. Знакомство с Segment Tree Beats на примере задачи mod =, = в
точке, Р 13
5.1. Формулировка 13
5.2. Алгоритм 13
5.3. Оценка времени работы 14
6. Ji Driver Segment Tree (min =, ^2) 19
6.1. Формулировка 19
6.2. Решение 19
6.3. Доказательство 21
7. Extended Ji Driver Segment Tree (min =, + =, £) 25
7.1. Формулировка 25
7.2. Решение 25
7.3. Доказательство 25
7.4. Улучшенная оценка 29
8. GCD Ji Driver Segment Tree (min =, + =, gcd) 35
8.1. Формулировка 35
8.2. Решение + доказательство упрощенной версии задачи .... 35
8.3. Решение + доказательство полной версии задачи 38
9. mod =, = на отрезке, 41
9.1. Формулировка 41
9.2. Решение 41
9.3. Доказательство 41
10. .р =, + =, =, P 44
10.1. Формулировка 44
10.2. Решение 44
10.3. Доказательство 46
10.4. Улучшенная оценка 48
11. / =, + =, =, P 51
11.1. Формулировка 51
11.2. Решение 51
11.3. Доказательство 52
11.4. Улучшенная оценка 53
12. Сценарии применения в реальной жизни 56
Заключение 58
Список литературы 60

Задача поиска значения какой-то функции на отрезке массива является одной из наиболее стандартных и широко изученных проблем в теоретиче­ской информатике. Одна из самых известных работ в этой области — статья Фараха-Колтона и Бендера [1], решающая задачу поиска минимума на отрезке за оптимальное время. Кроме того, во многих контекстах бывает необходимо решать так называемые «динамические» версии этих задач, то есть при усло­вии, что элементы массива могут меняться со временем. Широко исследованы такие запросы изменения как прибавление константы ко всем элементам на отрезке и присвоение какой-то константы всем элементам на отрезке. Для решения этих задач применяются такие стандартные структуры данных как дерево отрезков и дерево Фенвика [2]. Однако какие-либо запросы измене­ния кроме этих двух стандартных были всегда обделены вниманием из-за того, что не удавалось придумать алгоритмов, которые бы работали столь же быстро, как и обычные деревья отрезков.
Большой шаг в эту стороны был сделан Ruyi Ji в 2016 году в его полу- научной статье [3]. К сожалению, в полном виде этот текст доступен только на китайском языке и с достаточно большим количеством неформальностей и допущений. Цель моей работы — воспроизведение результатов Ruyi Ji, их формализация, а также улучшение полученных оценок в уже рассмотренных задачах и применение схожих методов для решения новых задач. Централь­ной темой моей работы является так называемая задача «min =»: запрос изменения, заменяющий все элементы на отрезке на минимум из текущего значения и константы. Этот запрос, пожалуй, является наиболее естествен­ным запросом изменения кроме стандартных: прибавления и присвоения на отрезке. Кроме того, в работе я не только исследовал теоретическую слож­ность, но и реализовал и протестировал решения всех исследуемых задач на языке программирования C++. Также, в этой работе я привожу сценарии использования проанализированных мною алгоритмов для решения задач из реальной жизни: к примеру, поддержка актуальной стоимости ценной бумаги на фондовом рынке при появляющихся и пропадающих предложениях.

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В данной работе были исследованы алгоритмы из семейства Segment Tree Beats, получены улучшенные оценки на время работы для задач Extended Ji Driver Segment Tree, GCD Ji Driver Segment Tree, а также задач с запросами взятия квадратного корня и деления нацело на отрезке. А именно:
• Для задач семейства Ji Driver Segment Tree были более точно сформу­лированы асимптотики.
• Для задачи Extended Ji Driver Segment Tree асимптотика была улучшена с O(n log n + q log2 n) до O(n log n + q1 log n + q2 log2 n + q3 log n).
• Для задачи с запросами min = и gcd асимптотика была улучшена с O((n + q) logn log C) до O((n + q)(logn + log C)).
• Для задачи GCD Ji Driver Segment Tree асимптотика была улучшена с O(nlognlogC + qlog2nlogC) до O((n + qlogn)(logn + logC)) и O((n + q1 + q2 logn + q3)(logn + logC)), если быть еще точнее.
• Для задачи с запросами p =, + =, = и 52 асимптотика была улучшена с O((n + q log n) log C) до O((n + q log n) log log C).
• Для задачи с запросами / =, + =, = и 52 при условии, что деление производится на числа, не меньшие к, асимптотика была улучшена с O((n + q logn) log C) до O((n + q logn) logk C).
Кроме того, были написаны реализации представленных алгоритмов на языке C++, а также разработаны сценарии применения предложенных алго­ритмов на практике.
Продолжением исследования может быть дальнейшее изучение задачи Extended Ji Driver Segment Tree в надежде приравнять теоретическую верх­нюю и нижнюю оценки на время работы (что, как следствие, может приравнять эти оценки и для задачи GCD Ji Driver Segment Tree), а также анализ новых задач, для которых может быть применима парадигма Segment Tree Beats.
Кроме того хочется прокомментировать несколько подходов к дальней­шему изучению задачи Extended Ji Driver Segment Tree:
• Одним из возможных направлений в исследовании может быть изучение вопроса о времени работы при условии, что входные данные сгенериро­ваны случайно (в соответствии с каким-то распределением). Это потен­циально может помочь для доказательства логарифмического времени работы.
• В общем случае можно считать, что все запросы выполняются не на отрезках массива, а на префиксах. Действительно, сумма на отрезке — это разность сумм префиксов, прибавление на отрезке можно выра­зить через прибавление на префиксе правой границы и вычитание на префиксе левой границы, а операцию min = на отрезке можно выра­зить как вычитание большой константы на префиксе левой границы, применение операции min = на префиксе правой границы и обратное прибавление большой константы на префиксе левой границы. Возмож­но, в силу большей простоты операции прибавления на префиксе, это может как-то помочь в анализе алгоритма.
• Хранить кроме первого и второго максимума на отрезке еще и третий, четвертый и так далее кажется бесполезным. Безусловно, хранить их можно, однако это не поможет нам ослабить условие tagCondition. Все еще если x < secondMax, мы не можем пересчитать значения в данной вершине, ведь в этом случае второй максимум стал первым, третий стал вторым, и так далее. Тогда если мы храним к максимумов, то к-й максимум стал к — 1-м, а к + 1-й стал k-м, но к + 1-й максимум мы не храним и не имеем возможности легко его найти. Аналогичная проблема возникает при попытке пересчитать количества максимумов.


[1] M. Bender and M. Farach-Colton, The LCA Problem Revisited, In Proceedings of LATIN 2000, LNCS 1776, 88-94, 2000.
[2] B.Ya Ryabko; A fast on-line adaptive code. IEEE Trans.on Inform.Theory,v.28, n 1, Jul 1992 pp. 1400 - 1404.
[3] Ruyi Ji. Segment Tree Beats. URL: http://www.doc88.com/p- 6744902151779.html (дата обр. 26.04.2022).
[4] Комментарий от Xin Huang. URL:
https://codeforces.com/blog/entry/54750?#comment-387839 (дата обр. 20.05.2022).
[5] Ruyi Ji. A simple introduction to "Segment tree beats". URL: https://codeforces.com/blog/entry/57319 (дата обр. 26.04.2022).
[6] Rajarshi Basu. Segment Tree Beats - An introduction. URL: http://codingwithrajarshi.blogspot.com/2018/03/segment-tree-beats- introduction.html (дата обр. 02.05.2022).
[7] Егор Горбачев. Segment Tree Beats. URL: https://peltorator.ru/posts/segment_tree_beats/ (дата обр. 02.05.2022).
[8] Benjamin Qi, Dustin Miao. Segment Tree Beats. URL:
https://usaco.guide/adv/segtree-beats?lang=cpp (дата обр. 02.05.2022).
[9] Kamil Debowski. Segment tree beats | IOI preparation #6. URL: https://youtu.be/wFqKgrW1IMQ (дата обр. 02.05.2022).
[10] David Harmeyer. AlgorithmsThread 4: Segment Tree Beats. URL: https://youtu.be/_TGNYtkWAsQ (дата обр. 02.05.2022).
[11] Егор Горбачев. Segment Tree Beats: Segment Tree On Steroids. Part 1. URL: https://youtu.be/NwkO73jGSPA (дата обр. 02.05.2022).
[12] Егор Горбачев. Segment Tree Beats: Дерево Отрезков На Стероидах. Часть 1. URL: https://youtu.be/58csqxAD8vM (дата обр. 02.05.2022).
[13] Ista. Segment Tree Beats I Advanced I RMQ & LCA. URL: https://youtu.be/UJyBHCXa-1g (дата обр. 02.05.2022).
[14] Codeforces Round #250 (Div. 1). D. Ребенок и последовательность. URL: https://codeforces.Com/problemset/problem/438/D (дата обр. 02.05.2022).
[15] HackerRank. Box Operations. URL: https://www.hackerrank.com/challenges/box- operations/problem (дата обр. 02.05.2022)....21


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ