<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ShKaF</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ShKaF"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/ShKaF"/>
		<updated>2026-05-04T04:39:01Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lapenok.aleksej&amp;diff=69612</id>
		<title>Обсуждение участника:Lapenok.aleksej</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lapenok.aleksej&amp;diff=69612"/>
				<updated>2019-01-29T07:09:09Z</updated>
		
		<summary type="html">&lt;p&gt;ShKaF: /* Вопрос */ новая тема&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Maintaining ==&lt;br /&gt;
Здравствуйте, мне нравится ваш сайт и я его рекомендую своим студентам и использую материалы с него. Но мне хотелось бы внести свою лепту в организацию материала, чтобы всем (и мне в том числе) было легче его искать. Я являюсь также администратором Википедии, поэтому имею существенный опыт управления виками. У меня много мыслей, как здесь и что улучшить. Для некоторых идей требуются права администратора. Как вы думаете, возможно ли бы было их мне получить и как? --[[Участник:Infovarius|Infovarius]] ([[Обсуждение участника:Infovarius|обсуждение]]) 13:24, 14 ноября 2018 (MSK)&lt;br /&gt;
&lt;br /&gt;
== Вопрос ==&lt;br /&gt;
&lt;br /&gt;
Существует некоторая защита от спамеров или от кого-то ещё, в соответствии с которой нужно вводить некие три буквы. Это, конечно, хорошо, но зачем это делать, если я не перезаписываю страницу, а только делаю предпросмотр для себя? Поэтому предлагаю убрать это требование для предварительного просмотра изменений.&lt;br /&gt;
&lt;br /&gt;
Не знал куда обратиться, поэтому написал сюда. Извините, если не по адресу.&lt;/div&gt;</summary>
		<author><name>ShKaF</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_RMQ_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B&amp;diff=69611</id>
		<title>Решение RMQ с помощью разреженной таблицы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_RMQ_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B&amp;diff=69611"/>
				<updated>2019-01-29T06:53:36Z</updated>
		
		<summary type="html">&lt;p&gt;ShKaF: /* Идемпотентность */ Исправил ошибку&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Разреженная таблица''' (англ. ''sparse table'') позволяет решать задачу online static RMQ (получение минимума или максимума на отрезке, когда элементы массива не могут изменяться, а запросы поступают последовательно) за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; на запрос, с предподсчётом за &amp;lt;tex&amp;gt;O(N \log N)&amp;lt;/tex&amp;gt; и использованием &amp;lt;tex&amp;gt;O(N \log N)&amp;lt;/tex&amp;gt; памяти.&lt;br /&gt;
&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition = Дан массив &amp;lt;tex&amp;gt;A[1 \ldots N]&amp;lt;/tex&amp;gt; целых чисел. Поступают запросы вида &amp;lt;tex&amp;gt;(l, r)&amp;lt;/tex&amp;gt;, для каждого из которых требуется найти минимум среди элементов &amp;lt;tex&amp;gt;A[l], A[l + 1], \ldots, A[r] &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Разреженная таблица ==&lt;br /&gt;
Разреженная таблица — двумерная структура данных &amp;lt;tex&amp;gt;ST[i][j]&amp;lt;/tex&amp;gt;, для которой выполнено следующее: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;ST[i][j]=\min\left(A[i], A[i+1], \ldots, A[i+2^{j}-1]\right),\quad j \in [0 \ldots \log N]&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Иначе говоря, в этой таблице хранятся минимумы на всех отрезках, длины которых равны степеням двойки. Объём памяти, занимаемый таблицей, равен &amp;lt;tex&amp;gt;O(N \log N)&amp;lt;/tex&amp;gt;, и заполненными являются только те элементы, для которых &amp;lt;tex&amp;gt;i+2^j \leqslant N &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Простой метод построения таблицы заключён в следующем реккурентном соотношении:&lt;br /&gt;
$$&lt;br /&gt;
ST[i][j]=&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\min\left(ST[i][j-1], ST[i+2^{j-1}][j-1]\right),&amp;amp;\text{если $j &amp;gt; 0$;}\\&lt;br /&gt;
A[i], &amp;amp;\text{если $j = 0$;}&lt;br /&gt;
\end{cases}&lt;br /&gt;
$$&lt;br /&gt;
&lt;br /&gt;
== Идемпотентность ==&lt;br /&gt;
Такая простота достигается за счет идемпотентности операции минимум: &amp;lt;tex&amp;gt;\min(a, a)=a&amp;lt;/tex&amp;gt;. Это один из ключевых моментов этого метода, так как она позволяет нам корректно считать минимум в области пересечения отрезков. &lt;br /&gt;
&lt;br /&gt;
Пусть $\circ$ — произвольная бинарная операция, которая удовлетворяет свойствам:&lt;br /&gt;
* ассоциативности: $a \circ (b \circ c) = (a \circ b) \circ c $,&lt;br /&gt;
* коммутативности: $a \circ b = b \circ a$, &lt;br /&gt;
* идемпотентности: $a \circ a = a $.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=&lt;br /&gt;
$a_l \circ a_{l+1} \circ \ldots \circ a_r = (a_l \circ a_{l+1} \circ \ldots \circ a_{l + k}) \circ (a_{r - k} \circ a_{r - k + 1} \circ \ldots \circ a_r)$, где $\frac{r - l}{2} \leqslant k \leqslant  r - l$.&lt;br /&gt;
|proof=&lt;br /&gt;
Отрезок $(a_{r-k}, a_{l + k})$ содержится в обоих операндах правой части. Значит, каждый элемент из него входит два раза. По коммутативности мы можем располагать элементы в любом порядке, по ассоциативности мы можем выполнять операции в произвольном порядке, поэтому повторяющие в правой части элементы мы можем расположить рядом друг с другом и затем по идемпотентности один из них убрать. Переставляя оставшиеся элементы в правой затем легко получаем выражение в левой части.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение к задаче RMQ ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt; Предпосчитаем для длины отрезка &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; величину &amp;lt;tex&amp;gt;\lfloor \log_2l \rfloor&amp;lt;/tex&amp;gt;. Для этого введем функцию &amp;lt;tex&amp;gt;fl&amp;lt;/tex&amp;gt; (от ''floor'', т.к. логарифм округляется вниз):&lt;br /&gt;
&lt;br /&gt;
 '''int''' '''fl'''('''int''' len):&lt;br /&gt;
     '''if''' len &amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt; 1&lt;br /&gt;
         '''return''' 0&lt;br /&gt;
     '''else'''&lt;br /&gt;
         '''return''' fl(&amp;lt;tex&amp;gt;\lfloor \cfrac{len}{2}\rfloor&amp;lt;/tex&amp;gt;) + 1&lt;br /&gt;
&lt;br /&gt;
Вычисление &amp;lt;tex&amp;gt;fl[l]&amp;lt;/tex&amp;gt; происходит за &amp;lt;tex&amp;gt;O(\log (l))&amp;lt;/tex&amp;gt;. А так как длина может принимать &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; различных значений, то суммарное время предпосчета составляет &amp;lt;tex&amp;gt;O(N\log N)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть теперь дан запрос &amp;lt;tex&amp;gt;(l, r)&amp;lt;/tex&amp;gt;.  Заметим, что &amp;lt;tex&amp;gt;\min(A[l], A[l+1], \ldots, A[r]) = \min\left(ST[l][j], ST[r-2^j+1][j]\right)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j = \max \{k \mid 2^k \leqslant r - l + 1\}&amp;lt;/tex&amp;gt;, то есть логарифм длины запрашиваемого отрезка, округленный вниз. Но эту величину мы уже предпосчитали, поэтому запрос выполняется за &amp;lt;tex&amp;gt;O (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:SparseTableRMQ.png|right|Решение задачи RMQ на разреженной таблице]]&lt;br /&gt;
&lt;br /&gt;
Из выше доказанной теоремы следует, что этот метод работает не только с операцией минимум, но и с любой идемпотентной, ассоциативной и коммутативной операцией. Таким образом мы получаем целый класс задач, решаемых разреженной таблицей.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Сведение задачи LCA к задаче RMQ | Сведение задачи LCA к задаче RMQ]]&lt;br /&gt;
* [[Алгоритм Фарака-Колтона и Бендера | Алгоритм Фарака-Колтона и Бендера]]&lt;br /&gt;
* [[Сведение задачи RMQ к задаче LCA | Сведение задачи RMQ к задаче LCA]]&lt;br /&gt;
* [[ Heavy-light декомпозиция |  Heavy-light декомпозиция]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации==&lt;br /&gt;
* ''Bender, M.A., Farach-Colton, M. et al.'' — '''Lowest common ancestors in trees and directed acyclic graphs'''. — J. Algorithms 57(2) (2005) —  с. 75–94.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Задача о наименьшем общем предке]]&lt;/div&gt;</summary>
		<author><name>ShKaF</name></author>	</entry>

	</feed>