<?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=217.79.4.130&amp;*</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=217.79.4.130&amp;*"/>
		<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/217.79.4.130"/>
		<updated>2026-06-11T14:09:21Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B8%D0%B0%D0%BC%D1%81%D0%BA%D0%B0%D1%8F_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C&amp;diff=84301</id>
		<title>Сиамская нейронная сеть</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B8%D0%B0%D0%BC%D1%81%D0%BA%D0%B0%D1%8F_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C&amp;diff=84301"/>
				<updated>2022-09-01T08:20:45Z</updated>
		
		<summary type="html">&lt;p&gt;217.79.4.130: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Сиамская нейронная сеть''' (англ. Siamese neural network) — это разновидность [[Нейронные сети, перцептрон|искусственной нейронной сети]] (англ. artificial neural network), которая состоит из двух идентичных нейронных подсетей с одинаковыми наборами весов. Данный вид сетей позволяет сравнить вектора признаков двух объектов с целью выделить их семантическое сходство или различие. Сиамская нейронная сеть представляет собой нелинейное [[Отображения|отображение]] данных с целью приблизить друг к другу схожие объекты и разнести различные объекты на максимально возможное расстояние. Сиамские сети получили свое название от сиамских близнецов, физически приросших друг к другу, из-за использования сразу двух подсетей, разделяющих один набор весов. Эти подсети могут быть представлены многослойными [[Нейронные сети, перцептрон|перцептронами]] (англ. multilayer perceptron), [[Сверточные нейронные сети|сверточными нейронными сетями]] (англ. convolutional neural network) и другими.&lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим следующую ситуацию: некоторая компания хочет создать систему, которая, основываясь на фотографии лица человека, могла бы установить, является ли он ее сотрудником. В этом случае она, например, разрешает ему доступ на территорию предприятия. Пусть в компании работает &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; человек. Тогда может быть выделено &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; классов (&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; классов сотрудников и один класс не сотрудника). Каждый из этих классов может быть записан в форме вектора длины &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; с помощью one-hot кодирования. Для решения задачи классификации фотографии в один из выделенных &amp;lt;math&amp;gt;n+1&amp;lt;/math&amp;gt; классов может быть использована сверточная нейронная сеть, возвращающая класс сотрудника в векторной форме. Однако число сотрудников компании может меняться, старые работники могут увольняться, а на их место приходить новые. Каждое такое изменение потребовало бы переобучения всей сети, что может быть накладно для крупных компаний. Более того, не все сотрудники имеют большое количество своих фотографий (необходимое для обучения сверточной нейронной сети), или не желают делиться большей их частью. &lt;br /&gt;
&lt;br /&gt;
Решением данной проблемы может быть обучение сети не распознавать каждого отдельного сотрудника, а находить сходство между фотографиями двух людей. В качестве таких фотографий могут быть использованы фотография человека, который пытается попасть на территорию предприятия, и фотография одного из сотрудников компании. Например, мы можем выбрать некоторый предел &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; и обучить сеть так, чтобы она возвращала значение &amp;lt;math&amp;gt;\phi &amp;lt; \tau&amp;lt;/math&amp;gt;, если фотографии похожи, и &amp;lt;math&amp;gt;\phi \geq \tau&amp;lt;/math&amp;gt;, если они разные. В таком случае нам будет достаточно попарно сравнить с помощью нашей сети фотографию посетителя с фотографиями сотрудников компании, и, если выходное значение для одной из пар будет меньше &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;, мы можем с высокой уверенностью сказать, что наш посетитель является сотрудником компании. Такое решение может быть реализовано с помощью сиамских нейронных сетей, которые рассмотрены ниже.&lt;br /&gt;
&lt;br /&gt;
== Сиамская нейронная сеть ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:siamese_neural_net.png|thumb|300px| Рисунок 1 — обобщенная архитектура сиамской нейронной сети.]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Siamese neural net architecture types.png|thumb|300px| Рисунок 2 — основные типы архитектур сиамской нейронной сети.]]&lt;br /&gt;
&lt;br /&gt;
Зададимся набором данных  &amp;lt;math&amp;gt;\{(x_i, y_i), i = 1, \dots, n\}&amp;lt;/math&amp;gt;, состоящим из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; векторов признаков &amp;lt;math&amp;gt;x_i \in R^m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; с метками &amp;lt;math&amp;gt;y_i \in \{1, 2, \dots, C\}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; — число классов. Создадим обучающий набор данных &amp;lt;math&amp;gt;S = \{(x_i, x_j, z_{ij}), i = 1, \dots, n; j = 1, \dots, n\}&amp;lt;/math&amp;gt;, состоящих из пар &amp;lt;math&amp;gt;(x_i, x_j)&amp;lt;/math&amp;gt; с бинарными метками &amp;lt;math&amp;gt;z_{ij}&amp;lt;/math&amp;gt;. Если оба вектора признаков &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_j&amp;lt;/math&amp;gt; принадлежат к одному и тому же классу, то &amp;lt;math&amp;gt;z_{ij} = 0&amp;lt;/math&amp;gt;, иначе &amp;lt;math&amp;gt;z_{ij} = 1&amp;lt;/math&amp;gt;. Разделим обучающий набор данных &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; на два подмножества: одно — со схожими парами (или с &amp;lt;math&amp;gt;z_{ij} = 0&amp;lt;/math&amp;gt;), другое — с различающимися парами (или с &amp;lt;math&amp;gt;z_{ij} = 1&amp;lt;/math&amp;gt;). Будем подавать наши пары векторов на вход сиамской сети.&lt;br /&gt;
&lt;br /&gt;
В общем случае сиамская сеть состоит из двух подсетей, выходы которых  подаются на вход другого модуля, который генерирует конечный выход. Рассмотрим Рис. 1, на котором &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_j&amp;lt;/math&amp;gt; — это входы, &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; — общие веса/параметры, а &amp;lt;math&amp;gt;h_i \in R^D&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h_j \in R^D&amp;lt;/math&amp;gt; — выходы обеих подсетей. Сиамская сеть представляет собой отображение &amp;lt;math&amp;gt;h_i = f(x_i)&amp;lt;/math&amp;gt;, для которого Евклидово расстояние &amp;lt;math&amp;gt;d(h_i, h_j)&amp;lt;/math&amp;gt; максимально мало́ при &amp;lt;math&amp;gt;y_i=y_j&amp;lt;/math&amp;gt; и максимально велико при &amp;lt;math&amp;gt;y_i \neq y_j&amp;lt;/math&amp;gt;. Сеть возвращает оценку &amp;lt;math&amp;gt;o_W&amp;lt;/math&amp;gt; того, насколько различны &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_j&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Существует три главных вида структуры сиамских нейронных сетей (см. Рис. 2):&lt;br /&gt;
# Входы &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_j&amp;lt;/math&amp;gt; подаются на две параллельные подсети, представляющие собой две отдельные сети с одними и теми же весами и смещениями. Для выходов &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;h_j&amp;lt;/math&amp;gt; этих сетей подсчитывается метрика расстояния &amp;lt;math&amp;gt;d(h_i, h_j)&amp;lt;/math&amp;gt;, которая подается на выходной слой, оценивающий схожесть &amp;lt;math&amp;gt;o_W&amp;lt;/math&amp;gt; между входами подсетей.&lt;br /&gt;
# Несколько последних слоев подсетей объединены, за ними следуют несколько дополнительных слоев. На последнем слое применяется softmax-преобразование. Данная архитектура известна под названием In-network stacking.&lt;br /&gt;
# Оба входа &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_j&amp;lt;/math&amp;gt; конкатенируются и подаются на вход единой сети, завершающейся слоем с softmax-преобразованием.&lt;br /&gt;
Третья архитектура полезна для детального сравнения двух объектов, необходимого, например, при отслеживании пешеходов&amp;lt;ref name=&amp;quot;pedestrian&amp;quot;&amp;gt;L. Leal-Taixé, C. Canton-Ferrer and K. Schindler, &amp;quot;Learning by Tracking: Siamese CNN for Robust Target Association,&amp;quot; 2016 IEEE Conference on Computer Vision and Pattern Recognition Workshops (CVPRW), Las Vegas, NV, 2016, pp. 418-425, doi: 10.1109/CVPRW.2016.59.&amp;lt;/ref&amp;gt;. Первые две архитектуры показывают хорошие результаты при классификации.&lt;br /&gt;
&lt;br /&gt;
Существует много различных [[Функция потерь и эмпирический риск|функций потерь]] (англ. loss function) для обучения сиамских нейронных сетей. Рассмотрим две наиболее популярные из них. Первая — '''contrastive loss function''' — использует пары объектов &amp;lt;math&amp;gt;(x_i, x_j)&amp;lt;/math&amp;gt;, которые могут принадлежать как одному, так и разным классам:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;l(x_i, x_j, z_{ij}) = (1-z_{ij})||h_i-h_j||_2^2+z_{ij}\max(0, \tau-||h_i-h_j||_2^2)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; — это заранее заданный предел. Вторая функция потерь — '''triplet loss function''' — использует объект рассматриваемого класса (или якорь, англ. anchor) &amp;lt;math&amp;gt;h_i&amp;lt;/math&amp;gt;, с которым будет проводиться сравнение, а также два других объекта: один принадлежащий к тому же классу (англ. neighbor) &amp;lt;math&amp;gt;h_j&amp;lt;/math&amp;gt;, и один не принадлежащий к этому классу (англ. distant) &amp;lt;math&amp;gt;h_k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;l(x_i, x_j, x_k) = \max(0, ||h_i-h_j||_2^2 - ||h_i-h_k||_2^2 + \alpha)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; — это заранее заданный предел. Обе функции стремятся приблизить похожие объекты и увеличить расстояние между разными объектами. В некоторых случаях возможно их совместное применение для достижения наилучшего результата&amp;lt;ref name=&amp;quot;both&amp;quot;&amp;gt;X. Di and V. M. Patel. Deep tattoo recognition. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition Workshops, pages 51–58, 2016.&amp;lt;/ref&amp;gt;. Тогда [[Функция потерь и эмпирический риск|эмпирический риск]] (англ. error function) равен&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;L(W) = \sum l + \mu R(W)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;\sum l&amp;lt;/math&amp;gt; — это результат суммирования значений функции потерь по всему обучающему набору данных, &amp;lt;math&amp;gt;R(W)&amp;lt;/math&amp;gt; — это член, регуляризующий обобщающую способность сети, &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; — это матрица параметров нейронных подсетей, а &amp;lt;math&amp;gt;\mu&amp;lt;/math&amp;gt; — это гиперпараметр, отвечающий за степень регуляризации. Для минимизации этой функции обычно применяется [[Стохастический градиентный спуск|градиентный спуск]] (англ. gradient descent).&lt;br /&gt;
&lt;br /&gt;
== Сеть триплетов ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Triplet neural net.png|thumb|300px| Рисунок 3 — обобщенная архитектура сети триплетов.]]&lt;br /&gt;
&lt;br /&gt;
'''Сеть триплетов''' (англ. Triplet network) (см. Рис. 3) представляет собой модификацию сиамской сети с тремя сверточными нейронными подсетями с общими параметрами. В центральную подсеть подается объект &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; рассматриваемого класса &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;. В одну из двух оставшихся подсетей подается объект &amp;lt;math&amp;gt;x_j&amp;lt;/math&amp;gt; того же класса &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; (положительный пример), а в другую — объект &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;, не принадлежащий к классу &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt; (негативный пример). Сочетание центральной подсети с каждой из двух других подсетей образует сиамскую сеть. Выходы &amp;lt;math&amp;gt;o_W^{(0)}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;o_W^{(1)}&amp;lt;/math&amp;gt; обеих сиамских сетей подаются на последний слой-компаратор. Было отмечено, что при обучении сети триплетов в качестве функции потерь удобнее использовать среднеквадратическую ошибку&amp;lt;ref name=&amp;quot;triplet&amp;quot;&amp;gt;Elad Hoffer, Nir Ailon, &amp;quot;Deep metric learning using Triplet network&amp;quot;, 2018.[https://arxiv.org/abs/1412.6622]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Как сиамская сеть, так и сеть триплетов показывают хорошие результаты при сравнении изображений. Однако, в отличие от сиамской сети, сеть триплетов не требует нормализации данных.&lt;br /&gt;
&lt;br /&gt;
== Применение==&lt;br /&gt;
&lt;br /&gt;
Сиамские нейронные сети  нашли широкое применение в области [[Компьютерное зрение|компьютерного зрения]], [[Распознавание речи|распознавания речи]] и [[Обработка естественного языка|обработки естественных языков]]. Были предложены модели для распознавания манеры ходьбы&amp;lt;ref name=&amp;quot;gait&amp;quot;&amp;gt;C. Zhang, W. Liu, H. Ma and H. Fu, &amp;quot;Siamese neural network based gait recognition for human identification,&amp;quot; 2016 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), Shanghai, 2016, pp. 2832-2836, doi: 10.1109/ICASSP.2016.7472194.&amp;lt;/ref&amp;gt;, поведения пользователя в интернете&amp;lt;ref name=&amp;quot;userid&amp;quot;&amp;gt;Y. Qiao, Y. Wu, F. Duo, W. Lin and J. Yang, &amp;quot;Siamese Neural Networks for User Identity Linkage Through Web Browsing,&amp;quot; in IEEE Transactions on Neural Networks and Learning Systems, vol. 31, no. 8, pp. 2741-2751, Aug. 2020, doi: 10.1109/TNNLS.2019.2929575.&amp;lt;/ref&amp;gt;, множественного трекинга пешеходов&amp;lt;ref name=&amp;quot;pedestrian&amp;quot;&amp;gt;L. Leal-Taixé, C. Canton-Ferrer and K. Schindler, &amp;quot;Learning by Tracking: Siamese CNN for Robust Target Association,&amp;quot; 2016 IEEE Conference on Computer Vision and Pattern Recognition Workshops (CVPRW), Las Vegas, NV, 2016, pp. 418-425, doi: 10.1109/CVPRW.2016.59.&amp;lt;/ref&amp;gt;, и т.д.&amp;lt;ref name=&amp;quot;bamknote&amp;quot;&amp;gt;M. E. Hossain, A. Islam and M. S. Islam, &amp;quot;A Proficient Model to Classify Bangladeshi Bank Notes for Automatic Vending Machine Using a Tıny Dataset with One-Shot Learning &amp;amp; Siamese Networks,&amp;quot; 2020 11th International Conference on Computing, Communication and Networking Technologies (ICCCNT), Kharagpur, India, 2020, pp. 1-4, doi: 10.1109/ICCCNT49239.2020.9225405.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;parkinson&amp;quot;&amp;gt;S. Bhati, L. M. Velazquez, J. Villalba and N. Dehak, &amp;quot;LSTM Siamese Network for Parkinson’s Disease Detection from Speech,&amp;quot; 2019 IEEE Global Conference on Signal and Information Processing (GlobalSIP), Ottawa, ON, Canada, 2019, pp. 1-5, doi: 10.1109/GlobalSIP45357.2019.8969430.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;vehicle&amp;quot;&amp;gt;I. O. de Oliveira, K. V. O. Fonseca and R. Minetto, &amp;quot;A Two-Stream Siamese Neural Network for Vehicle Re-Identification by Using Non-Overlapping Cameras,&amp;quot; 2019 IEEE International Conference on Image Processing (ICIP), Taipei, Taiwan, 2019, pp. 669-673, doi: 10.1109/ICIP.2019.8803810.&amp;lt;/ref&amp;gt; Данный вид сетей также может быть использован для снижения размерности.&lt;br /&gt;
&lt;br /&gt;
Однако наиболее популярное применение сиамских сетей — это распознавание лиц. Первые автоматизированные решения в этой области появились еще в 1960-е годы. Однако свою популярность распознание лиц приобрело после публикации метода eigenface&amp;lt;ref name=&amp;quot;eigenface&amp;quot;&amp;gt;M. Turk and A. Pentland, “Eigenfaces for recognition,” Journal of cognitive neuroscience, vol. 3, no. 1, pp. 71–86, 1991.&amp;lt;/ref&amp;gt;, использующего алгоритмы снижения размерности (например, [[Метод главных компонент (PCA)|PCA]]) для компактного представления признаков. Позже, данное решение было улучшено с помощью применения сверточных нейронных сетей. Сиамские нейронные сети являются усовершенствованием над нейронными сетями и часто используются в задачах, когда фактическое число классов велико или не известно во время обучения, а количество объектов в классах мало.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [[Нейронные сети, перцептрон]]&lt;br /&gt;
* [[Сверточные нейронные сети]]&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* Lev V. Utkin, Maxim S. Kovalev, Ernest M. Kasimov, &amp;quot;An explanation method for Siamese neural networks&amp;quot;, 2019. [https://arxiv.org/abs/1911.07702]&lt;br /&gt;
* A. Nandy, S. Haldar, S. Banerjee and S. Mitra, &amp;quot;A Survey on Applications of Siamese Neural Networks in Computer Vision,&amp;quot; 2020 International Conference for Emerging Technology (INCET), Belgaum, India, 2020, pp. 1-5, doi: 10.1109/INCET49848.2020.9153977.&lt;br /&gt;
* H. Wu, Z. Xu, J. Zhang, W. Yan and X. Ma, &amp;quot;Face recognition based on convolution siamese networks,&amp;quot; 2017 10th International Congress on Image and Signal Processing, BioMedical Engineering and Informatics (CISP-BMEI), Shanghai, 2017, pp. 1-5, doi: 10.1109/CISP-BMEI.2017.8302003.&lt;br /&gt;
* Coursera. Convolutional Neural Networks [https://www.coursera.org/learn/convolutional-neural-networks/home/welcome].&lt;br /&gt;
&lt;br /&gt;
[[Категория:Нейронные сети]] [[Категория:Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>217.79.4.130</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%A2%D0%98%D0%B3%D1%80_2022_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0&amp;diff=82211</id>
		<title>Список заданий по ТИгр 2022 весна</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%A2%D0%98%D0%B3%D1%80_2022_%D0%B2%D0%B5%D1%81%D0%BD%D0%B0&amp;diff=82211"/>
				<updated>2022-02-24T12:26:09Z</updated>
		
		<summary type="html">&lt;p&gt;217.79.4.130: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# Для комбинаторной игры $A=\{L|R\}$ определим игру $-A$. $-0=0$, для других игр пусть $L=\{g^L_1, g^L_2, \ldots\}$, $R=\{g^R_1, g^R_2, \ldots\}$, определим $-L=\{-g^L_1, -g^L_2, \ldots\}$, $-R$ определяется аналогично, $-A = \{-R|-L\}$. Что можно сказать про игру $A+(-A)$? Далее будем обозначать игру $A + (-B)$ как $A-B$.&lt;br /&gt;
# На лекции было введено определение эквивалентности $A \approx B$ если для любой игры $C$ исход $A+C$ и $B+C$ одинаковый. Можно ввести альтернативное определение: скажем, что $A\approx  B$, если $A-B$ проигрышная для текущего игрока (класс $P$). Докажите, что эти определения дают одно и то же отношение эквивалентности. Далее нам не очень интересно различать эквивалентные игры, поэтому мы будем для простоты  называть их равными и использовать значок $=$.&lt;br /&gt;
# Докажите формально, что сумма игр ассоциативна и коммутативна.&lt;br /&gt;
# Профессор дал неправильное определение и определил противоположную игру для $A=\{L|R\}$ как $\mathbin{\scriptstyle\dot{\smash{\textstyle-}}} A = \{R|L\}$. Поясните, почему определение профессора плохо подходит для введения операции &amp;quot;минус&amp;quot; на играх.&lt;br /&gt;
# Профессор дал неправильное определение и определил противоположную игру для $A=\{L|R\}$ как $!A = \{!L|!R\}$. Поясните, почему определение профессора плохо подходит для введения операции &amp;quot;минус&amp;quot; на играх.&lt;br /&gt;
# Будем говорить, что игра $A$ является положительной, если в ней выигрывает игрок L и писать $A&amp;gt;0$. Докажите, что если $A &amp;gt; 0$ и $B &amp;gt; 0$, то $A+B&amp;gt;0$.&lt;br /&gt;
# Будем говорить, что $A &amp;gt; B$, если $A-B&amp;gt;0$. Докажите, что отношение $&amp;gt;$ является антирефлексивным, антисимметричным и транзитивным (строгий порядок).&lt;br /&gt;
# Определим неотрицательные целые числа по формуле $G_0 = \{|\}$, $G_n = \{G_{n-1}|\}$ (далее мы будем вместо $G_n$ писать просто $n$, но в этом задании без отдельного обозначения не обойтись). Докажите, что $G_n+G_m = G_{n+m}$.&lt;br /&gt;
# Определите отрицательные целые числа. Докажите, что все законы для целых чисел как для группы по сложению выполнены. Мы вернемся к числам в одной из ближайших лекций, а пока переключаемся на матричные игры.&lt;br /&gt;
# Приведите пример биматричной игры, в которой есть более одной различной точки равновесия по Нэшу, выигрыши игроков в которых различаются.&lt;br /&gt;
# Лемма о масштабе Пусть матрица $A$ имеет седловую точку. Рассмотрим матрицу $B$, определенную соотношением $b_{ij} = ka_{ij}+d$, $k &amp;gt; 0$. Докажите, что матрица $B$ имеет седловую точку, причем множества координат седловых точек этих матриц совпадают.&lt;br /&gt;
# Рассмотрим пример экономической игры с бесконечным множеством стратегий: дуополия Курно. На рынке есть две фирмы, стратегии которых заключаются в производстве $q_1$ и $q_2$ товара, соответственно. Цена за единицу товара равна $p-q_1-q_2$. Себестоимость единицы товара $c$. Соответственно, выигрыши игроков равны $u_1(q_1,q_2)=(p-q_1-q_2-c)q_1$ и $u_2(q_1,q_2)=(p-q_1-q_2-c)q_2$. Найдите равновесие по Нэшу для дуополии Курно.&lt;br /&gt;
# Дуополия Бертрана. На рынке есть две фирмы, которые производят различные товары $A$ и $B$, соответственно, а их стратегии заключаются в установлении цены на товары $c_1$ и $c_2$, соответственно. После этого фирмы продают $Q_1 = q-c_1+kc_2$ и $Q_2 = q-c_2+kc_1$ единиц товара, соответственно. Себестоимость единицы товара $c$. Запишите выигрыши игроков в дуополии Бертрана и найдите равновесие по Нэшу.&lt;br /&gt;
# Крестики и крестики. Два игрока играют на поле $1 \times n$ (\mbox{$n \ge 3$}), своим ходом игрок может поставить крестик в любую свободную клетку. Игрок, после хода которого на поле есть ряд из трех крестиков, побеждает. Предложите полиномиальный от $n$ алгоритм определения победителя в этой игре.&lt;br /&gt;
# Рассмотрим окружность, вдоль которой нанесены $n$ различных точек. За один ход разрешается провести хорду, которая не должна иметь общих точек с ранее проведенными хордами (в том числе они не должны иметь общих концов). Кто не может сделать ход, проигрывает. Предложите полиномиальный от $n$ алгоритм определения победителя в этой игре.&lt;br /&gt;
# Ним с разбиением. В кучках лежит $a_1, \ldots, a_n$ камней. За один ход можно или забрать из кучки некоторое количество камней, либо разбить кучку на две непустых. Проанализируйте игру ним с разбиением.&lt;br /&gt;
# Зеленый хакенбуш на графе с циклами. Предложите алгоритм анализа игры хакенбуш на графе, который не обязательно является деревом.&lt;br /&gt;
# Малыш и Карлсон. У Малыша и Карлсона есть торт, имеющий вид прямоугольного параллелепипеда, размером $a\times b\times c$ сантиметров, где $a$, $b$ и $c$~--- целые числа. Они играют в следующую игру: Малыш и Карлсон делают ходы по очереди. За один ход игрок может разрезать торт параллельно одной из его граней на две неравные части (длины ребер каждой из частей  снова должны быть целыми), после чего съесть меньшую часть. Тот, кто не может сделать ход, поскольку торт имеет размер $1\times 1\times 1$, проигрывает. Определить, кто выигрывает в игре за $O(\max(a, b, c)^2)$.&lt;br /&gt;
# Шахматы Доусона. Рассмотрим доску $3 \times n$, на первом ряду которой стоят белые пешки, а на последнем --- черные пешки. За один ход можно либо подвинуть свою пешку на одну клетку вперед (клетка, на которую перемещается пешка, должна быть свободна), либо побить пешку соперника на одну клетку вперед по диагонали. Если есть возможность побить пешку, то бить обязательно. Кто не может сделать ход, проигрывает. Предложите алгоритм определения победителя в шахматах Доусона за полином от $n$.&lt;br /&gt;
# Посчитайте функцию Гранди для игры ним, в которой кучки упорядочены некоторым фиксированным образом, и количество камней в кучках не убывает. Это же свойство должно сохраниться после каждого хода (порядок кучек при этом остается прежним). Например, из позиции $\langle 2, 3, 3, 5\rangle$ возможен ход в позицию $\langle 2, 3, 3, 3\rangle$ или $\langle 0, 3, 3, 5\rangle$, а в позицию $\langle 2, 3, 3, 2\rangle$~--- нет.&lt;br /&gt;
# Сумму игр на одном и том же графе можно интерпретировать как игру, в которой по графу перемещается не одна фишка, а несколько. За ход игрок должен переместить одну их фишек, при этом несколько фишек могут одновременно находиться в вершине графа. Введем понятие игр с аннигиляцией. Игра протекает таким же образом, но если две фишки оказываются в одной вершине графа, они &amp;lt;&amp;lt;аннигилируют&amp;gt;&amp;gt;~--- обе фишки удаляются из графа. Покажите, что в игре с аннигиляцией на ациклическом графе выигрывает тот же игрок, что и в игре без аннигиляции (обычной прямой сумме игр). Почему это рассуждение не проходит в случае, если в графе есть циклы?&lt;br /&gt;
# В этой и следующих четырех задачах в качестве носителя рассматривается $\mathbb{Z}^+$. Докажите, что $a \otimes b \le ab$.&lt;br /&gt;
# Докажите, что $a \otimes 1 = a$.&lt;br /&gt;
# Докажите, что $(a\oplus b)\otimes c = a\otimes c \oplus b \otimes c$.&lt;br /&gt;
# Вычислите $2^k\otimes 2^n$. Пользуясь этим и предыдущим заданием, предложите способ вычислить $a\otimes b$ для любых $a$ и $b$.&lt;br /&gt;
# Докажите, что для любого $a$ существует единственное $a^{-1}$, что $a\otimes a^{-1}=1$. Тем самым завершим доказательство, что получается поле.&lt;br /&gt;
# Докажите, что для любого $n$ множество чисел от $0$ до $2^{2^n}-1$ с операциями $\oplus$ и $\otimes$ образует поле.&lt;br /&gt;
# Чему равно $\omega \otimes k$ для неотрицательного целого $k$?&lt;br /&gt;
# Чему равно $\omega \otimes \omega$?&lt;br /&gt;
# Чему равно $\omega \otimes \omega \otimes \omega$ (спойлер: 2)?&lt;br /&gt;
# Игра в поддавки: кто не может сделать ход, тот выигрывает. Предъявите пример суммы двух проигрышных игр в поддавки, которая является выигрышной.&lt;br /&gt;
# Ним в поддавки. Докажите, что за исключением случая, когда все кучки имеют размер $1$, позиция в ниме в поддавки является выигрышной тогда и только тогда, когда она является выигрышной в обычном ниме.&lt;br /&gt;
# В этой серии только четкие игры. Немного арифметики. Постройте красно-синий бамбук Хакенбуш для игры со значением $3/4$. Докажите, что $3/4+3/4+3/4+3/4=3$.&lt;br /&gt;
# Постройте красно-синий бамбук Хакенбуш для игры со значением $1/3$. Докажите, что $1/3+1/3+1/3=3$.&lt;br /&gt;
# Постройте красно-синий бамбук Хакенбуш для игры со значением $1/4$. Докажите, что $1/4+3/4=1$.&lt;br /&gt;
# Одноцветный Хакенбуш. Докажите, что если компонента в Хакенбуше имеет только синие ребра, то значение этой игры равно количеству ребер вне зависимости от структуры графа.&lt;br /&gt;
# Докажите, что если $A=\{L|R\}$, где для всех $a_L \in L$, $a_R \in R$ выполнено $a_L &amp;lt; a_R$, то для всех $a_L \in L$, $a_R \in R$ выполнено $a_L &amp;lt; A &amp;lt; a_R$.&lt;br /&gt;
# Разрезание пирога. Есть прямоугольный клетчатый пирог, высота $m$, ширина $n$. Своим ходом L может разрезать пирог горизонтальным разрезом по границам квадратиков, а R - вертикальным разрезом по границам квадратиков. Игра продолжается на нескольких пирогах. Кто не может ходить, проигрывает. Чему равно значение игры на пироге $1\times n$? $m\times 1$?&lt;br /&gt;
# Чему равно значение игры в разрезание пирога для пирога $m \times n$?&lt;br /&gt;
# Разрезание пирога 2.0. Теперь L разрезает пирог горизонтальным разрезом по границам квадратиков на любое число равных частей. Аналогично поступает R, но вертикальным разрезом. Проанализируйте эту игру.&lt;br /&gt;
# Для определения произведения игр с лекции докажите ассоциативность и коммутативность.&lt;br /&gt;
# Докажите, что $a\cdot 1=a$.&lt;br /&gt;
# Докажите, что $a\cdot 0=0$.&lt;br /&gt;
# Докажите, что $a\cdot (-b)=-(a\cdot b)$.&lt;br /&gt;
# Докажите, что для целых чисел $a\cdot b = (ab)$.&lt;br /&gt;
# Докажите, что для целого положительного $k$ выполнено $a\cdot k = a+a+\ldots+a$ (сумма $k$ слагаемых)&lt;br /&gt;
# Докажите распределительный закон $(a+b)\cdot c=a\cdot c + b\cdot c$.&lt;br /&gt;
# Докажите, что для любого $a$ существует игра $a^{-1}$. Тем самым класс $No$ наделен структурой поля.&lt;br /&gt;
# Чему равно $\omega\cdot k$ для целого $k$?&lt;br /&gt;
# Постройте игру $1/\omega$.&lt;br /&gt;
# Постройте игру $\sqrt{\omega}$.&lt;/div&gt;</summary>
		<author><name>217.79.4.130</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81280</id>
		<title>Список заданий по продвинутым алгоритмам 2021 осень</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81280"/>
				<updated>2021-12-04T19:11:20Z</updated>
		
		<summary type="html">&lt;p&gt;217.79.4.130: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# $1 | p_i=1 | L_{max}$.&lt;br /&gt;
# $1 | r_i, d_i=d | L_{max}$.&lt;br /&gt;
# $1 | prec, r_i, p_i=1 | L_{max}$.&lt;br /&gt;
# Рассмотрим задачу $1 | p_i = 1, d_i | -$. Докажите, что подмножества работ, которые можно выполнить, образуют семейство независимых множеств некоторого матроида.&lt;br /&gt;
# $1 | p_i = 1, d_i | \sum w_iU_i$. Время $O(n\log n)$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum U_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum w_iU_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = p, pmtn, r_i | \sum w_iU_i$ за $O(n^{10})$.&lt;br /&gt;
# $1 || \sum U_i$&lt;br /&gt;
# $1 | r_i, p_i = p | \sum w_iC_i$ за $O(n^7)$&lt;br /&gt;
# Обозначение outtree означает, что граф зависимостей представляет собой исходящее дерево: каджая работа зависит не более чем от одной другой. $1 | outtree | \sum w_iC_i$&lt;br /&gt;
# Обозначение intree означает, что граф зависимостей представляет собой входящее дерево: от каждой работы зависит не более одной другой. $1 | intree | \sum w_iC_i$&lt;br /&gt;
# $P | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | pmtn, r_i | L_{max}$&lt;br /&gt;
# $Q | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | p_i = p, r_i, d_i | \sum C_i$ за $O(n^3 \log n)$ (бонус за $O(n^3 \log\log n)$)&lt;br /&gt;
# $P | p_i = 1 | \sum w_iU_i$ - доведите доказательство с пары до конца&lt;br /&gt;
# $P | p_i = 1 | \sum w_iC_i$&lt;br /&gt;
# $P | p_i = 1, pmtn | \sum w_iC_i$&lt;br /&gt;
# $Q | pmtn | \sum C_i$&lt;br /&gt;
# $Q | pmtn | \sum f_i$ (напомним, что f_i - произвольная неубывающая функция, может быть своя у каждой работы)&lt;br /&gt;
# $Q | pmtn | f_{max}$&lt;br /&gt;
# $P2 | p_i = 1, prec, r_i | \sum C_i$ за $O(n^9)$&lt;br /&gt;
# Сведите задачу $R|pmtn|C_{max}$ к задаче линейного программирования.&lt;br /&gt;
# $P|intree, p_i=1|L_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $F2 | pmtn | C_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1 | C_{max}$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iC_i$&lt;br /&gt;
# $O | p_{ij} = 1, d_i | -$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1, r_i | C_{max}$&lt;br /&gt;
# $O2 | p_{ij} = 1, prec | \sum C_i$&lt;br /&gt;
# Обозначим как $BP(n)$ время умножения булевых матриц размера $n \times n$ над $\vee, \wedge$. Обозначим как $MM(n)$ время умножения целочисленных матриц размера $n \times n$ над $+, \times$. Докажите, что $BP(n) = O(MM(n))$. &lt;br /&gt;
# Докажите, что можно найти транзитивное замыкание графа за время $O(BP(n))$.&lt;br /&gt;
# Пусть $A$ и $B$ - матрицы размера $n \times n$. Пусть $R \subset \{1, 2, \ldots, n\}$, $|R|=r$. Обозначим как $A^R$ матрицу, которая получается из $A$ удалением всех столбцов, кроме столбцов из множества $R$. Аналогично, обозначим как $B_R$ матрицу, которая получается из $B$ удалением всех строк, кроме строк из множества $R$. Докажите, что произведение матриц $A^R\cdot B_R$ может быть найдено за время $O((n/r)^2 MM(r))$, где $MM(r)$ - время умножения матриц размером $r\times r$. &lt;br /&gt;
# Пусть $MM(n)=2+\varepsilon$, $\varepsilon&amp;gt;0$. Модифицируйте алгоритм построения BPWM, чтобы он работал за $MM(n) \log n$. Почему эта идея не сработает, если $MM(n) = O(n^2)$?&lt;br /&gt;
# Докажите лемму с лекции про то, что если в урне $n$ шаров, из которых $w$ белых и $n/2\le wr \le n$, а событие $A$ означает, что из $r$ наугад выбранных из урны шаров оказался ровно один белый, то $P(A) \ge 1/2e$.&lt;br /&gt;
# Сохраняется ли вероятность из предыдущего задания, если шары после вытаскивания возвращаются в урну? Если нет, то можно ли получить аналогичную оценку?&lt;br /&gt;
# Нижняя оценка на сумму длин путей. Докажите, что можно построить граф, в котором $\Omega(n^2)$ пар вершин, расстояние между которыми $\Omega(n)$.&lt;br /&gt;
# Известно, что у учителя есть $2^k$ яблок для некоторого целого неотрицательного $k$. На глазах у студентов он съедает одно яблоко, а остальное раздает ученикам А и В, чтобы ни один из них не видел, сколько получает другой. А и В не знают числа $k$. Они могут показать друг другу по одному знаку из трёх возможных: почесать голову правой, левой или обеими руками. К удивлению учителя, ученики всегда знают, кто получил больше яблок или что учитель съел единственное яблоко сам. Как такое возможно?&lt;br /&gt;
# Вероятностный алгоритм поиска минимума некоторый функции от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Можно ли найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $2/3$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# В алгоритме Кинг с лекции обозначим как $f(u)$ лист, которая получается в ветвящемся дереве $T'$ из вершины $u$ в исходном дереве $T$. Докажите, что если вес максимального ребра на пути из $u$ в $v$ в $T$ равен $x$, а вес максимального ребра на пути из $f(u)$ в $f(v)$ в $T'$ равен $x'$, то $x \ge x'$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что то $x \le x'$.&lt;br /&gt;
# Рассмотрим ветвящееся дерево, пусть в нем $n$ вершин. Пусть есть $m$ запросов на пары листьев, для которых необходимо найти максимальное ребро на пути. Разобьем каждый запрос на два запроса на вертикальном пути до $LCA$ этих листьев, таким образом имеем $2m$ вертикальных путей. Для вершины $v$ обозначим как $A(v)$ множество вертикальных путей, проходящих через $v$. Обозначим как $D_i$ множество вершин на расстоянии $i$ от корня, как $d_i$ число вершин на расстоянии $i$ от корня ($d_i=|D_i|$). Докажите, что $\sum\limits_{u\in D_i}\lceil\log(1+|A(u)|)\rceil&amp;lt;\sum\limits_{u\in D_i}\left(1+\log(1+|A(u)|)\right)\le d_i+d_i \log\frac{d_i+2m}{d_i}$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что $\sum\limits_{i\ge 0}\left(d_i + d_i\log\frac{d_i+2m}{d_i}\right)\le n+n\log\frac{n+2m}{n}+2n$.&lt;br /&gt;
# Докажите, что $\sum\limits_{u}\lceil\log(1+|A(u)|)\rceil = O(n + m)$.&lt;br /&gt;
# Обозначим как $A[v]$ число, в котором $i$-й бит равен $1$, если в $A(v)$ есть путь, заканчивающийся на расстоянии $i$ от корня. Считайте, что вы можете решить задачу о $m$ запросах $LCA$ в дереве с $n$ вершинами за $O(n+m)$ (например, используя алгоритм Фарах-Колтона и Бендера, см https://www.ics.uci.edu/~eppstein/261/BenFar-LCA-00.pdf). Объясните, как посчитать $A[v]$ за время $O(n+m)$. &lt;br /&gt;
# Назовем вершину $v$ большой, если $|A(v)| &amp;gt; \log n/\log\log n$ и маленькой в противном случае. Докажите, что число больших вершин асимптотически не превышает $m /\log\log n$. Указание: оцените число больших вершин на каждом уровне дерева. Отдельно рассмотрите большие вершины на нижних $\log\log n$ и на остальных уровнях.&lt;br /&gt;
# Для вершины $v$, для которой $|A(v)| = k$ рассмотрим фрагменты путей, лежащие выше вершины $v$. Будем хранить $B(v) = [l_1, l_2, \ldots, l_k]$ - список глубин самых тяжелых ребер на фрагментах путях, проходящих через $v$, в порядке от самого длинного пути к самому короткому. Иначе говоря, пронумеруем пути из $A(v)$ в порядке возрастания глубины их верхней вершины. Тогда $l_i$ - расстояние от корня до ребра, которое является самым тяжелым на пути от $v$ до некоторой вершины $u_i$, которая является верхним концом $i$-го пути. Числа $l_i$ называются тагами, длина тага $O(\log\log n)$. Докажите, что массив $B(v)$ отсортирован по неубыванию.&lt;br /&gt;
# Пусть $p$ - родитель вершины $v$, как связаны массивы $B(p)$ и $B(v)$? Дайте подробное описание, используя, при необходимости, $A(p)$ и $A(v)$.&lt;br /&gt;
# Для больших вершин $B(v)$ помещается в $O(\log\log n)$ машинных слово. Пусть родитель вершины также большой. Предложите алгоритм пересчета $B(v)$ через $B(p)$, $A[p]$ и $A[v]$ за $O(\log\log n)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$.&lt;br /&gt;
# Обозначим как $bigp[v]$ максимальную глубину, на котором находится большой предок вершины $v$. Предложите алгоритм, как за построить массив $bigp$ по массиву $A$ за $O(n)$. &lt;br /&gt;
# Для маленьких вершин $B(v)$ помещается в машинное слово, однако вместо списка $B(v)$ будем хранить вспомогательный список $C(v)$, устроенный так. Если самое тяжелое ребро на $i$-м по глубине пути из $A(v)$ находится ниже, чем $bigp[v]$, то будем хранить просто $l_i$. Иначе будем хранить $z_i$ - номер $l_i$ в $B(bigp[v])$. Обозначим упакованный в машинное слово список $C(v)$ за $C[v]$. Предложите алгоритм пересчета $С[v]$ за $O(1)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$. Вы можете использовать посчитанные для родителей и предков $C[u]$, $B(u)$, $A[u]$, $bigp[u]$.&lt;br /&gt;
# Объедините результаты всех предыдущих заданий, чтобы получить алгоритм обработки $m$ запросов поиска максимального ребра на пути между двумя вершинами на дереве за $O(n+m)$.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального разреза в графе к $O(n)$ запускам алгоритма поиска минимального $s-t$ разреза.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального $s-t$ разреза в графе к полиномимальному числу запусков алгоритма поиска глобального минимального разреза.&lt;br /&gt;
# Петя хочет упростить алгоритм Каргера-Штайна. Он запускает алгоритм Каргера (стягивание по случайному ребру), пока количество вершин не станет равно $t$, а затем запускает алгоритм за $t^3$ поиска минимального глобального разреза. Затем он повторяет алгоритм, пока вероятность успеха не составит хотя бы $1/2$. Какое значение $t$ необходимо выбрать, чтобы минимизировать время работы получившегося алгоритма? Какое будет время работы?&lt;br /&gt;
# Докажите, что если в полном двоичном дереве высоты $h$ каждое ребро удаляется с вероятностью $1/2$, то путь от корня до листа сохраняется с вероятностью $\Theta(1/h)$. &lt;br /&gt;
# Обобщите предыдущее задание, если ребро удаляется с вероятностью $p$.&lt;br /&gt;
# С учетом предыдущего задания модифицируйте алгоритм Каргера-Штайна, чтобы разветвляться когда накопленная вероятность ошибки достигнет $p$. Найдите зависимость времени работы от $p$, какое значение $p$ оптимально выбрать?&lt;br /&gt;
# Назовем разрез $\alpha$-оптимальным, если его размер не больше $\alpha C_{min}$, где $C_{min}$ - минимальный разрез. Оцените вероятность, что один запуск алгоритма Каргера (без разветвлений) найдет $\alpha$-оптимальный разрез (в зависимости от $\alpha$).&lt;br /&gt;
# Докажите, что в графе не больше $n\choose 2$ различных минимальных глобальных разрезов.&lt;br /&gt;
# Сформулируйте и докажите аналогичный предыдущему заданию результат для $\alpha$-оптимальных разрезов.&lt;br /&gt;
# Докажите, что для полинома $p(x_1, \ldots, x_n)$ от $n$ переменных степени $d$ над полем $F$ и множества $S\subset F$ размера $s$ вероятность $P(p(x_1, \ldots, x_n)=0)\le d/s$, где вероятностное пространство - равновероятно все вектора $(x_1, \ldots, x_n)\in S^n$. Используйте без доказательства, что полином от одной переменной степени $d$ над любым полем имеет не более $d$ корней.&lt;br /&gt;
# Покажите, что требование, что $F$ поле в предыдущей задаче является существенным, приведите пример полинома степени $d$ над кольцом, которое не является полем, имеющего более $d$ корней.&lt;br /&gt;
# Покажите, что в определении PRAS можно заменить константу $3/4$ в требовании, что вероятность попасть в интервал $[1-\varepsilon;1+\varepsilon]$ должна быть $3/4$, на любое другое число, строго большее $1/2$.&lt;br /&gt;
# Можно ли в предыдущем задании заменить $1/2$ на $0$?&lt;br /&gt;
# Можно ли в решении задания 73 брать среднее значение в качестве оценки?&lt;br /&gt;
# Рассмотрим формулу в ДНФ. Обозначим как $t$ количество пар $($терм$,$ удовлетворяющее этот терм назначение переменных$)$. Выберем случайно терм, где вероятность выбрать терм пропорциональна числу удовлетворяющих этот терм назначений. Выберем случайное назначение $a$, удовлетворяющее этот терм. Рассмотрим случайную величину $X = t/cov(a)$, где $cov(a)$ - число термов, удовлетворенных назначением $a$. Докажите, что $EX = Y$, где $Y$ - число удовлетворяющих назначений заданной формулы.&lt;br /&gt;
# На базе предыдущего задания предложите альтернативный алгоритм апроксимации числа удовлетворяющих назначений ДНФ.&lt;br /&gt;
# Рандомизированный алгоритм для 2SAT. Рассмотрим следующий алгоритм решения задачи удовлетворимости булевой формулы в 2КНФ с $n$ переменными. Выберем случайное значение каждой переменной. Если формула не удовлетворена, выберем случайный не удовлетворенный клоз и инвертируем значение случайной переменной в нем. Докажите, что если удовлетворяющее назначение существует, оно будет найдено за $O(n^2)$ шагов. Указание: зафиксируйте любое удовлетворяющее формулу назначение и рассмотрите задачу как случайное блуждание по прямой, где координата - это число переменных, значение которых совпадает с значением в выбранном назначении.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для 3SAT?&lt;br /&gt;
# Докажите, что оценку из задания 78 нельзя улучшить: предложите формулу, для которой в среднем понадобится $\Omega(n^2)$ случайных шагов для поиска удовлетворяющего назначения.&lt;br /&gt;
# Предложите аналогичный заданию 78 алгоритм поиска раскраски графа в два цвета.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для поиска раскраски графа в три цвета?&lt;br /&gt;
# Обозначим как $m_k(G)$ количество паросочетаний размера $k$ в двудольном графе $G$, каждая доля которого содержит по $n$ вершин. Пусть граф содержит больше $k$ ребер. Докажите, что существует ребро $uv$, такое что $m_k(G)/m_k(G\setminus uv) \le n$.&lt;br /&gt;
# Пусть вероятностный алгоритм $U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем все паросочетания равновероятны. Покажите, как с использованием $U_k$ получить $\varepsilon$-$\delta$-FRPAS для доли паросочетаний, содержащих заданное ребро $uv$ в графе $G$.&lt;br /&gt;
# Покажите, как с использованием $U_k$ из предедыдущего задания получить $\varepsilon$-$\delta$-FRPAS для числа $m_k(G)$.&lt;br /&gt;
# Будем называть полиномиальный вероятностный алгоритм $U_k$ равномерным с точностью до $\rho$ генератором, если он получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем для любого паросочетания $M$ $|P(U_k(G)=M) - 1/m_k(G)| \le \rho/m_k(G)$. Пусть $\rho \le 1/n^b$ для некоторого $b$. Подберите константу $b$, чтобы можно было решить задание 84, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 85, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Пусть полиномиальный вероятностный алгоритм $\hat U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$ или $k-1$, причем все паросочетания равновероятны. Пусть $r = m_k(G)/m_{k-1}(G)$ удовлетворяет условию $1/n^2 \le r \le n^2$. Докажите, что с помощью $\hat U_k$ можно получить $\varepsilon$-$\delta$-FRPAS для $m_k(G)$.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 88, используя равномерный с точностью до $\rho \le 1/n^b$ генератор.&lt;br /&gt;
# Докажите, что если степень любой вершины в графе не меньше $n/2$, то выполнено условие $1/n^2 \le r \le n^2$ для задания 88.&lt;br /&gt;
# Соедините предыдущие задания, чтобы получить из существования равномерного с точностью до $\rho \le 1/n^b$ генератора $\hat U_k$ для любого $k$ $\varepsilon$-$\delta$-FPRAS для числа совершенных паросочетаний в двудольном графе, где степени всех вершин не меньше $n/2$.&lt;br /&gt;
# Рассмотрим $\varepsilon$-$\delta$-FPRAS $A$ для числа паросочетаний в двудольном графе. Используя $A$, постройте полиномиальный вероятностный алгоритм, который является равномерным генератором с точностью до $\rho = o(1)$.&lt;br /&gt;
# Пусть существует полиномиальный детерминированный алгоритм, который возвращает число совершенных паросочетаний в двудольном графе, степень каждой вершины которого равна хотя бы $\beta n$, где $0 &amp;lt; \beta &amp;lt; 1$. Докажите, что существует полиномиальный детерминированный алгоритм, который возвращает число совершенных паросочетаний в  произвольном двудольном графе.&lt;br /&gt;
# Рассмотрим алгоритм приближения числа $\pi$. Будем генерировать точки с равномерным распределением в квадрате $1 \times 1$ и считать долю попавших в круг диаметром 1, вписанный в этот квадрат. Оцените число итераций, необходимое, чтобы приблизить $\pi$ с точностью до $\varepsilon$.&lt;br /&gt;
# Пусть матрица переходов эргодической марковской цепи является дважды стохастической (сумма элементов каждого столбца также равна 1). Докажите, что стационарное распределение $(1/n, 1/n, \ldots, 1/n)$.&lt;br /&gt;
# Пусть матрицы $A$ и $B$ имеют один и тот же собственный вектор $x$ для собственных чисел $\lambda$ и $\mu$, соответственно. Докажите, что $x$ является собственным вектором для $A+B$. Для какого собственного числа?&lt;br /&gt;
# Задача приблизительного подсчета числа вхождений. Biased Sketch. Рассмотрим алгоритм: выберем случайную хеш-функцию $h: U\to \{0,1, \ldots, m-1\}$ из универсального семейства. Заведем счетчик $cnt[0\ldots m-1]$ и в качестве операцими $update(x)$ будем делать $cnt[h(x)]$++, а в качестве $query(x)$ будем возвращать $cnt[h(x)]$. Пусть выполнено $n$ запросов $update$. Обозначим как $a(x)$ количество вхождений числа $x$. Оцените $P(query(x) &amp;gt; a(x) + \varepsilon n)$.&lt;br /&gt;
# CountMin. В предыдущей задаче чтобы лучше оценить количество, будем использовать несколько хеш-функций. Пусть мы используем $r$ хеш-функций, для каждой свой массив $cnt_i$, в качестве ответа на запрос будем выдавать $\min(cnt_i[h_i(x)])$. Какое $r$ необходимо выбрать, чтобы выполнялось $P(query(x) &amp;gt; a(x) + \varepsilon n) &amp;lt; \delta$?&lt;br /&gt;
# Задача приблизительного подсчета числа вхождений. Unbiased Sketch. Рассмотрим алгоритм: выберем случайную хеш-функцию $h: U\to \{0,1, \ldots, m-1\}$ из универсального семейства, а также случайную знаковую функцию $s: U \to \{-1,1\}$. Заведем счетчик $cnt[0\ldots m-1]$ и в качестве операцими $update(x)$ будем делать $cnt[h(x)]$ += s(x), а в качестве $query(x)$ будем возвращать $cnt[h(x)]\cdot s(x)$. Пусть выполнено $n$ запросов $update$. Обозначим как $a(x)$ количество вхождений числа $x$. Докажите, что $D[query(x)] \le \frac{1}{m}\sum_y a(y)^2$.&lt;br /&gt;
# В условиях предыдущей задачи обозначим как $\lVert a \rVert_2 = \sqrt{\sum_x a(x)^2}$. Оцените $P(|query(x) - a(x)| &amp;gt; \varepsilon \lVert a \rVert_2)$.&lt;br /&gt;
# CountSketch В предыдущей задаче чтобы лучше оценить количество, будем использовать несколько хеш-функций. Пусть мы используем $r$ хеш-функций, для каждой свой массив $cnt_i$, в качестве ответа на запрос будем выдавать $median(cnt_i[h_i(x)])$. Какое $r$ необходимо выбрать, чтобы выполнялось $P(|query(x) - a(x)| &amp;gt; \varepsilon \lVert a \rVert_2) &amp;lt; \delta$?&lt;br /&gt;
# Сравните оценки по времени, памяти и точности для CountMin и CountSketch. Сделайте вывод, когда какой из них лучше.&lt;br /&gt;
# Поиск $k$ самых частых. Используем тот или иной аппроксимационный алгоритм (CountMin или CountSketch), мы хотим найти $k$ самых частых элементов в последовательности $a_1, \ldots, a_n$. Будем поддерживать $set$ из $k$ самых частых, упорядоченный по оценке на число их вхождений. Рассматривая очередной элемент, добавляем его в set, если его оценка на число вхождений становится больше, чем у самого редкого в $set$-е. Оцените вероятность, что для всех $x$ в $set$-е в конце выполнено $a(x) \ge (1-\varepsilon)a(y)$, где $y$ - это $k$-й по частоте встречаемости элемент.&lt;br /&gt;
# Доминирующий элемент. Рассмотрим алгоритм, который ищет элемент, который встречается хотя бы $n/2$ раз в потоке $[a_1, \ldots, a_n]$. Пусть $0 \le a_i &amp;lt; N$ и $N \ge 2n$. Докажите, что детерминированный алгоритм, использующий $o(n\log(N/n))$ бит, не может решить поставленную задачу. Указание: рассмотрите состояние после половины элементов потока.&lt;br /&gt;
# Предложите алгоритм, использующий $O(\log(N+n))$ бит, который решает предыдущую задачу в предположении, что доминирующий элемент существует.&lt;br /&gt;
# Обобщите предыдущий алгоритм на случай $\varepsilon$-частых элементов: будем называть элемент $\varepsilon$-частым, если он составляет хотя бы $\varepsilon$ долю элементов во вводе. Как зависит память от $\varepsilon$? &lt;br /&gt;
# Все различные. Докажите или опровергните, что любой детерминированный алгоритм, который всегда корректно отвечает, верно ли, что все элементы во вводе $[a_1, a_2, \ldots, a_n]$ различны, должен использовать хотя бы $\Omega(n\log(2N/n))$ памяти.&lt;br /&gt;
# Недостающий элемент. Задан массив $[a_1, a_2, \ldots, a_{n-1}$, где все элементы от $1$ до $n$, кроме одного, встречаются ровно один раз. Найдите недостающий элемент, используя $O(\log n)$ памяти.&lt;br /&gt;
# Два недостающих элемента. Задан массив $[a_1, a_2, \ldots, a_{n-2}$, где все элементы от $1$ до $n$, кроме двух, встречаются ровно один раз. Найдите недостающие элементы, используя $o(n)$ памяти.&lt;br /&gt;
# Задана правильная скобочная последовательность с $n$ открывающими скобками. Рассмотрим три операции: findclose($i$) - найти закрывающую парную скобку для открывающей скобки на позиции $i$, findopen($i$) - найти открывающую парную скобку для закрывающей на позиции $i$, enclose($i$) - найти позицию открывающей скобки для пары скобок, непосредственно внутри которой находится открывающая скобка на позиции $i$, balance($i$) - найти баланс на позиции $i$. Используйте с rank и select с лекции, чтобы вычислить balance за $O(1)$ и $o(n)$ дополнительной памяти.&lt;br /&gt;
# Используйте balance и идеи с лекции, чтобы реализовать $findclose$, $findopen$ и $enclose$.&lt;br /&gt;
# Задано дерево (не обязательно двоичное) с порядком на детях. Для представления дерева используется правильная скобочная последовательность: запись вершины $u$ с детьми $v_1, v_2, \ldots, v_k$, обозначенная как $R(u)$ устроена так: $R(u) = (R(v_1)R(v_2)\ldots R(v_l))$. Опишите с помощью операций из задачи 110 операции: перехода к родителю, перехода к первому ребенку, перехода к следующему ребенку.&lt;br /&gt;
# Размер поддерева. Опишите с помощью операций из задачи 110 способ узнать размер поддерева для заданной вершины.&lt;br /&gt;
# Глубина вершины. Опишите с помощью операций из задач 110 способ узнать глубину вершины.&lt;br /&gt;
# Опишите в терминах скобочных последовательностей операцию LCA. Предложите решение за $O(1)$ и $o(n)$ дополнительной памяти.&lt;/div&gt;</summary>
		<author><name>217.79.4.130</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81268</id>
		<title>Список заданий по продвинутым алгоритмам 2021 осень</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81268"/>
				<updated>2021-11-26T21:02:10Z</updated>
		
		<summary type="html">&lt;p&gt;217.79.4.130: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# $1 | p_i=1 | L_{max}$.&lt;br /&gt;
# $1 | r_i, d_i=d | L_{max}$.&lt;br /&gt;
# $1 | prec, r_i, p_i=1 | L_{max}$.&lt;br /&gt;
# Рассмотрим задачу $1 | p_i = 1, d_i | -$. Докажите, что подмножества работ, которые можно выполнить, образуют семейство независимых множеств некоторого матроида.&lt;br /&gt;
# $1 | p_i = 1, d_i | \sum w_iU_i$. Время $O(n\log n)$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum U_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum w_iU_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = p, pmtn, r_i | \sum w_iU_i$ за $O(n^{10})$.&lt;br /&gt;
# $1 || \sum U_i$&lt;br /&gt;
# $1 | r_i, p_i = p | \sum w_iC_i$ за $O(n^7)$&lt;br /&gt;
# Обозначение outtree означает, что граф зависимостей представляет собой исходящее дерево: каджая работа зависит не более чем от одной другой. $1 | outtree | \sum w_iC_i$&lt;br /&gt;
# Обозначение intree означает, что граф зависимостей представляет собой входящее дерево: от каждой работы зависит не более одной другой. $1 | intree | \sum w_iC_i$&lt;br /&gt;
# $P | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | pmtn, r_i | L_{max}$&lt;br /&gt;
# $Q | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | p_i = p, r_i, d_i | \sum C_i$ за $O(n^3 \log n)$ (бонус за $O(n^3 \log\log n)$)&lt;br /&gt;
# $P | p_i = 1 | \sum w_iU_i$ - доведите доказательство с пары до конца&lt;br /&gt;
# $P | p_i = 1 | \sum w_iC_i$&lt;br /&gt;
# $P | p_i = 1, pmtn | \sum w_iC_i$&lt;br /&gt;
# $Q | pmtn | \sum C_i$&lt;br /&gt;
# $Q | pmtn | \sum f_i$ (напомним, что f_i - произвольная неубывающая функция, может быть своя у каждой работы)&lt;br /&gt;
# $Q | pmtn | f_{max}$&lt;br /&gt;
# $P2 | p_i = 1, prec, r_i | \sum C_i$ за $O(n^9)$&lt;br /&gt;
# Сведите задачу $R|pmtn|C_{max}$ к задаче линейного программирования.&lt;br /&gt;
# $P|intree, p_i=1|L_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $F2 | pmtn | C_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1 | C_{max}$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iC_i$&lt;br /&gt;
# $O | p_{ij} = 1, d_i | -$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1, r_i | C_{max}$&lt;br /&gt;
# $O2 | p_{ij} = 1, prec | \sum C_i$&lt;br /&gt;
# Обозначим как $BP(n)$ время умножения булевых матриц размера $n \times n$ над $\vee, \wedge$. Обозначим как $MM(n)$ время умножения целочисленных матриц размера $n \times n$ над $+, \times$. Докажите, что $BP(n) = O(MM(n))$. &lt;br /&gt;
# Докажите, что можно найти транзитивное замыкание графа за время $O(BP(n))$.&lt;br /&gt;
# Пусть $A$ и $B$ - матрицы размера $n \times n$. Пусть $R \subset \{1, 2, \ldots, n\}$, $|R|=r$. Обозначим как $A^R$ матрицу, которая получается из $A$ удалением всех столбцов, кроме столбцов из множества $R$. Аналогично, обозначим как $B_R$ матрицу, которая получается из $B$ удалением всех строк, кроме строк из множества $R$. Докажите, что произведение матриц $A^R\cdot B_R$ может быть найдено за время $O((n/r)^2 MM(r))$, где $MM(r)$ - время умножения матриц размером $r\times r$. &lt;br /&gt;
# Пусть $MM(n)=2+\varepsilon$, $\varepsilon&amp;gt;0$. Модифицируйте алгоритм построения BPWM, чтобы он работал за $MM(n) \log n$. Почему эта идея не сработает, если $MM(n) = O(n^2)$?&lt;br /&gt;
# Докажите лемму с лекции про то, что если в урне $n$ шаров, из которых $w$ белых и $n/2\le wr \le n$, а событие $A$ означает, что из $r$ наугад выбранных из урны шаров оказался ровно один белый, то $P(A) \ge 1/2e$.&lt;br /&gt;
# Сохраняется ли вероятность из предыдущего задания, если шары после вытаскивания возвращаются в урну? Если нет, то можно ли получить аналогичную оценку?&lt;br /&gt;
# Нижняя оценка на сумму длин путей. Докажите, что можно построить граф, в котором $\Omega(n^2)$ пар вершин, расстояние между которыми $\Omega(n)$.&lt;br /&gt;
# Известно, что у учителя есть $2^k$ яблок для некоторого целого неотрицательного $k$. На глазах у студентов он съедает одно яблоко, а остальное раздает ученикам А и В, чтобы ни один из них не видел, сколько получает другой. А и В не знают числа $k$. Они могут показать друг другу по одному знаку из трёх возможных: почесать голову правой, левой или обеими руками. К удивлению учителя, ученики всегда знают, кто получил больше яблок или что учитель съел единственное яблоко сам. Как такое возможно?&lt;br /&gt;
# Вероятностный алгоритм поиска минимума некоторый функции от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Можно ли найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $2/3$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# В алгоритме Кинг с лекции обозначим как $f(u)$ лист, которая получается в ветвящемся дереве $T'$ из вершины $u$ в исходном дереве $T$. Докажите, что если вес максимального ребра на пути из $u$ в $v$ в $T$ равен $x$, а вес максимального ребра на пути из $f(u)$ в $f(v)$ в $T'$ равен $x'$, то $x \ge x'$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что то $x \le x'$.&lt;br /&gt;
# Рассмотрим ветвящееся дерево, пусть в нем $n$ вершин. Пусть есть $m$ запросов на пары листьев, для которых необходимо найти максимальное ребро на пути. Разобьем каждый запрос на два запроса на вертикальном пути до $LCA$ этих листьев, таким образом имеем $2m$ вертикальных путей. Для вершины $v$ обозначим как $A(v)$ множество вертикальных путей, проходящих через $v$. Обозначим как $D_i$ множество вершин на расстоянии $i$ от корня, как $d_i$ число вершин на расстоянии $i$ от корня ($d_i=|D_i|$). Докажите, что $\sum\limits_{u\in D_i}\lceil\log(1+|A(u)|)\rceil&amp;lt;\sum\limits_{u\in D_i}\left(1+\log(1+|A(u)|)\right)\le d_i+d_i \log\frac{d_i+2m}{d_i}$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что $\sum\limits_{i\ge 0}\left(d_i + d_i\log\frac{d_i+2m}{d_i}\right)\le n+n\log\frac{n+2m}{n}+2n$.&lt;br /&gt;
# Докажите, что $\sum\limits_{u}\lceil\log(1+|A(u)|)\rceil = O(n + m)$.&lt;br /&gt;
# Обозначим как $A[v]$ число, в котором $i$-й бит равен $1$, если в $A(v)$ есть путь, заканчивающийся на расстоянии $i$ от корня. Считайте, что вы можете решить задачу о $m$ запросах $LCA$ в дереве с $n$ вершинами за $O(n+m)$ (например, используя алгоритм Фарах-Колтона и Бендера, см https://www.ics.uci.edu/~eppstein/261/BenFar-LCA-00.pdf). Объясните, как посчитать $A[v]$ за время $O(n+m)$. &lt;br /&gt;
# Назовем вершину $v$ большой, если $|A(v)| &amp;gt; \log n/\log\log n$ и маленькой в противном случае. Докажите, что число больших вершин асимптотически не превышает $m /\log\log n$. Указание: оцените число больших вершин на каждом уровне дерева. Отдельно рассмотрите большие вершины на нижних $\log\log n$ и на остальных уровнях.&lt;br /&gt;
# Для вершины $v$, для которой $|A(v)| = k$ рассмотрим фрагменты путей, лежащие выше вершины $v$. Будем хранить $B(v) = [l_1, l_2, \ldots, l_k]$ - список глубин самых тяжелых ребер на фрагментах путях, проходящих через $v$, в порядке от самого длинного пути к самому короткому. Иначе говоря, пронумеруем пути из $A(v)$ в порядке возрастания глубины их верхней вершины. Тогда $l_i$ - расстояние от корня до ребра, которое является самым тяжелым на пути от $v$ до некоторой вершины $u_i$, которая является верхним концом $i$-го пути. Числа $l_i$ называются тагами, длина тага $O(\log\log n)$. Докажите, что массив $B(v)$ отсортирован по неубыванию.&lt;br /&gt;
# Пусть $p$ - родитель вершины $v$, как связаны массивы $B(p)$ и $B(v)$? Дайте подробное описание, используя, при необходимости, $A(p)$ и $A(v)$.&lt;br /&gt;
# Для больших вершин $B(v)$ помещается в $O(\log\log n)$ машинных слово. Пусть родитель вершины также большой. Предложите алгоритм пересчета $B(v)$ через $B(p)$, $A[p]$ и $A[v]$ за $O(\log\log n)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$.&lt;br /&gt;
# Обозначим как $bigp[v]$ максимальную глубину, на котором находится большой предок вершины $v$. Предложите алгоритм, как за построить массив $bigp$ по массиву $A$ за $O(n)$. &lt;br /&gt;
# Для маленьких вершин $B(v)$ помещается в машинное слово, однако вместо списка $B(v)$ будем хранить вспомогательный список $C(v)$, устроенный так. Если самое тяжелое ребро на $i$-м по глубине пути из $A(v)$ находится ниже, чем $bigp[v]$, то будем хранить просто $l_i$. Иначе будем хранить $z_i$ - номер $l_i$ в $B(bigp[v])$. Обозначим упакованный в машинное слово список $C(v)$ за $C[v]$. Предложите алгоритм пересчета $С[v]$ за $O(1)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$. Вы можете использовать посчитанные для родителей и предков $C[u]$, $B(u)$, $A[u]$, $bigp[u]$.&lt;br /&gt;
# Объедините результаты всех предыдущих заданий, чтобы получить алгоритм обработки $m$ запросов поиска максимального ребра на пути между двумя вершинами на дереве за $O(n+m)$.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального разреза в графе к $O(n)$ запускам алгоритма поиска минимального $s-t$ разреза.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального $s-t$ разреза в графе к полиномимальному числу запусков алгоритма поиска глобального минимального разреза.&lt;br /&gt;
# Петя хочет упростить алгоритм Каргера-Штайна. Он запускает алгоритм Каргера (стягивание по случайному ребру), пока количество вершин не станет равно $t$, а затем запускает алгоритм за $t^3$ поиска минимального глобального разреза. Затем он повторяет алгоритм, пока вероятность успеха не составит хотя бы $1/2$. Какое значение $t$ необходимо выбрать, чтобы минимизировать время работы получившегося алгоритма? Какое будет время работы?&lt;br /&gt;
# Докажите, что если в полном двоичном дереве высоты $h$ каждое ребро удаляется с вероятностью $1/2$, то путь от корня до листа сохраняется с вероятностью $\Theta(1/h)$. &lt;br /&gt;
# Обобщите предыдущее задание, если ребро удаляется с вероятностью $p$.&lt;br /&gt;
# С учетом предыдущего задания модифицируйте алгоритм Каргера-Штайна, чтобы разветвляться когда накопленная вероятность ошибки достигнет $p$. Найдите зависимость времени работы от $p$, какое значение $p$ оптимально выбрать?&lt;br /&gt;
# Назовем разрез $\alpha$-оптимальным, если его размер не больше $\alpha C_{min}$, где $C_{min}$ - минимальный разрез. Оцените вероятность, что один запуск алгоритма Каргера (без разветвлений) найдет $\alpha$-оптимальный разрез (в зависимости от $\alpha$).&lt;br /&gt;
# Докажите, что в графе не больше $n\choose 2$ различных минимальных глобальных разрезов.&lt;br /&gt;
# Сформулируйте и докажите аналогичный предыдущему заданию результат для $\alpha$-оптимальных разрезов.&lt;br /&gt;
# Докажите, что для полинома $p(x_1, \ldots, x_n)$ от $n$ переменных степени $d$ над полем $F$ и множества $S\subset F$ размера $s$ вероятность $P(p(x_1, \ldots, x_n)=0)\le d/s$, где вероятностное пространство - равновероятно все вектора $(x_1, \ldots, x_n)\in S^n$. Используйте без доказательства, что полином от одной переменной степени $d$ над любым полем имеет не более $d$ корней.&lt;br /&gt;
# Покажите, что требование, что $F$ поле в предыдущей задаче является существенным, приведите пример полинома степени $d$ над кольцом, которое не является полем, имеющего более $d$ корней.&lt;br /&gt;
# Покажите, что в определении PRAS можно заменить константу $3/4$ в требовании, что вероятность попасть в интервал $[1-\varepsilon;1+\varepsilon]$ должна быть $3/4$, на любое другое число, строго большее $1/2$.&lt;br /&gt;
# Можно ли в предыдущем задании заменить $1/2$ на $0$?&lt;br /&gt;
# Можно ли в решении задания 73 брать среднее значение в качестве оценки?&lt;br /&gt;
# Рассмотрим формулу в ДНФ. Обозначим как $t$ количество пар $($терм$,$ удовлетворяющее этот терм назначение переменных$)$. Выберем случайно терм, где вероятность выбрать терм пропорциональна числу удовлетворяющих этот терм назначений. Выберем случайное назначение $a$, удовлетворяющее этот терм. Рассмотрим случайную величину $X = t/cov(a)$, где $cov(a)$ - число термов, удовлетворенных назначением $a$. Докажите, что $EX = Y$, где $Y$ - число удовлетворяющих назначений заданной формулы.&lt;br /&gt;
# На базе предыдущего задания предложите альтернативный алгоритм апроксимации числа удовлетворяющих назначений ДНФ.&lt;br /&gt;
# Рандомизированный алгоритм для 2SAT. Рассмотрим следующий алгоритм решения задачи удовлетворимости булевой формулы в 2КНФ с $n$ переменными. Выберем случайное значение каждой переменной. Если формула не удовлетворена, выберем случайный не удовлетворенный клоз и инвертируем значение случайной переменной в нем. Докажите, что если удовлетворяющее назначение существует, оно будет найдено за $O(n^2)$ шагов. Указание: зафиксируйте любое удовлетворяющее формулу назначение и рассмотрите задачу как случайное блуждание по прямой, где координата - это число переменных, значение которых совпадает с значением в выбранном назначении.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для 3SAT?&lt;br /&gt;
# Докажите, что оценку из задания 78 нельзя улучшить: предложите формулу, для которой в среднем понадобится $\Omega(n^2)$ случайных шагов для поиска удовлетворяющего назначения.&lt;br /&gt;
# Предложите аналогичный заданию 78 алгоритм поиска раскраски графа в два цвета.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для поиска раскраски графа в три цвета?&lt;br /&gt;
# Обозначим как $m_k(G)$ количество паросочетаний размера $k$ в двудольном графе $G$, каждая доля которого содержит по $n$ вершин. Пусть граф содержит больше $k$ ребер. Докажите, что существует ребро $uv$, такое что $m_k(G)/m_k(G\setminus uv) \le n$.&lt;br /&gt;
# Пусть вероятностный алгоритм $U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем все паросочетания равновероятны. Покажите, как с использованием $U_k$ получить $\varepsilon$-$\delta$-FRPAS для доли паросочетаний, содержащих заданное ребро $uv$ в графе $G$.&lt;br /&gt;
# Покажите, как с использованием $U_k$ из предедыдущего задания получить $\varepsilon$-$\delta$-FRPAS для числа $m_k(G)$.&lt;br /&gt;
# Будем называть полиномиальный вероятностный алгоритм $U_k$ равномерным с точностью до $\rho$ генератором, если он получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем для любого паросочетания $M$ $|P(U_k(G)=M) - 1/m_k(G)| \le \rho/m_k(G)$. Пусть $\rho \le 1/n^b$ для некоторого $b$. Подберите константу $b$, чтобы можно было решить задание 84, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 85, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Пусть полиномиальный вероятностный алгоритм $\hat U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$ или $k-1$, причем все паросочетания равновероятны. Пусть $r = m_k(G)/m_{k-1}(G)$ удовлетворяет условию $1/n^2 \le r \le n^2$. Докажите, что с помощью $\hat U_k$ можно получить $\varepsilon$-$\delta$-FRPAS для $m_k(G)$.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 88, используя равномерный с точностью до $\rho \le 1/n^b$ генератор.&lt;br /&gt;
# Докажите, что если степень любой вершины в графе не меньше $n/2$, то выполнено условие $1/n^2 \le r \le n^2$ для задания 88.&lt;br /&gt;
# Соедините предыдущие задания, чтобы получить из существования равномерного с точностью до $\rho \le 1/n^b$ генератора $\hat U_k$ для любого $k$ $\varepsilon$-$\delta$-FPRAS для числа совершенных паросочетаний в двудольном графе, где степени всех вершин не меньше $n/2$.&lt;br /&gt;
# Рассмотрим $\varepsilon$-$\delta$-FPRAS $A$ для числа паросочетаний в двудольном графе. Используя $A$, постройте полиномиальный вероятностный алгоритм, который является равномерным генератором с точностью до $\rho = o(1)$.&lt;br /&gt;
# Пусть существует полиномиальный детерминированный алгоритм, который возвращает число совершенных паросочетаний в двудольном графе, степень каждой вершины которого равна хотя бы $\beta n$, где $0 &amp;lt; \beta &amp;lt; 1$. Докажите, что существует полиномиальный детерминированный алгоритм, который возвращает число совершенных паросочетаний в  произвольном двудольном графе.&lt;br /&gt;
# Рассмотрим алгоритм приближения числа $\pi$. Будем генерировать точки с равномерным распределением в квадрате $1 \times 1$ и считать долю попавших в круг диаметром 1, вписанный в этот квадрат. Оцените число итераций, необходимое, чтобы приблизить $\pi$ с точностью до $\varepsilon$.&lt;br /&gt;
# Пусть матрица переходов эргодической марковской цепи является дважды стохастической (сумма элементов каждого столбца также равна 1). Докажите, что стационарное распределение $(1/n, 1/n, \ldots, 1/n)$.&lt;br /&gt;
# Пусть матрицы $A$ и $B$ имеют один и тот же собственный вектор $x$ для собственных чисел $\lambda$ и $\mu$, соответственно. Докажите, что $x$ является собственным вектором для $A+B$. Для какого собственного числа?&lt;br /&gt;
# Задача приблизительного подсчета числа вхождений. Biased Sketch. Рассмотрим алгоритм: выберем случайную хеш-функцию $h: U\to \{0,1, \ldots, m-1\}$ из универсального семейства. Заведем счетчик $cnt[0\ldots m-1]$ и в качестве операцими $update(x)$ будем делать $cnt[h(x)]$++, а в качестве $query(x)$ будем возвращать $cnt[h(x)]$. Пусть выполнено $n$ запросов $update$. Обозначим как $a(x)$ количество вхождений числа $x$. Оцените $P(query(x) &amp;gt; a(x) + \varepsilon n)$.&lt;br /&gt;
# CountMin. В предыдущей задаче чтобы лучше оценить количество, будем использовать несколько хеш-функций. Пусть мы используем $r$ хеш-функций, для каждой свой массив $cnt_i$, в качестве ответа на запрос будем выдавать $\min(cnt_i[h_i(x)])$. Какое $r$ необходимо выбрать, чтобы выполнялось $P(query(x) &amp;gt; a(x) + \varepsilon n) &amp;lt; \delta$?&lt;br /&gt;
# Задача приблизительного подсчета числа вхождений. Unbiased Sketch. Рассмотрим алгоритм: выберем случайную хеш-функцию $h: U\to \{0,1, \ldots, m-1\}$ из универсального семейства, а также случайную знаковую функцию $s: U \to \{-1,1\}$. Заведем счетчик $cnt[0\ldots m-1]$ и в качестве операцими $update(x)$ будем делать $cnt[h(x)]$ += s(x), а в качестве $query(x)$ будем возвращать $cnt[h(x)]\cdot s(x)$. Пусть выполнено $n$ запросов $update$. Обозначим как $a(x)$ количество вхождений числа $x$. Докажите, что $D[query(x)] \le \frac{1}{m}\sum_y a(y)^2$.&lt;br /&gt;
# В условиях предыдущей задачи обозначим как $\lVert a \rVert_2 = \sqrt{\sum_x a(x)^2}$. Оцените $P(|query(x) - a(x)| &amp;gt; \varepsilon \lVert a \rVert_2)$.&lt;br /&gt;
# CountSketch В предыдущей задаче чтобы лучше оценить количество, будем использовать несколько хеш-функций. Пусть мы используем $r$ хеш-функций, для каждой свой массив $cnt_i$, в качестве ответа на запрос будем выдавать $median(cnt_i[h_i(x)])$. Какое $r$ необходимо выбрать, чтобы выполнялось $P(|query(x) - a(x)| &amp;gt; \varepsilon \lVert a \rVert_2) &amp;lt; \delta$?&lt;br /&gt;
# Сравните оценки по времени, памяти и точности для CountMin и CountSketch. Сделайте вывод, когда какой из них лучше.&lt;br /&gt;
# Поиск $k$ самых частых. Используем тот или иной аппроксимационный алгоритм (CountMin или CountSketch), мы хотим найти $k$ самых частых элементов в последовательности $a_1, \ldots, a_n$. Будем поддерживать $set$ из $k$ самых частых, упорядоченный по оценке на число их вхождений. Рассматривая очередной элемент, добавляем его в set, если его оценка на число вхождений становится больше, чем у самого редкого в $set$-е. Оцените вероятность, что для всех $x$ в $set$-е в конце выполнено $a(x) \ge (1-\varepsilon)a(y)$, где $y$ - это $k$-й по частоте встречаемости элемент.&lt;br /&gt;
# Доминирующий элемент. Рассмотрим алгоритм, который ищет элемент, который встречается хотя бы $n/2$ раз в потоке $[a_1, \ldots, a_n]$. Пусть $0 \le a_i &amp;lt; N$ и $N \ge 2n$. Докажите, что детерминированный алгоритм, использующий $o(n\log(N/n))$ бит, не может решить поставленную задачу. Указание: рассмотрите состояние после половины элементов потока.&lt;br /&gt;
# Предложите алгоритм, использующий $O(\log(N+n))$ бит, который решает предыдущую задачу в предположении, что доминирующий элемент существует.&lt;br /&gt;
# Обобщите предыдущий алгоритм на случай $\varepsilon$-частых элементов: будем называть элемент $\varepsilon$-частым, если он составляет хотя бы $\varepsilon$ долю элементов во вводе. Как зависит память от $\varepsilon$? &lt;br /&gt;
# Все различные. Докажите или опровергните, что любой детерминированный алгоритм, который всегда корректно отвечает, верно ли, что все элементы во вводе $[a_1, a_2, \ldots, a_n]$ различны, должен использовать хотя бы $\Omega(n\log(2N/n))$ памяти.&lt;br /&gt;
# Недостающий элемент. Задан массив $[a_1, a_2, \ldots, a_{n-1}$, где все элементы от $1$ до $n$, кроме одного, встречаются ровно один раз. Найдите недостающий элемент, используя $O(\log n)$ памяти.&lt;br /&gt;
# Два недостающих элемента. Задан массив $[a_1, a_2, \ldots, a_{n-2}$, где все элементы от $1$ до $n$, кроме двух, встречаются ровно один раз. Найдите недостающие элементы, используя $o(n)$ памяти.&lt;/div&gt;</summary>
		<author><name>217.79.4.130</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81267</id>
		<title>Список заданий по продвинутым алгоритмам 2021 осень</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81267"/>
				<updated>2021-11-26T15:41:00Z</updated>
		
		<summary type="html">&lt;p&gt;217.79.4.130: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# $1 | p_i=1 | L_{max}$.&lt;br /&gt;
# $1 | r_i, d_i=d | L_{max}$.&lt;br /&gt;
# $1 | prec, r_i, p_i=1 | L_{max}$.&lt;br /&gt;
# Рассмотрим задачу $1 | p_i = 1, d_i | -$. Докажите, что подмножества работ, которые можно выполнить, образуют семейство независимых множеств некоторого матроида.&lt;br /&gt;
# $1 | p_i = 1, d_i | \sum w_iU_i$. Время $O(n\log n)$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum U_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum w_iU_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = p, pmtn, r_i | \sum w_iU_i$ за $O(n^{10})$.&lt;br /&gt;
# $1 || \sum U_i$&lt;br /&gt;
# $1 | r_i, p_i = p | \sum w_iC_i$ за $O(n^7)$&lt;br /&gt;
# Обозначение outtree означает, что граф зависимостей представляет собой исходящее дерево: каджая работа зависит не более чем от одной другой. $1 | outtree | \sum w_iC_i$&lt;br /&gt;
# Обозначение intree означает, что граф зависимостей представляет собой входящее дерево: от каждой работы зависит не более одной другой. $1 | intree | \sum w_iC_i$&lt;br /&gt;
# $P | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | pmtn, r_i | L_{max}$&lt;br /&gt;
# $Q | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | p_i = p, r_i, d_i | \sum C_i$ за $O(n^3 \log n)$ (бонус за $O(n^3 \log\log n)$)&lt;br /&gt;
# $P | p_i = 1 | \sum w_iU_i$ - доведите доказательство с пары до конца&lt;br /&gt;
# $P | p_i = 1 | \sum w_iC_i$&lt;br /&gt;
# $P | p_i = 1, pmtn | \sum w_iC_i$&lt;br /&gt;
# $Q | pmtn | \sum C_i$&lt;br /&gt;
# $Q | pmtn | \sum f_i$ (напомним, что f_i - произвольная неубывающая функция, может быть своя у каждой работы)&lt;br /&gt;
# $Q | pmtn | f_{max}$&lt;br /&gt;
# $P2 | p_i = 1, prec, r_i | \sum C_i$ за $O(n^9)$&lt;br /&gt;
# Сведите задачу $R|pmtn|C_{max}$ к задаче линейного программирования.&lt;br /&gt;
# $P|intree, p_i=1|L_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $F2 | pmtn | C_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1 | C_{max}$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iC_i$&lt;br /&gt;
# $O | p_{ij} = 1, d_i | -$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1, r_i | C_{max}$&lt;br /&gt;
# $O2 | p_{ij} = 1, prec | \sum C_i$&lt;br /&gt;
# Обозначим как $BP(n)$ время умножения булевых матриц размера $n \times n$ над $\vee, \wedge$. Обозначим как $MM(n)$ время умножения целочисленных матриц размера $n \times n$ над $+, \times$. Докажите, что $BP(n) = O(MM(n))$. &lt;br /&gt;
# Докажите, что можно найти транзитивное замыкание графа за время $O(BP(n))$.&lt;br /&gt;
# Пусть $A$ и $B$ - матрицы размера $n \times n$. Пусть $R \subset \{1, 2, \ldots, n\}$, $|R|=r$. Обозначим как $A^R$ матрицу, которая получается из $A$ удалением всех столбцов, кроме столбцов из множества $R$. Аналогично, обозначим как $B_R$ матрицу, которая получается из $B$ удалением всех строк, кроме строк из множества $R$. Докажите, что произведение матриц $A^R\cdot B_R$ может быть найдено за время $O((n/r)^2 MM(r))$, где $MM(r)$ - время умножения матриц размером $r\times r$. &lt;br /&gt;
# Пусть $MM(n)=2+\varepsilon$, $\varepsilon&amp;gt;0$. Модифицируйте алгоритм построения BPWM, чтобы он работал за $MM(n) \log n$. Почему эта идея не сработает, если $MM(n) = O(n^2)$?&lt;br /&gt;
# Докажите лемму с лекции про то, что если в урне $n$ шаров, из которых $w$ белых и $n/2\le wr \le n$, а событие $A$ означает, что из $r$ наугад выбранных из урны шаров оказался ровно один белый, то $P(A) \ge 1/2e$.&lt;br /&gt;
# Сохраняется ли вероятность из предыдущего задания, если шары после вытаскивания возвращаются в урну? Если нет, то можно ли получить аналогичную оценку?&lt;br /&gt;
# Нижняя оценка на сумму длин путей. Докажите, что можно построить граф, в котором $\Omega(n^2)$ пар вершин, расстояние между которыми $\Omega(n)$.&lt;br /&gt;
# Известно, что у учителя есть $2^k$ яблок для некоторого целого неотрицательного $k$. На глазах у студентов он съедает одно яблоко, а остальное раздает ученикам А и В, чтобы ни один из них не видел, сколько получает другой. А и В не знают числа $k$. Они могут показать друг другу по одному знаку из трёх возможных: почесать голову правой, левой или обеими руками. К удивлению учителя, ученики всегда знают, кто получил больше яблок или что учитель съел единственное яблоко сам. Как такое возможно?&lt;br /&gt;
# Вероятностный алгоритм поиска минимума некоторый функции от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Можно ли найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $2/3$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# В алгоритме Кинг с лекции обозначим как $f(u)$ лист, которая получается в ветвящемся дереве $T'$ из вершины $u$ в исходном дереве $T$. Докажите, что если вес максимального ребра на пути из $u$ в $v$ в $T$ равен $x$, а вес максимального ребра на пути из $f(u)$ в $f(v)$ в $T'$ равен $x'$, то $x \ge x'$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что то $x \le x'$.&lt;br /&gt;
# Рассмотрим ветвящееся дерево, пусть в нем $n$ вершин. Пусть есть $m$ запросов на пары листьев, для которых необходимо найти максимальное ребро на пути. Разобьем каждый запрос на два запроса на вертикальном пути до $LCA$ этих листьев, таким образом имеем $2m$ вертикальных путей. Для вершины $v$ обозначим как $A(v)$ множество вертикальных путей, проходящих через $v$. Обозначим как $D_i$ множество вершин на расстоянии $i$ от корня, как $d_i$ число вершин на расстоянии $i$ от корня ($d_i=|D_i|$). Докажите, что $\sum\limits_{u\in D_i}\lceil\log(1+|A(u)|)\rceil&amp;lt;\sum\limits_{u\in D_i}\left(1+\log(1+|A(u)|)\right)\le d_i+d_i \log\frac{d_i+2m}{d_i}$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что $\sum\limits_{i\ge 0}\left(d_i + d_i\log\frac{d_i+2m}{d_i}\right)\le n+n\log\frac{n+2m}{n}+2n$.&lt;br /&gt;
# Докажите, что $\sum\limits_{u}\lceil\log(1+|A(u)|)\rceil = O(n + m)$.&lt;br /&gt;
# Обозначим как $A[v]$ число, в котором $i$-й бит равен $1$, если в $A(v)$ есть путь, заканчивающийся на расстоянии $i$ от корня. Считайте, что вы можете решить задачу о $m$ запросах $LCA$ в дереве с $n$ вершинами за $O(n+m)$ (например, используя алгоритм Фарах-Колтона и Бендера, см https://www.ics.uci.edu/~eppstein/261/BenFar-LCA-00.pdf). Объясните, как посчитать $A[v]$ за время $O(n+m)$. &lt;br /&gt;
# Назовем вершину $v$ большой, если $|A(v)| &amp;gt; \log n/\log\log n$ и маленькой в противном случае. Докажите, что число больших вершин асимптотически не превышает $m /\log\log n$. Указание: оцените число больших вершин на каждом уровне дерева. Отдельно рассмотрите большие вершины на нижних $\log\log n$ и на остальных уровнях.&lt;br /&gt;
# Для вершины $v$, для которой $|A(v)| = k$ рассмотрим фрагменты путей, лежащие выше вершины $v$. Будем хранить $B(v) = [l_1, l_2, \ldots, l_k]$ - список глубин самых тяжелых ребер на фрагментах путях, проходящих через $v$, в порядке от самого длинного пути к самому короткому. Иначе говоря, пронумеруем пути из $A(v)$ в порядке возрастания глубины их верхней вершины. Тогда $l_i$ - расстояние от корня до ребра, которое является самым тяжелым на пути от $v$ до некоторой вершины $u_i$, которая является верхним концом $i$-го пути. Числа $l_i$ называются тагами, длина тага $O(\log\log n)$. Докажите, что массив $B(v)$ отсортирован по неубыванию.&lt;br /&gt;
# Пусть $p$ - родитель вершины $v$, как связаны массивы $B(p)$ и $B(v)$? Дайте подробное описание, используя, при необходимости, $A(p)$ и $A(v)$.&lt;br /&gt;
# Для больших вершин $B(v)$ помещается в $O(\log\log n)$ машинных слово. Пусть родитель вершины также большой. Предложите алгоритм пересчета $B(v)$ через $B(p)$, $A[p]$ и $A[v]$ за $O(\log\log n)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$.&lt;br /&gt;
# Обозначим как $bigp[v]$ максимальную глубину, на котором находится большой предок вершины $v$. Предложите алгоритм, как за построить массив $bigp$ по массиву $A$ за $O(n)$. &lt;br /&gt;
# Для маленьких вершин $B(v)$ помещается в машинное слово, однако вместо списка $B(v)$ будем хранить вспомогательный список $C(v)$, устроенный так. Если самое тяжелое ребро на $i$-м по глубине пути из $A(v)$ находится ниже, чем $bigp[v]$, то будем хранить просто $l_i$. Иначе будем хранить $z_i$ - номер $l_i$ в $B(bigp[v])$. Обозначим упакованный в машинное слово список $C(v)$ за $C[v]$. Предложите алгоритм пересчета $С[v]$ за $O(1)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$. Вы можете использовать посчитанные для родителей и предков $C[u]$, $B(u)$, $A[u]$, $bigp[u]$.&lt;br /&gt;
# Объедините результаты всех предыдущих заданий, чтобы получить алгоритм обработки $m$ запросов поиска максимального ребра на пути между двумя вершинами на дереве за $O(n+m)$.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального разреза в графе к $O(n)$ запускам алгоритма поиска минимального $s-t$ разреза.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального $s-t$ разреза в графе к полиномимальному числу запусков алгоритма поиска глобального минимального разреза.&lt;br /&gt;
# Петя хочет упростить алгоритм Каргера-Штайна. Он запускает алгоритм Каргера (стягивание по случайному ребру), пока количество вершин не станет равно $t$, а затем запускает алгоритм за $t^3$ поиска минимального глобального разреза. Затем он повторяет алгоритм, пока вероятность успеха не составит хотя бы $1/2$. Какое значение $t$ необходимо выбрать, чтобы минимизировать время работы получившегося алгоритма? Какое будет время работы?&lt;br /&gt;
# Докажите, что если в полном двоичном дереве высоты $h$ каждое ребро удаляется с вероятностью $1/2$, то путь от корня до листа сохраняется с вероятностью $\Theta(1/h)$. &lt;br /&gt;
# Обобщите предыдущее задание, если ребро удаляется с вероятностью $p$.&lt;br /&gt;
# С учетом предыдущего задания модифицируйте алгоритм Каргера-Штайна, чтобы разветвляться когда накопленная вероятность ошибки достигнет $p$. Найдите зависимость времени работы от $p$, какое значение $p$ оптимально выбрать?&lt;br /&gt;
# Назовем разрез $\alpha$-оптимальным, если его размер не больше $\alpha C_{min}$, где $C_{min}$ - минимальный разрез. Оцените вероятность, что один запуск алгоритма Каргера (без разветвлений) найдет $\alpha$-оптимальный разрез (в зависимости от $\alpha$).&lt;br /&gt;
# Докажите, что в графе не больше $n\choose 2$ различных минимальных глобальных разрезов.&lt;br /&gt;
# Сформулируйте и докажите аналогичный предыдущему заданию результат для $\alpha$-оптимальных разрезов.&lt;br /&gt;
# Докажите, что для полинома $p(x_1, \ldots, x_n)$ от $n$ переменных степени $d$ над полем $F$ и множества $S\subset F$ размера $s$ вероятность $P(p(x_1, \ldots, x_n)=0)\le d/s$, где вероятностное пространство - равновероятно все вектора $(x_1, \ldots, x_n)\in S^n$. Используйте без доказательства, что полином от одной переменной степени $d$ над любым полем имеет не более $d$ корней.&lt;br /&gt;
# Покажите, что требование, что $F$ поле в предыдущей задаче является существенным, приведите пример полинома степени $d$ над кольцом, которое не является полем, имеющего более $d$ корней.&lt;br /&gt;
# Покажите, что в определении PRAS можно заменить константу $3/4$ в требовании, что вероятность попасть в интервал $[1-\varepsilon;1+\varepsilon]$ должна быть $3/4$, на любое другое число, строго большее $1/2$.&lt;br /&gt;
# Можно ли в предыдущем задании заменить $1/2$ на $0$?&lt;br /&gt;
# Можно ли в решении задания 73 брать среднее значение в качестве оценки?&lt;br /&gt;
# Рассмотрим формулу в ДНФ. Обозначим как $t$ количество пар $($терм$,$ удовлетворяющее этот терм назначение переменных$)$. Выберем случайно терм, где вероятность выбрать терм пропорциональна числу удовлетворяющих этот терм назначений. Выберем случайное назначение $a$, удовлетворяющее этот терм. Рассмотрим случайную величину $X = t/cov(a)$, где $cov(a)$ - число термов, удовлетворенных назначением $a$. Докажите, что $EX = Y$, где $Y$ - число удовлетворяющих назначений заданной формулы.&lt;br /&gt;
# На базе предыдущего задания предложите альтернативный алгоритм апроксимации числа удовлетворяющих назначений ДНФ.&lt;br /&gt;
# Рандомизированный алгоритм для 2SAT. Рассмотрим следующий алгоритм решения задачи удовлетворимости булевой формулы в 2КНФ с $n$ переменными. Выберем случайное значение каждой переменной. Если формула не удовлетворена, выберем случайный не удовлетворенный клоз и инвертируем значение случайной переменной в нем. Докажите, что если удовлетворяющее назначение существует, оно будет найдено за $O(n^2)$ шагов. Указание: зафиксируйте любое удовлетворяющее формулу назначение и рассмотрите задачу как случайное блуждание по прямой, где координата - это число переменных, значение которых совпадает с значением в выбранном назначении.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для 3SAT?&lt;br /&gt;
# Докажите, что оценку из задания 78 нельзя улучшить: предложите формулу, для которой в среднем понадобится $\Omega(n^2)$ случайных шагов для поиска удовлетворяющего назначения.&lt;br /&gt;
# Предложите аналогичный заданию 78 алгоритм поиска раскраски графа в два цвета.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для поиска раскраски графа в три цвета?&lt;br /&gt;
# Обозначим как $m_k(G)$ количество паросочетаний размера $k$ в двудольном графе $G$, каждая доля которого содержит по $n$ вершин. Пусть граф содержит больше $k$ ребер. Докажите, что существует ребро $uv$, такое что $m_k(G)/m_k(G\setminus uv) \le n$.&lt;br /&gt;
# Пусть вероятностный алгоритм $U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем все паросочетания равновероятны. Покажите, как с использованием $U_k$ получить $\varepsilon$-$\delta$-FRPAS для доли паросочетаний, содержащих заданное ребро $uv$ в графе $G$.&lt;br /&gt;
# Покажите, как с использованием $U_k$ из предедыдущего задания получить $\varepsilon$-$\delta$-FRPAS для числа $m_k(G)$.&lt;br /&gt;
# Будем называть полиномиальный вероятностный алгоритм $U_k$ равномерным с точностью до $\rho$ генератором, если он получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем для любого паросочетания $M$ $|P(U_k(G)=M) - 1/m_k(G)| \le \rho/m_k(G)$. Пусть $\rho \le 1/n^b$ для некоторого $b$. Подберите константу $b$, чтобы можно было решить задание 84, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 85, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Пусть полиномиальный вероятностный алгоритм $\hat U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$ или $k-1$, причем все паросочетания равновероятны. Пусть $r = m_k(G)/m_{k-1}(G)$ удовлетворяет условию $1/n^2 \le r \le n^2$. Докажите, что с помощью $\hat U_k$ можно получить $\varepsilon$-$\delta$-FRPAS для $m_k(G)$.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 88, используя равномерный с точностью до $\rho \le 1/n^b$ генератор.&lt;br /&gt;
# Докажите, что если степень любой вершины в графе не меньше $n/2$, то выполнено условие $1/n^2 \le r \le n^2$ для задания 88.&lt;br /&gt;
# Соедините предыдущие задания, чтобы получить из существования равномерного с точностью до $\rho \le 1/n^b$ генератора $\hat U_k$ для любого $k$ $\varepsilon$-$\delta$-FPRAS для числа совершенных паросочетаний в двудольном графе, где степени всех вершин не меньше $n/2$.&lt;br /&gt;
# Рассмотрим $\varepsilon$-$\delta$-FPRAS $A$ для числа паросочетаний в двудольном графе. Используя $A$, постройте полиномиальный вероятностный алгоритм, который является равномерным генератором с точностью до $\rho = o(1)$.&lt;br /&gt;
# Пусть существует полиномиальный детерминированный алгоритм, который возвращает число совершенных паросочетаний в двудольном графе, степень каждой вершины которого равна хотя бы $\beta n$, где $0 &amp;lt; \beta &amp;lt; 1$. Докажите, что существует полиномиальный детерминированный алгоритм, который возвращает число совершенных паросочетаний в  произвольном двудольном графе.&lt;br /&gt;
# Рассмотрим алгоритм приближения числа $\pi$. Будем генерировать точки с равномерным распределением в квадрате $1 \times 1$ и считать долю попавших в круг диаметром 1, вписанный в этот квадрат. Оцените число итераций, необходимое, чтобы приблизить $\pi$ с точностью до $\varepsilon$.&lt;br /&gt;
# Пусть матрица переходов эргодической марковской цепи является дважды стохастической (сумма элементов каждого столбца также равна 1). Докажите, что стационарное распределение $(1/n, 1/n, \ldots, 1/n)$.&lt;br /&gt;
# Пусть матрицы $A$ и $B$ имеют один и тот же собственный вектор $x$ для собственных чисел $\lambda$ и $\mu$, соответственно. Докажите, что $x$ является собственным вектором для $A+B$. Для какого собственного числа?&lt;br /&gt;
# Задача приблизительного подсчета числа вхождений. Biased Sketch. Рассмотрим алгоритм: выберем случайную хеш-функцию $h: U\to \{0,1, \ldots, m-1\}$ из универсального семейства. Заведем счетчик $cnt[0\ldots m-1]$ и в качестве операцими $update(x)$ будем делать $cnt[h(x)]$++, а в качестве $query(x)$ будем возвращать $cnt[h(x)]$. Пусть выполнено $n$ запросов $update$. Обозначим как $a(x)$ количество вхождений числа $x$. Оцените $P(query(x) &amp;gt; a(x) + \varepsilon n)$.&lt;br /&gt;
# CountMin. В предыдущей задаче чтобы лучше оценить количество, будем использовать несколько хеш-функций. Пусть мы используем $r$ хеш-функций, для каждой свой массив $cnt_i$, в качестве ответа на запрос будем выдавать $\min(cnt_i[h_i(x)])$. Какое $r$ необходимо выбрать, чтобы выполнялось $P(query(x) &amp;gt; a(x) + \varepsilon n) &amp;lt; \delta$?&lt;br /&gt;
# Задача приблизительного подсчета числа вхождений. Unbiased Sketch. Рассмотрим алгоритм: выберем случайную хеш-функцию $h: U\to \{0,1, \ldots, m-1\}$ из универсального семейства, а также случайную знаковую функцию $s: U \to \{-1,1\}$. Заведем счетчик $cnt[0\ldots m-1]$ и в качестве операцими $update(x)$ будем делать $cnt[h(x)]$ += s(x), а в качестве $query(x)$ будем возвращать $cnt[h(x)]\cdot s(x)$. Пусть выполнено $n$ запросов $update$. Обозначим как $a(x)$ количество вхождений числа $x$. Докажите, что $D[query(x)] \le \frac{1}{m}\sum_y a(y)^2$.&lt;br /&gt;
# В условиях предыдущей задачи обозначим как $\lVert a \rVert_2 = \sqrt{\sum_x a(x)^2}$. Оцените $P(|query(x) - a(x)| &amp;gt; \varepsilon \lVert a \rVert_2)$.&lt;br /&gt;
# CountSketch В предыдущей задаче чтобы лучше оценить количество, будем использовать несколько хеш-функций. Пусть мы используем $r$ хеш-функций, для каждой свой массив $cnt_i$, в качестве ответа на запрос будем выдавать $median(cnt_i[h_i(x)])$. Какое $r$ необходимо выбрать, чтобы выполнялось $P(|query(x) - a(x)| &amp;gt; \varepsilon \lVert a \rVert_2$) &amp;lt; \delta)?&lt;br /&gt;
# Сравните оценки по времени, памяти и точности для CountMin и CountSketch. Сделайте вывод, когда какой из них лучше.&lt;br /&gt;
# Поиск $k$ самых частых. Используем тот или иной аппроксимационный алгоритм (CountMin или CountSketch), мы хотим найти $k$ самых частых элементов в последовательности $a_1, \ldots, a_n$. Будем поддерживать $set$ из $k$ самых частых, упорядоченный по оценке на число их вхождений. Рассматривая очередной элемент, добавляем его в set, если его оценка на число вхождений становится больше, чем у самого редкого в $set$-е. Оцените вероятность, что для всех $x$ в $set$-е в конце выполнено $a(x) \ge (1-\varepsilon)a(y)$, где $y$ - это $k$-й по частоте встречаемости элемент.&lt;br /&gt;
# Доминирующий элемент. Рассмотрим алгоритм, который ищет элемент, который встречается хотя бы $n/2$ раз в потоке $[a_1, \ldots, a_n]$. Пусть $0 \le a_i &amp;lt; N$ и $N \ge 2n$. Докажите, что детерминированный алгоритм, использующий $o(n\log(N/n))$ бит, не может решить поставленную задачу. Указание: рассмотрите состояние после половины элементов потока.&lt;br /&gt;
# Предложите алгоритм, использующий $O(\log(N+n))$ бит, который решает предыдущую задачу в предположении, что доминирующий элемент существует.&lt;br /&gt;
# Обобщите предыдущий алгоритм на случай $\varepsilon$-частых элементов: будем называть элемент $\varepsilon$-частым, если он составляет хотя бы $\varepsilon$ долю элементов во вводе. Как зависит память от $\varepsilon$? &lt;br /&gt;
# Все различные. Докажите или опровергните, что любой детерминированный алгоритм, который всегда корректно отвечает, верно ли, что все элементы во вводе $[a_1, a_2, \ldots, a_n]$ различны, должен использовать хотя бы $\Omega(n\log(2N/n))$ памяти.&lt;br /&gt;
# Недостающий элемент. Задан массив $[a_1, a_2, \ldots, a_{n-1}$, где все элементы от $1$ до $n$, кроме одного, встречаются ровно один раз. Найдите недостающий элемент, используя $O(\log n)$ памяти.&lt;br /&gt;
# Два недостающих элемента. Задан массив $[a_1, a_2, \ldots, a_{n-2}$, где все элементы от $1$ до $n$, кроме двух, встречаются ровно один раз. Найдите недостающие элементы, используя $o(n)$ памяти.&lt;/div&gt;</summary>
		<author><name>217.79.4.130</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81247</id>
		<title>Список заданий по продвинутым алгоритмам 2021 осень</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81247"/>
				<updated>2021-11-13T20:19:19Z</updated>
		
		<summary type="html">&lt;p&gt;217.79.4.130: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# $1 | p_i=1 | L_{max}$.&lt;br /&gt;
# $1 | r_i, d_i=d | L_{max}$.&lt;br /&gt;
# $1 | prec, r_i, p_i=1 | L_{max}$.&lt;br /&gt;
# Рассмотрим задачу $1 | p_i = 1, d_i | -$. Докажите, что подмножества работ, которые можно выполнить, образуют семейство независимых множеств некоторого матроида.&lt;br /&gt;
# $1 | p_i = 1, d_i | \sum w_iU_i$. Время $O(n\log n)$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum U_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum w_iU_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = p, pmtn, r_i | \sum w_iU_i$ за $O(n^{10})$.&lt;br /&gt;
# $1 || \sum U_i$&lt;br /&gt;
# $1 | r_i, p_i = p | \sum w_iC_i$ за $O(n^7)$&lt;br /&gt;
# Обозначение outtree означает, что граф зависимостей представляет собой исходящее дерево: каджая работа зависит не более чем от одной другой. $1 | outtree | \sum w_iC_i$&lt;br /&gt;
# Обозначение intree означает, что граф зависимостей представляет собой входящее дерево: от каждой работы зависит не более одной другой. $1 | intree | \sum w_iC_i$&lt;br /&gt;
# $P | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | pmtn, r_i | L_{max}$&lt;br /&gt;
# $Q | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | p_i = p, r_i, d_i | \sum C_i$ за $O(n^3 \log n)$ (бонус за $O(n^3 \log\log n)$)&lt;br /&gt;
# $P | p_i = 1 | \sum w_iU_i$ - доведите доказательство с пары до конца&lt;br /&gt;
# $P | p_i = 1 | \sum w_iC_i$&lt;br /&gt;
# $P | p_i = 1, pmtn | \sum w_iC_i$&lt;br /&gt;
# $Q | pmtn | \sum C_i$&lt;br /&gt;
# $Q | pmtn | \sum f_i$ (напомним, что f_i - произвольная неубывающая функция, может быть своя у каждой работы)&lt;br /&gt;
# $Q | pmtn | f_{max}$&lt;br /&gt;
# $P2 | p_i = 1, prec, r_i | \sum C_i$ за $O(n^9)$&lt;br /&gt;
# Сведите задачу $R|pmtn|C_{max}$ к задаче линейного программирования.&lt;br /&gt;
# $P|intree, p_i=1|L_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $F2 | pmtn | C_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1 | C_{max}$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iC_i$&lt;br /&gt;
# $O | p_{ij} = 1, d_i | -$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1, r_i | C_{max}$&lt;br /&gt;
# $O2 | p_{ij} = 1, prec | \sum C_i$&lt;br /&gt;
# Обозначим как $BP(n)$ время умножения булевых матриц размера $n \times n$ над $\vee, \wedge$. Обозначим как $MM(n)$ время умножения целочисленных матриц размера $n \times n$ над $+, \times$. Докажите, что $BP(n) = O(MM(n))$. &lt;br /&gt;
# Докажите, что можно найти транзитивное замыкание графа за время $O(BP(n))$.&lt;br /&gt;
# Пусть $A$ и $B$ - матрицы размера $n \times n$. Пусть $R \subset \{1, 2, \ldots, n\}$, $|R|=r$. Обозначим как $A^R$ матрицу, которая получается из $A$ удалением всех столбцов, кроме столбцов из множества $R$. Аналогично, обозначим как $B_R$ матрицу, которая получается из $B$ удалением всех строк, кроме строк из множества $R$. Докажите, что произведение матриц $A^R\cdot B_R$ может быть найдено за время $O((n/r)^2 MM(r))$, где $MM(r)$ - время умножения матриц размером $r\times r$. &lt;br /&gt;
# Пусть $MM(n)=2+\varepsilon$, $\varepsilon&amp;gt;0$. Модифицируйте алгоритм построения BPWM, чтобы он работал за $MM(n) \log n$. Почему эта идея не сработает, если $MM(n) = O(n^2)$?&lt;br /&gt;
# Докажите лемму с лекции про то, что если в урне $n$ шаров, из которых $w$ белых и $n/2\le wr \le n$, а событие $A$ означает, что из $r$ наугад выбранных из урны шаров оказался ровно один белый, то $P(A) \ge 1/2e$.&lt;br /&gt;
# Сохраняется ли вероятность из предыдущего задания, если шары после вытаскивания возвращаются в урну? Если нет, то можно ли получить аналогичную оценку?&lt;br /&gt;
# Нижняя оценка на сумму длин путей. Докажите, что можно построить граф, в котором $\Omega(n^2)$ пар вершин, расстояние между которыми $\Omega(n)$.&lt;br /&gt;
# Известно, что у учителя есть $2^k$ яблок для некоторого целого неотрицательного $k$. На глазах у студентов он съедает одно яблоко, а остальное раздает ученикам А и В, чтобы ни один из них не видел, сколько получает другой. А и В не знают числа $k$. Они могут показать друг другу по одному знаку из трёх возможных: почесать голову правой, левой или обеими руками. К удивлению учителя, ученики всегда знают, кто получил больше яблок или что учитель съел единственное яблоко сам. Как такое возможно?&lt;br /&gt;
# Вероятностный алгоритм поиска минимума некоторый функции от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Можно ли найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $2/3$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# В алгоритме Кинг с лекции обозначим как $f(u)$ лист, которая получается в ветвящемся дереве $T'$ из вершины $u$ в исходном дереве $T$. Докажите, что если вес максимального ребра на пути из $u$ в $v$ в $T$ равен $x$, а вес максимального ребра на пути из $f(u)$ в $f(v)$ в $T'$ равен $x'$, то $x \ge x'$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что то $x \le x'$.&lt;br /&gt;
# Рассмотрим ветвящееся дерево, пусть в нем $n$ вершин. Пусть есть $m$ запросов на пары листьев, для которых необходимо найти максимальное ребро на пути. Разобьем каждый запрос на два запроса на вертикальном пути до $LCA$ этих листьев, таким образом имеем $2m$ вертикальных путей. Для вершины $v$ обозначим как $A(v)$ множество вертикальных путей, проходящих через $v$. Обозначим как $D_i$ множество вершин на расстоянии $i$ от корня, как $d_i$ число вершин на расстоянии $i$ от корня ($d_i=|D_i|$). Докажите, что $\sum\limits_{u\in D_i}\lceil\log(1+|A(u)|)\rceil&amp;lt;\sum\limits_{u\in D_i}\left(1+\log(1+|A(u)|)\right)\le d_i+d_i \log\frac{d_i+2m}{d_i}$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что $\sum\limits_{i\ge 0}\left(d_i + d_i\log\frac{d_i+2m}{d_i}\right)\le n+n\log\frac{n+2m}{n}+2n$.&lt;br /&gt;
# Докажите, что $\sum\limits_{u}\lceil\log(1+|A(u)|)\rceil = O(n + m)$.&lt;br /&gt;
# Обозначим как $A[v]$ число, в котором $i$-й бит равен $1$, если в $A(v)$ есть путь, заканчивающийся на расстоянии $i$ от корня. Считайте, что вы можете решить задачу о $m$ запросах $LCA$ в дереве с $n$ вершинами за $O(n+m)$ (например, используя алгоритм Фарах-Колтона и Бендера, см https://www.ics.uci.edu/~eppstein/261/BenFar-LCA-00.pdf). Объясните, как посчитать $A[v]$ за время $O(n+m)$. &lt;br /&gt;
# Назовем вершину $v$ большой, если $|A(v)| &amp;gt; \log n/\log\log n$ и маленькой в противном случае. Докажите, что число больших вершин асимптотически не превышает $m /\log\log n$. Указание: оцените число больших вершин на каждом уровне дерева. Отдельно рассмотрите большие вершины на нижних $\log\log n$ и на остальных уровнях.&lt;br /&gt;
# Для вершины $v$, для которой $|A(v)| = k$ рассмотрим фрагменты путей, лежащие выше вершины $v$. Будем хранить $B(v) = [l_1, l_2, \ldots, l_k]$ - список глубин самых тяжелых ребер на фрагментах путях, проходящих через $v$, в порядке от самого длинного пути к самому короткому. Иначе говоря, пронумеруем пути из $A(v)$ в порядке возрастания глубины их верхней вершины. Тогда $l_i$ - расстояние от корня до ребра, которое является самым тяжелым на пути от $v$ до некоторой вершины $u_i$, которая является верхним концом $i$-го пути. Числа $l_i$ называются тагами, длина тага $O(\log\log n)$. Докажите, что массив $B(v)$ отсортирован по неубыванию.&lt;br /&gt;
# Пусть $p$ - родитель вершины $v$, как связаны массивы $B(p)$ и $B(v)$? Дайте подробное описание, используя, при необходимости, $A(p)$ и $A(v)$.&lt;br /&gt;
# Для больших вершин $B(v)$ помещается в $O(\log\log n)$ машинных слово. Пусть родитель вершины также большой. Предложите алгоритм пересчета $B(v)$ через $B(p)$, $A[p]$ и $A[v]$ за $O(\log\log n)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$.&lt;br /&gt;
# Обозначим как $bigp[v]$ максимальную глубину, на котором находится большой предок вершины $v$. Предложите алгоритм, как за построить массив $bigp$ по массиву $A$ за $O(n)$. &lt;br /&gt;
# Для маленьких вершин $B(v)$ помещается в машинное слово, однако вместо списка $B(v)$ будем хранить вспомогательный список $C(v)$, устроенный так. Если самое тяжелое ребро на $i$-м по глубине пути из $A(v)$ находится ниже, чем $bigp[v]$, то будем хранить просто $l_i$. Иначе будем хранить $z_i$ - номер $l_i$ в $B(bigp[v])$. Обозначим упакованный в машинное слово список $C(v)$ за $C[v]$. Предложите алгоритм пересчета $С[v]$ за $O(1)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$. Вы можете использовать посчитанные для родителей и предков $C[u]$, $B(u)$, $A[u]$, $bigp[u]$.&lt;br /&gt;
# Объедините результаты всех предыдущих заданий, чтобы получить алгоритм обработки $m$ запросов поиска максимального ребра на пути между двумя вершинами на дереве за $O(n+m)$.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального разреза в графе к $O(n)$ запускам алгоритма поиска минимального $s-t$ разреза.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального $s-t$ разреза в графе к полиномимальному числу запусков алгоритма поиска глобального минимального разреза.&lt;br /&gt;
# Петя хочет упростить алгоритм Каргера-Штайна. Он запускает алгоритм Каргера (стягивание по случайному ребру), пока количество вершин не станет равно $t$, а затем запускает алгоритм за $t^3$ поиска минимального глобального разреза. Затем он повторяет алгоритм, пока вероятность успеха не составит хотя бы $1/2$. Какое значение $t$ необходимо выбрать, чтобы минимизировать время работы получившегося алгоритма? Какое будет время работы?&lt;br /&gt;
# Докажите, что если в полном двоичном дереве высоты $h$ каждое ребро удаляется с вероятностью $1/2$, то путь от корня до листа сохраняется с вероятностью $\Theta(1/h)$. &lt;br /&gt;
# Обобщите предыдущее задание, если ребро удаляется с вероятностью $p$.&lt;br /&gt;
# С учетом предыдущего задания модифицируйте алгоритм Каргера-Штайна, чтобы разветвляться когда накопленная вероятность ошибки достигнет $p$. Найдите зависимость времени работы от $p$, какое значение $p$ оптимально выбрать?&lt;br /&gt;
# Назовем разрез $\alpha$-оптимальным, если его размер не больше $\alpha C_{min}$, где $C_{min}$ - минимальный разрез. Оцените вероятность, что один запуск алгоритма Каргера (без разветвлений) найдет $\alpha$-оптимальный разрез (в зависимости от $\alpha$).&lt;br /&gt;
# Докажите, что в графе не больше $n\choose 2$ различных минимальных глобальных разрезов.&lt;br /&gt;
# Сформулируйте и докажите аналогичный предыдущему заданию результат для $\alpha$-оптимальных разрезов.&lt;br /&gt;
# Докажите, что для полинома $p(x_1, \ldots, x_n)$ от $n$ переменных степени $d$ над полем $F$ и множества $S\subset F$ размера $s$ вероятность $P(p(x_1, \ldots, x_n)=0)\le d/s$, где вероятностное пространство - равновероятно все вектора $(x_1, \ldots, x_n)\in S^n$. Используйте без доказательства, что полином от одной переменной степени $d$ над любым полем имеет не более $d$ корней.&lt;br /&gt;
# Покажите, что требование, что $F$ поле в предыдущей задаче является существенным, приведите пример полинома степени $d$ над кольцом, которое не является полем, имеющего более $d$ корней.&lt;br /&gt;
# Покажите, что в определении PRAS можно заменить константу $3/4$ в требовании, что вероятность попасть в интервал $[1-\varepsilon;1+\varepsilon]$ должна быть $3/4$, на любое другое число, строго большее $1/2$.&lt;br /&gt;
# Можно ли в предыдущем задании заменить $1/2$ на $0$?&lt;br /&gt;
# Можно ли в решении задания 73 брать среднее значение в качестве оценки?&lt;br /&gt;
# Рассмотрим формулу в ДНФ. Обозначим как $t$ количество пар $($терм$,$ удовлетворяющее этот терм назначение переменных$)$. Выберем случайно терм, где вероятность выбрать терм пропорциональна числу удовлетворяющих этот терм назначений. Выберем случайное назначение $a$, удовлетворяющее этот терм. Рассмотрим случайную величину $X = t/cov(a)$, где $cov(a)$ - число термов, удовлетворенных назначением $a$. Докажите, что $EX = Y$, где $Y$ - число удовлетворяющих назначений заданной формулы.&lt;br /&gt;
# На базе предыдущего задания предложите альтернативный алгоритм апроксимации числа удовлетворяющих назначений ДНФ.&lt;br /&gt;
# Рандомизированный алгоритм для 2SAT. Рассмотрим следующий алгоритм решения задачи удовлетворимости булевой формулы в 2КНФ с $n$ переменными. Выберем случайное значение каждой переменной. Если формула не удовлетворена, выберем случайный не удовлетворенный клоз и инвертируем значение случайной переменной в нем. Докажите, что если удовлетворяющее назначение существует, оно будет найдено за $O(n^2)$ шагов. Указание: зафиксируйте любое удовлетворяющее формулу назначение и рассмотрите задачу как случайное блуждание по прямой, где координата - это число переменных, значение которых совпадает с значением в выбранном назначении.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для 3SAT?&lt;br /&gt;
# Докажите, что оценку из задания 78 нельзя улучшить: предложите формулу, для которой в среднем понадобится $\Omega(n^2)$ случайных шагов для поиска удовлетворяющего назначения.&lt;br /&gt;
# Предложите аналогичный заданию 78 алгоритм поиска раскраски графа в два цвета.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для поиска раскраски графа в три цвета?&lt;br /&gt;
# Обозначим как $m_k(G)$ количество паросочетаний размера $k$ в двудольном графе $G$, каждая доля которого содержит по $n$ вершин. Пусть граф содержит больше $k$ ребер. Докажите, что существует ребро $uv$, такое что $m_k(G)/m_k(G\setminus uv) \le n$.&lt;br /&gt;
# Пусть вероятностный алгоритм $U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем все паросочетания равновероятны. Покажите, как с использованием $U_k$ получить $\varepsilon$-$\delta$-FRPAS для доли паросочетаний, содержащих заданное ребро $uv$ в графе $G$.&lt;br /&gt;
# Покажите, как с использованием $U_k$ из предедыдущего задания получить $\varepsilon$-$\delta$-FRPAS для числа $m_k(G)$.&lt;br /&gt;
# Будем называть полиномиальный вероятностный алгоритм $U_k$ равномерным с точностью до $\rho$ генератором, если он получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем для любого паросочетания $M$ $|P(U_k(G)=M) - 1/m_k(G)| \le \rho/m_k(G)$. Пусть $\rho \le 1/n^b$ для некоторого $b$. Подберите константу $b$, чтобы можно было решить задание 84, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 85, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Пусть полиномиальный вероятностный алгоритм $\hat U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$ или $k-1$, причем все паросочетания равновероятны. Пусть $r = m_k(G)/m_{k-1}(G)$ удовлетворяет условию $1/n^2 \le r \le n^2$. Докажите, что с помощью $\hat U_k$ можно получить $\varepsilon$-$\delta$-FRPAS для $m_k(G)$.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 88, используя равномерный с точностью до $\rho \le 1/n^b$ генератор.&lt;br /&gt;
# Докажите, что если степень любой вершины в графе не меньше $n/2$, то выполнено условие $1/n^2 \le r \le n^2$ для задания 88.&lt;br /&gt;
# Соедините предыдущие задания, чтобы получить из существования равномерного с точностью до $\rho \le 1/n^b$ генератора $\hat U_k$ для любого $k$ $\varepsilon$-$\delta$-FPRAS для числа совершенных паросочетаний в двудольном графе, где степени всех вершин не меньше $n/2$.&lt;br /&gt;
# Рассмотрим $\varepsilon$-$\delta$-FPRAS $A$ для числа паросочетаний в двудольном графе. Используя $A$, постройте полиномиальный вероятностный алгоритм, который является равномерным генератором с точностью до $\rho = o(1)$.&lt;br /&gt;
# Пусть существует полиномиальный детерминированный алгоритм, который возвращает число совершенных паросочетаний в двудольном графе, степень каждой вершины которого равна хотя бы $\beta n$, где $0 &amp;lt; \beta &amp;lt; 1$. Докажите, что существует полиномиальный детерминированный алгоритм, который возвращает число совершенных паросочетаний в  произвольном двудольном графе.&lt;br /&gt;
# Рассмотрим алгоритм приближения числа $\pi$. Будем генерировать точки с равномерным распределением в квадрате $1 \times 1$ и считать долю попавших в круг диаметром 1, вписанный в этот квадрат. Оцените число итераций, необходимое, чтобы приблизить $\pi$ с точностью до $\varepsilon$.&lt;br /&gt;
# Пусть матрица переходов эргодической марковской цепи является дважды стохастической (сумма элементов каждого столбца также равна 1). Докажите, что стационарное распределение $(1/n, 1/n, \ldots, 1/n)$.&lt;br /&gt;
# Пусть матрицы $A$ и $B$ имеют один и тот же собственный вектор $x$ для собственных чисел $\lambda$ и $\mu$, соответственно. Докажите, что $x$ является собственным вектором для $A+B$. Для какого собственного числа?&lt;/div&gt;</summary>
		<author><name>217.79.4.130</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81246</id>
		<title>Список заданий по продвинутым алгоритмам 2021 осень</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81246"/>
				<updated>2021-11-13T20:13:26Z</updated>
		
		<summary type="html">&lt;p&gt;217.79.4.130: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# $1 | p_i=1 | L_{max}$.&lt;br /&gt;
# $1 | r_i, d_i=d | L_{max}$.&lt;br /&gt;
# $1 | prec, r_i, p_i=1 | L_{max}$.&lt;br /&gt;
# Рассмотрим задачу $1 | p_i = 1, d_i | -$. Докажите, что подмножества работ, которые можно выполнить, образуют семейство независимых множеств некоторого матроида.&lt;br /&gt;
# $1 | p_i = 1, d_i | \sum w_iU_i$. Время $O(n\log n)$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum U_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum w_iU_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = p, pmtn, r_i | \sum w_iU_i$ за $O(n^{10})$.&lt;br /&gt;
# $1 || \sum U_i$&lt;br /&gt;
# $1 | r_i, p_i = p | \sum w_iC_i$ за $O(n^7)$&lt;br /&gt;
# Обозначение outtree означает, что граф зависимостей представляет собой исходящее дерево: каджая работа зависит не более чем от одной другой. $1 | outtree | \sum w_iC_i$&lt;br /&gt;
# Обозначение intree означает, что граф зависимостей представляет собой входящее дерево: от каждой работы зависит не более одной другой. $1 | intree | \sum w_iC_i$&lt;br /&gt;
# $P | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | pmtn, r_i | L_{max}$&lt;br /&gt;
# $Q | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | p_i = p, r_i, d_i | \sum C_i$ за $O(n^3 \log n)$ (бонус за $O(n^3 \log\log n)$)&lt;br /&gt;
# $P | p_i = 1 | \sum w_iU_i$ - доведите доказательство с пары до конца&lt;br /&gt;
# $P | p_i = 1 | \sum w_iC_i$&lt;br /&gt;
# $P | p_i = 1, pmtn | \sum w_iC_i$&lt;br /&gt;
# $Q | pmtn | \sum C_i$&lt;br /&gt;
# $Q | pmtn | \sum f_i$ (напомним, что f_i - произвольная неубывающая функция, может быть своя у каждой работы)&lt;br /&gt;
# $Q | pmtn | f_{max}$&lt;br /&gt;
# $P2 | p_i = 1, prec, r_i | \sum C_i$ за $O(n^9)$&lt;br /&gt;
# Сведите задачу $R|pmtn|C_{max}$ к задаче линейного программирования.&lt;br /&gt;
# $P|intree, p_i=1|L_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $F2 | pmtn | C_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1 | C_{max}$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iC_i$&lt;br /&gt;
# $O | p_{ij} = 1, d_i | -$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1, r_i | C_{max}$&lt;br /&gt;
# $O2 | p_{ij} = 1, prec | \sum C_i$&lt;br /&gt;
# Обозначим как $BP(n)$ время умножения булевых матриц размера $n \times n$ над $\vee, \wedge$. Обозначим как $MM(n)$ время умножения целочисленных матриц размера $n \times n$ над $+, \times$. Докажите, что $BP(n) = O(MM(n))$. &lt;br /&gt;
# Докажите, что можно найти транзитивное замыкание графа за время $O(BP(n))$.&lt;br /&gt;
# Пусть $A$ и $B$ - матрицы размера $n \times n$. Пусть $R \subset \{1, 2, \ldots, n\}$, $|R|=r$. Обозначим как $A^R$ матрицу, которая получается из $A$ удалением всех столбцов, кроме столбцов из множества $R$. Аналогично, обозначим как $B_R$ матрицу, которая получается из $B$ удалением всех строк, кроме строк из множества $R$. Докажите, что произведение матриц $A^R\cdot B_R$ может быть найдено за время $O((n/r)^2 MM(r))$, где $MM(r)$ - время умножения матриц размером $r\times r$. &lt;br /&gt;
# Пусть $MM(n)=2+\varepsilon$, $\varepsilon&amp;gt;0$. Модифицируйте алгоритм построения BPWM, чтобы он работал за $MM(n) \log n$. Почему эта идея не сработает, если $MM(n) = O(n^2)$?&lt;br /&gt;
# Докажите лемму с лекции про то, что если в урне $n$ шаров, из которых $w$ белых и $n/2\le wr \le n$, а событие $A$ означает, что из $r$ наугад выбранных из урны шаров оказался ровно один белый, то $P(A) \ge 1/2e$.&lt;br /&gt;
# Сохраняется ли вероятность из предыдущего задания, если шары после вытаскивания возвращаются в урну? Если нет, то можно ли получить аналогичную оценку?&lt;br /&gt;
# Нижняя оценка на сумму длин путей. Докажите, что можно построить граф, в котором $\Omega(n^2)$ пар вершин, расстояние между которыми $\Omega(n)$.&lt;br /&gt;
# Известно, что у учителя есть $2^k$ яблок для некоторого целого неотрицательного $k$. На глазах у студентов он съедает одно яблоко, а остальное раздает ученикам А и В, чтобы ни один из них не видел, сколько получает другой. А и В не знают числа $k$. Они могут показать друг другу по одному знаку из трёх возможных: почесать голову правой, левой или обеими руками. К удивлению учителя, ученики всегда знают, кто получил больше яблок или что учитель съел единственное яблоко сам. Как такое возможно?&lt;br /&gt;
# Вероятностный алгоритм поиска минимума некоторый функции от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Можно ли найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $2/3$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# В алгоритме Кинг с лекции обозначим как $f(u)$ лист, которая получается в ветвящемся дереве $T'$ из вершины $u$ в исходном дереве $T$. Докажите, что если вес максимального ребра на пути из $u$ в $v$ в $T$ равен $x$, а вес максимального ребра на пути из $f(u)$ в $f(v)$ в $T'$ равен $x'$, то $x \ge x'$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что то $x \le x'$.&lt;br /&gt;
# Рассмотрим ветвящееся дерево, пусть в нем $n$ вершин. Пусть есть $m$ запросов на пары листьев, для которых необходимо найти максимальное ребро на пути. Разобьем каждый запрос на два запроса на вертикальном пути до $LCA$ этих листьев, таким образом имеем $2m$ вертикальных путей. Для вершины $v$ обозначим как $A(v)$ множество вертикальных путей, проходящих через $v$. Обозначим как $D_i$ множество вершин на расстоянии $i$ от корня, как $d_i$ число вершин на расстоянии $i$ от корня ($d_i=|D_i|$). Докажите, что $\sum\limits_{u\in D_i}\lceil\log(1+|A(u)|)\rceil&amp;lt;\sum\limits_{u\in D_i}\left(1+\log(1+|A(u)|)\right)\le d_i+d_i \log\frac{d_i+2m}{d_i}$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что $\sum\limits_{i\ge 0}\left(d_i + d_i\log\frac{d_i+2m}{d_i}\right)\le n+n\log\frac{n+2m}{n}+2n$.&lt;br /&gt;
# Докажите, что $\sum\limits_{u}\lceil\log(1+|A(u)|)\rceil = O(n + m)$.&lt;br /&gt;
# Обозначим как $A[v]$ число, в котором $i$-й бит равен $1$, если в $A(v)$ есть путь, заканчивающийся на расстоянии $i$ от корня. Считайте, что вы можете решить задачу о $m$ запросах $LCA$ в дереве с $n$ вершинами за $O(n+m)$ (например, используя алгоритм Фарах-Колтона и Бендера, см https://www.ics.uci.edu/~eppstein/261/BenFar-LCA-00.pdf). Объясните, как посчитать $A[v]$ за время $O(n+m)$. &lt;br /&gt;
# Назовем вершину $v$ большой, если $|A(v)| &amp;gt; \log n/\log\log n$ и маленькой в противном случае. Докажите, что число больших вершин асимптотически не превышает $m /\log\log n$. Указание: оцените число больших вершин на каждом уровне дерева. Отдельно рассмотрите большие вершины на нижних $\log\log n$ и на остальных уровнях.&lt;br /&gt;
# Для вершины $v$, для которой $|A(v)| = k$ рассмотрим фрагменты путей, лежащие выше вершины $v$. Будем хранить $B(v) = [l_1, l_2, \ldots, l_k]$ - список глубин самых тяжелых ребер на фрагментах путях, проходящих через $v$, в порядке от самого длинного пути к самому короткому. Иначе говоря, пронумеруем пути из $A(v)$ в порядке возрастания глубины их верхней вершины. Тогда $l_i$ - расстояние от корня до ребра, которое является самым тяжелым на пути от $v$ до некоторой вершины $u_i$, которая является верхним концом $i$-го пути. Числа $l_i$ называются тагами, длина тага $O(\log\log n)$. Докажите, что массив $B(v)$ отсортирован по неубыванию.&lt;br /&gt;
# Пусть $p$ - родитель вершины $v$, как связаны массивы $B(p)$ и $B(v)$? Дайте подробное описание, используя, при необходимости, $A(p)$ и $A(v)$.&lt;br /&gt;
# Для больших вершин $B(v)$ помещается в $O(\log\log n)$ машинных слово. Пусть родитель вершины также большой. Предложите алгоритм пересчета $B(v)$ через $B(p)$, $A[p]$ и $A[v]$ за $O(\log\log n)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$.&lt;br /&gt;
# Обозначим как $bigp[v]$ максимальную глубину, на котором находится большой предок вершины $v$. Предложите алгоритм, как за построить массив $bigp$ по массиву $A$ за $O(n)$. &lt;br /&gt;
# Для маленьких вершин $B(v)$ помещается в машинное слово, однако вместо списка $B(v)$ будем хранить вспомогательный список $C(v)$, устроенный так. Если самое тяжелое ребро на $i$-м по глубине пути из $A(v)$ находится ниже, чем $bigp[v]$, то будем хранить просто $l_i$. Иначе будем хранить $z_i$ - номер $l_i$ в $B(bigp[v])$. Обозначим упакованный в машинное слово список $C(v)$ за $C[v]$. Предложите алгоритм пересчета $С[v]$ за $O(1)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$. Вы можете использовать посчитанные для родителей и предков $C[u]$, $B(u)$, $A[u]$, $bigp[u]$.&lt;br /&gt;
# Объедините результаты всех предыдущих заданий, чтобы получить алгоритм обработки $m$ запросов поиска максимального ребра на пути между двумя вершинами на дереве за $O(n+m)$.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального разреза в графе к $O(n)$ запускам алгоритма поиска минимального $s-t$ разреза.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального $s-t$ разреза в графе к полиномимальному числу запусков алгоритма поиска глобального минимального разреза.&lt;br /&gt;
# Петя хочет упростить алгоритм Каргера-Штайна. Он запускает алгоритм Каргера (стягивание по случайному ребру), пока количество вершин не станет равно $t$, а затем запускает алгоритм за $t^3$ поиска минимального глобального разреза. Затем он повторяет алгоритм, пока вероятность успеха не составит хотя бы $1/2$. Какое значение $t$ необходимо выбрать, чтобы минимизировать время работы получившегося алгоритма? Какое будет время работы?&lt;br /&gt;
# Докажите, что если в полном двоичном дереве высоты $h$ каждое ребро удаляется с вероятностью $1/2$, то путь от корня до листа сохраняется с вероятностью $\Theta(1/h)$. &lt;br /&gt;
# Обобщите предыдущее задание, если ребро удаляется с вероятностью $p$.&lt;br /&gt;
# С учетом предыдущего задания модифицируйте алгоритм Каргера-Штайна, чтобы разветвляться когда накопленная вероятность ошибки достигнет $p$. Найдите зависимость времени работы от $p$, какое значение $p$ оптимально выбрать?&lt;br /&gt;
# Назовем разрез $\alpha$-оптимальным, если его размер не больше $\alpha C_{min}$, где $C_{min}$ - минимальный разрез. Оцените вероятность, что один запуск алгоритма Каргера (без разветвлений) найдет $\alpha$-оптимальный разрез (в зависимости от $\alpha$).&lt;br /&gt;
# Докажите, что в графе не больше $n\choose 2$ различных минимальных глобальных разрезов.&lt;br /&gt;
# Сформулируйте и докажите аналогичный предыдущему заданию результат для $\alpha$-оптимальных разрезов.&lt;br /&gt;
# Докажите, что для полинома $p(x_1, \ldots, x_n)$ от $n$ переменных степени $d$ над полем $F$ и множества $S\subset F$ размера $s$ вероятность $P(p(x_1, \ldots, x_n)=0)\le d/s$, где вероятностное пространство - равновероятно все вектора $(x_1, \ldots, x_n)\in S^n$. Используйте без доказательства, что полином от одной переменной степени $d$ над любым полем имеет не более $d$ корней.&lt;br /&gt;
# Покажите, что требование, что $F$ поле в предыдущей задаче является существенным, приведите пример полинома степени $d$ над кольцом, которое не является полем, имеющего более $d$ корней.&lt;br /&gt;
# Покажите, что в определении PRAS можно заменить константу $3/4$ в требовании, что вероятность попасть в интервал $[1-\varepsilon;1+\varepsilon]$ должна быть $3/4$, на любое другое число, строго большее $1/2$.&lt;br /&gt;
# Можно ли в предыдущем задании заменить $1/2$ на $0$?&lt;br /&gt;
# Можно ли в решении задания 73 брать среднее значение в качестве оценки?&lt;br /&gt;
# Рассмотрим формулу в ДНФ. Обозначим как $t$ количество пар $($терм$,$ удовлетворяющее этот терм назначение переменных$)$. Выберем случайно терм, где вероятность выбрать терм пропорциональна числу удовлетворяющих этот терм назначений. Выберем случайное назначение $a$, удовлетворяющее этот терм. Рассмотрим случайную величину $X = t/cov(a)$, где $cov(a)$ - число термов, удовлетворенных назначением $a$. Докажите, что $EX = Y$, где $Y$ - число удовлетворяющих назначений заданной формулы.&lt;br /&gt;
# На базе предыдущего задания предложите альтернативный алгоритм апроксимации числа удовлетворяющих назначений ДНФ.&lt;br /&gt;
# Рандомизированный алгоритм для 2SAT. Рассмотрим следующий алгоритм решения задачи удовлетворимости булевой формулы в 2КНФ с $n$ переменными. Выберем случайное значение каждой переменной. Если формула не удовлетворена, выберем случайный не удовлетворенный клоз и инвертируем значение случайной переменной в нем. Докажите, что если удовлетворяющее назначение существует, оно будет найдено за $O(n^2)$ шагов. Указание: зафиксируйте любое удовлетворяющее формулу назначение и рассмотрите задачу как случайное блуждание по прямой, где координата - это число переменных, значение которых совпадает с значением в выбранном назначении.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для 3SAT?&lt;br /&gt;
# Докажите, что оценку из задания 78 нельзя улучшить: предложите формулу, для которой в среднем понадобится $\Omega(n^2)$ случайных шагов для поиска удовлетворяющего назначения.&lt;br /&gt;
# Предложите аналогичный заданию 78 алгоритм поиска раскраски графа в два цвета.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для поиска раскраски графа в три цвета?&lt;br /&gt;
# Обозначим как $m_k(G)$ количество паросочетаний размера $k$ в двудольном графе $G$, каждая доля которого содержит по $n$ вершин. Докажите, что существует ребро $uv$, такое что $m_k(G)/m_k(G\setminus uv) \le n$.&lt;br /&gt;
# Пусть вероятностный алгоритм $U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем все паросочетания равновероятны. Покажите, как с использованием $U_k$ получить $\varepsilon$-$\delta$-FRPAS для доли паросочетаний, содержащих заданное ребро $uv$ в графе $G$.&lt;br /&gt;
# Покажите, как с использованием $U_k$ из предедыдущего задания получить $\varepsilon$-$\delta$-FRPAS для числа $m_k(G)$.&lt;br /&gt;
# Будем называть полиномиальный вероятностный алгоритм $U_k$ равномерным с точностью до $\rho$ генератором, если он получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем для любого паросочетания $M$ $|P(U_k(G)=M) - 1/m_k(G)| \le \rho/m_k(G)$. Пусть $\rho \le 1/n^b$ для некоторого $b$. Подберите константу $b$, чтобы можно было решить задание 84, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 85, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Пусть полиномиальный вероятностный алгоритм $\hat U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$ или $k-1$, причем все паросочетания равновероятны. Пусть $r = m_k(G)/m_{k-1}(G)$ удовлетворяет условию $1/n^2 \le r \le n^2$. Докажите, что с помощью $\hat U_k$ можно получить $\varepsilon$-$\delta$-FRPAS для $m_k(G)$.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 88, используя равномерный с точностью до $\rho \le 1/n^b$ генератор.&lt;br /&gt;
# Докажите, что если степень любой вершины в графе не меньше $n/2$, то выполнено условие $1/n^2 \le r \le n^2$ для задания 88.&lt;br /&gt;
# Соедините предыдущие задания, чтобы получить из существования равномерного с точностью до $\rho \le 1/n^b$ генератора $\hat U_k$ для любого $k$ $\varepsilon$-$\delta$-FPRAS для числа совершенных паросочетаний в двудольном графе, где степени всех вершин не меньше $n/2$.&lt;br /&gt;
# Рассмотрим $\varepsilon$-$\delta$-FPRAS $A$ для числа паросочетаний в двудольном графе. Используя $A$, постройте полиномиальный вероятностный алгоритм, который является равномерным генератором с точностью до $\rho = o(1)$.&lt;br /&gt;
# Пусть существует полиномиальный детерминированный алгоритм, который возвращает число совершенных паросочетаний в двудольном графе, степень каждой вершины которого равна хотя бы $\beta n$, где $0 &amp;lt; \beta &amp;lt; 1$. Докажите, что существует полиномиальный детерминированный алгоритм, который возвращает число совершенных паросочетаний в  произвольном двудольном графе.&lt;br /&gt;
# Рассмотрим алгоритм приближения числа $\pi$. Будем генерировать точки с равномерным распределением в квадрате $1 \times 1$ и считать долю попавших в круг диаметром 1, вписанный в этот квадрат. Оцените число итераций, необходимое, чтобы приблизить $\pi$ с точностью до $\varepsilon$.&lt;br /&gt;
# Пусть матрица переходов эргодической марковской цепи является дважды стохастической (сумма элементов каждого столбца также равна 1). Докажите, что стационарное распределение $(1/n, 1/n, \ldots, 1/n)$.&lt;br /&gt;
# Пусть матрицы $A$ и $B$ имеют один и тот же собственный вектор $x$ для собственных чисел $\lambda$ и $\mu$, соответственно. Докажите, что $x$ является собственным вектором для $A+B$. Для какого собственного числа?&lt;/div&gt;</summary>
		<author><name>217.79.4.130</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81245</id>
		<title>Список заданий по продвинутым алгоритмам 2021 осень</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81245"/>
				<updated>2021-11-13T20:10:37Z</updated>
		
		<summary type="html">&lt;p&gt;217.79.4.130: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# $1 | p_i=1 | L_{max}$.&lt;br /&gt;
# $1 | r_i, d_i=d | L_{max}$.&lt;br /&gt;
# $1 | prec, r_i, p_i=1 | L_{max}$.&lt;br /&gt;
# Рассмотрим задачу $1 | p_i = 1, d_i | -$. Докажите, что подмножества работ, которые можно выполнить, образуют семейство независимых множеств некоторого матроида.&lt;br /&gt;
# $1 | p_i = 1, d_i | \sum w_iU_i$. Время $O(n\log n)$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum U_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum w_iU_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = p, pmtn, r_i | \sum w_iU_i$ за $O(n^{10})$.&lt;br /&gt;
# $1 || \sum U_i$&lt;br /&gt;
# $1 | r_i, p_i = p | \sum w_iC_i$ за $O(n^7)$&lt;br /&gt;
# Обозначение outtree означает, что граф зависимостей представляет собой исходящее дерево: каджая работа зависит не более чем от одной другой. $1 | outtree | \sum w_iC_i$&lt;br /&gt;
# Обозначение intree означает, что граф зависимостей представляет собой входящее дерево: от каждой работы зависит не более одной другой. $1 | intree | \sum w_iC_i$&lt;br /&gt;
# $P | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | pmtn, r_i | L_{max}$&lt;br /&gt;
# $Q | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | p_i = p, r_i, d_i | \sum C_i$ за $O(n^3 \log n)$ (бонус за $O(n^3 \log\log n)$)&lt;br /&gt;
# $P | p_i = 1 | \sum w_iU_i$ - доведите доказательство с пары до конца&lt;br /&gt;
# $P | p_i = 1 | \sum w_iC_i$&lt;br /&gt;
# $P | p_i = 1, pmtn | \sum w_iC_i$&lt;br /&gt;
# $Q | pmtn | \sum C_i$&lt;br /&gt;
# $Q | pmtn | \sum f_i$ (напомним, что f_i - произвольная неубывающая функция, может быть своя у каждой работы)&lt;br /&gt;
# $Q | pmtn | f_{max}$&lt;br /&gt;
# $P2 | p_i = 1, prec, r_i | \sum C_i$ за $O(n^9)$&lt;br /&gt;
# Сведите задачу $R|pmtn|C_{max}$ к задаче линейного программирования.&lt;br /&gt;
# $P|intree, p_i=1|L_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $F2 | pmtn | C_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1 | C_{max}$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iC_i$&lt;br /&gt;
# $O | p_{ij} = 1, d_i | -$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1, r_i | C_{max}$&lt;br /&gt;
# $O2 | p_{ij} = 1, prec | \sum C_i$&lt;br /&gt;
# Обозначим как $BP(n)$ время умножения булевых матриц размера $n \times n$ над $\vee, \wedge$. Обозначим как $MM(n)$ время умножения целочисленных матриц размера $n \times n$ над $+, \times$. Докажите, что $BP(n) = O(MM(n))$. &lt;br /&gt;
# Докажите, что можно найти транзитивное замыкание графа за время $O(BP(n))$.&lt;br /&gt;
# Пусть $A$ и $B$ - матрицы размера $n \times n$. Пусть $R \subset \{1, 2, \ldots, n\}$, $|R|=r$. Обозначим как $A^R$ матрицу, которая получается из $A$ удалением всех столбцов, кроме столбцов из множества $R$. Аналогично, обозначим как $B_R$ матрицу, которая получается из $B$ удалением всех строк, кроме строк из множества $R$. Докажите, что произведение матриц $A^R\cdot B_R$ может быть найдено за время $O((n/r)^2 MM(r))$, где $MM(r)$ - время умножения матриц размером $r\times r$. &lt;br /&gt;
# Пусть $MM(n)=2+\varepsilon$, $\varepsilon&amp;gt;0$. Модифицируйте алгоритм построения BPWM, чтобы он работал за $MM(n) \log n$. Почему эта идея не сработает, если $MM(n) = O(n^2)$?&lt;br /&gt;
# Докажите лемму с лекции про то, что если в урне $n$ шаров, из которых $w$ белых и $n/2\le wr \le n$, а событие $A$ означает, что из $r$ наугад выбранных из урны шаров оказался ровно один белый, то $P(A) \ge 1/2e$.&lt;br /&gt;
# Сохраняется ли вероятность из предыдущего задания, если шары после вытаскивания возвращаются в урну? Если нет, то можно ли получить аналогичную оценку?&lt;br /&gt;
# Нижняя оценка на сумму длин путей. Докажите, что можно построить граф, в котором $\Omega(n^2)$ пар вершин, расстояние между которыми $\Omega(n)$.&lt;br /&gt;
# Известно, что у учителя есть $2^k$ яблок для некоторого целого неотрицательного $k$. На глазах у студентов он съедает одно яблоко, а остальное раздает ученикам А и В, чтобы ни один из них не видел, сколько получает другой. А и В не знают числа $k$. Они могут показать друг другу по одному знаку из трёх возможных: почесать голову правой, левой или обеими руками. К удивлению учителя, ученики всегда знают, кто получил больше яблок или что учитель съел единственное яблоко сам. Как такое возможно?&lt;br /&gt;
# Вероятностный алгоритм поиска минимума некоторый функции от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Можно ли найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $2/3$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# В алгоритме Кинг с лекции обозначим как $f(u)$ лист, которая получается в ветвящемся дереве $T'$ из вершины $u$ в исходном дереве $T$. Докажите, что если вес максимального ребра на пути из $u$ в $v$ в $T$ равен $x$, а вес максимального ребра на пути из $f(u)$ в $f(v)$ в $T'$ равен $x'$, то $x \ge x'$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что то $x \le x'$.&lt;br /&gt;
# Рассмотрим ветвящееся дерево, пусть в нем $n$ вершин. Пусть есть $m$ запросов на пары листьев, для которых необходимо найти максимальное ребро на пути. Разобьем каждый запрос на два запроса на вертикальном пути до $LCA$ этих листьев, таким образом имеем $2m$ вертикальных путей. Для вершины $v$ обозначим как $A(v)$ множество вертикальных путей, проходящих через $v$. Обозначим как $D_i$ множество вершин на расстоянии $i$ от корня, как $d_i$ число вершин на расстоянии $i$ от корня ($d_i=|D_i|$). Докажите, что $\sum\limits_{u\in D_i}\lceil\log(1+|A(u)|)\rceil&amp;lt;\sum\limits_{u\in D_i}\left(1+\log(1+|A(u)|)\right)\le d_i+d_i \log\frac{d_i+2m}{d_i}$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что $\sum\limits_{i\ge 0}\left(d_i + d_i\log\frac{d_i+2m}{d_i}\right)\le n+n\log\frac{n+2m}{n}+2n$.&lt;br /&gt;
# Докажите, что $\sum\limits_{u}\lceil\log(1+|A(u)|)\rceil = O(n + m)$.&lt;br /&gt;
# Обозначим как $A[v]$ число, в котором $i$-й бит равен $1$, если в $A(v)$ есть путь, заканчивающийся на расстоянии $i$ от корня. Считайте, что вы можете решить задачу о $m$ запросах $LCA$ в дереве с $n$ вершинами за $O(n+m)$ (например, используя алгоритм Фарах-Колтона и Бендера, см https://www.ics.uci.edu/~eppstein/261/BenFar-LCA-00.pdf). Объясните, как посчитать $A[v]$ за время $O(n+m)$. &lt;br /&gt;
# Назовем вершину $v$ большой, если $|A(v)| &amp;gt; \log n/\log\log n$ и маленькой в противном случае. Докажите, что число больших вершин асимптотически не превышает $m /\log\log n$. Указание: оцените число больших вершин на каждом уровне дерева. Отдельно рассмотрите большие вершины на нижних $\log\log n$ и на остальных уровнях.&lt;br /&gt;
# Для вершины $v$, для которой $|A(v)| = k$ рассмотрим фрагменты путей, лежащие выше вершины $v$. Будем хранить $B(v) = [l_1, l_2, \ldots, l_k]$ - список глубин самых тяжелых ребер на фрагментах путях, проходящих через $v$, в порядке от самого длинного пути к самому короткому. Иначе говоря, пронумеруем пути из $A(v)$ в порядке возрастания глубины их верхней вершины. Тогда $l_i$ - расстояние от корня до ребра, которое является самым тяжелым на пути от $v$ до некоторой вершины $u_i$, которая является верхним концом $i$-го пути. Числа $l_i$ называются тагами, длина тага $O(\log\log n)$. Докажите, что массив $B(v)$ отсортирован по неубыванию.&lt;br /&gt;
# Пусть $p$ - родитель вершины $v$, как связаны массивы $B(p)$ и $B(v)$? Дайте подробное описание, используя, при необходимости, $A(p)$ и $A(v)$.&lt;br /&gt;
# Для больших вершин $B(v)$ помещается в $O(\log\log n)$ машинных слово. Пусть родитель вершины также большой. Предложите алгоритм пересчета $B(v)$ через $B(p)$, $A[p]$ и $A[v]$ за $O(\log\log n)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$.&lt;br /&gt;
# Обозначим как $bigp[v]$ максимальную глубину, на котором находится большой предок вершины $v$. Предложите алгоритм, как за построить массив $bigp$ по массиву $A$ за $O(n)$. &lt;br /&gt;
# Для маленьких вершин $B(v)$ помещается в машинное слово, однако вместо списка $B(v)$ будем хранить вспомогательный список $C(v)$, устроенный так. Если самое тяжелое ребро на $i$-м по глубине пути из $A(v)$ находится ниже, чем $bigp[v]$, то будем хранить просто $l_i$. Иначе будем хранить $z_i$ - номер $l_i$ в $B(bigp[v])$. Обозначим упакованный в машинное слово список $C(v)$ за $C[v]$. Предложите алгоритм пересчета $С[v]$ за $O(1)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$. Вы можете использовать посчитанные для родителей и предков $C[u]$, $B(u)$, $A[u]$, $bigp[u]$.&lt;br /&gt;
# Объедините результаты всех предыдущих заданий, чтобы получить алгоритм обработки $m$ запросов поиска максимального ребра на пути между двумя вершинами на дереве за $O(n+m)$.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального разреза в графе к $O(n)$ запускам алгоритма поиска минимального $s-t$ разреза.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального $s-t$ разреза в графе к полиномимальному числу запусков алгоритма поиска глобального минимального разреза.&lt;br /&gt;
# Петя хочет упростить алгоритм Каргера-Штайна. Он запускает алгоритм Каргера (стягивание по случайному ребру), пока количество вершин не станет равно $t$, а затем запускает алгоритм за $t^3$ поиска минимального глобального разреза. Затем он повторяет алгоритм, пока вероятность успеха не составит хотя бы $1/2$. Какое значение $t$ необходимо выбрать, чтобы минимизировать время работы получившегося алгоритма? Какое будет время работы?&lt;br /&gt;
# Докажите, что если в полном двоичном дереве высоты $h$ каждое ребро удаляется с вероятностью $1/2$, то путь от корня до листа сохраняется с вероятностью $\Theta(1/h)$. &lt;br /&gt;
# Обобщите предыдущее задание, если ребро удаляется с вероятностью $p$.&lt;br /&gt;
# С учетом предыдущего задания модифицируйте алгоритм Каргера-Штайна, чтобы разветвляться когда накопленная вероятность ошибки достигнет $p$. Найдите зависимость времени работы от $p$, какое значение $p$ оптимально выбрать?&lt;br /&gt;
# Назовем разрез $\alpha$-оптимальным, если его размер не больше $\alpha C_{min}$, где $C_{min}$ - минимальный разрез. Оцените вероятность, что один запуск алгоритма Каргера (без разветвлений) найдет $\alpha$-оптимальный разрез (в зависимости от $\alpha$).&lt;br /&gt;
# Докажите, что в графе не больше $n\choose 2$ различных минимальных глобальных разрезов.&lt;br /&gt;
# Сформулируйте и докажите аналогичный предыдущему заданию результат для $\alpha$-оптимальных разрезов.&lt;br /&gt;
# Докажите, что для полинома $p(x_1, \ldots, x_n)$ от $n$ переменных степени $d$ над полем $F$ и множества $S\subset F$ размера $s$ вероятность $P(p(x_1, \ldots, x_n)=0)\le d/s$, где вероятностное пространство - равновероятно все вектора $(x_1, \ldots, x_n)\in S^n$. Используйте без доказательства, что полином от одной переменной степени $d$ над любым полем имеет не более $d$ корней.&lt;br /&gt;
# Покажите, что требование, что $F$ поле в предыдущей задаче является существенным, приведите пример полинома степени $d$ над кольцом, которое не является полем, имеющего более $d$ корней.&lt;br /&gt;
# Покажите, что в определении PRAS можно заменить константу $3/4$ в требовании, что вероятность попасть в интервал $[1-\varepsilon;1+\varepsilon]$ должна быть $3/4$, на любое другое число, строго большее $1/2$.&lt;br /&gt;
# Можно ли в предыдущем задании заменить $1/2$ на $0$?&lt;br /&gt;
# Можно ли в решении задания 73 брать среднее значение в качестве оценки?&lt;br /&gt;
# Рассмотрим формулу в ДНФ. Обозначим как $t$ количество пар $($терм$,$ удовлетворяющее этот терм назначение переменных$)$. Выберем случайно терм, где вероятность выбрать терм пропорциональна числу удовлетворяющих этот терм назначений. Выберем случайное назначение $a$, удовлетворяющее этот терм. Рассмотрим случайную величину $X = t/cov(a)$, где $cov(a)$ - число термов, удовлетворенных назначением $a$. Докажите, что $EX = Y$, где $Y$ - число удовлетворяющих назначений заданной формулы.&lt;br /&gt;
# На базе предыдущего задания предложите альтернативный алгоритм апроксимации числа удовлетворяющих назначений ДНФ.&lt;br /&gt;
# Рандомизированный алгоритм для 2SAT. Рассмотрим следующий алгоритм решения задачи удовлетворимости булевой формулы в 2КНФ с $n$ переменными. Выберем случайное значение каждой переменной. Если формула не удовлетворена, выберем случайный не удовлетворенный клоз и инвертируем значение случайной переменной в нем. Докажите, что если удовлетворяющее назначение существует, оно будет найдено за $O(n^2)$ шагов. Указание: зафиксируйте любое удовлетворяющее формулу назначение и рассмотрите задачу как случайное блуждание по прямой, где координата - это число переменных, значение которых совпадает с значением в выбранном назначении.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для 3SAT?&lt;br /&gt;
# Докажите, что оценку из задания 78 нельзя улучшить: предложите формулу, для которой в среднем понадобится $\Omega(n^2)$ случайных шагов для поиска удовлетворяющего назначения.&lt;br /&gt;
# Предложите аналогичный заданию 78 алгоритм поиска раскраски графа в два цвета.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для поиска раскраски графа в три цвета?&lt;br /&gt;
# Обозначим как $m_k(G)$ количество паросочетаний размера $k$ в двудольном графе $G$, каждая доля которого содержит по $n$ вершин. Докажите, что существует ребро $uv$, такое что $m_k(G)/m_k(G\setminus uv) \le n$.&lt;br /&gt;
# Пусть вероятностный алгоритм $U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем все паросочетания равновероятны. Покажите, как с использованием $U_k$ получить $\varepsilon$-$\delta$-FRPAS для доли паросочетаний, содержащих заданное ребро $uv$ в графе $G$.&lt;br /&gt;
# Покажите, как с использованием $U_k$ из предедыдущего задания получить $\varepsilon$-$\delta$-FRPAS для числа $m_k(G)$.&lt;br /&gt;
# Будем называть полиномиальный вероятностный алгоритм $U_k$ равномерным с точностью до $\rho$ генератором, если он получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем для любого паросочетания $M$ $|P(U_k(G)=M) - 1/m_k(G)| \le \rho/m_k(G)$. Пусть $\rho \le 1/n^b$ для некоторого $b$. Подберите константу $b$, чтобы можно было решить задание 84, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 85, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Пусть полиномиальный вероятностный алгоритм $\hat U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$ или $k-1$, причем все паросочетания равновероятны. Пусть $r = m_k(G)/m_{k-1}(G)$ удовлетворяет условию $1/n^2 \le r \le n^2$. Докажите, что с помощью $\hat U_k$ можно получить $\varepsilon$-$\delta$-FRPAS для $m_k(G)$.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 88, используя равномерный с точностью до $\rho \le 1/n^b$ генератор.&lt;br /&gt;
# Докажите, что если степень любой вершины в графе не меньше $n/2$, то выполнено условие $1/n^2 \le r \le n^2$ для задания 88.&lt;br /&gt;
# Соедините предыдущие задания, чтобы получить из существования равномерного с точностью до $\rho \le 1/n^b$ генератора $\hat U_k$ для любого $k$ $\varepsilon$-$\delta$-FPRAS для числа совершенных паросочетаний в двудольном графе, где степени всех вершин не меньше $n/2$.&lt;br /&gt;
# Рассмотрим $\varepsilon$-$\delta$-FPRAS $A$ для числа паросочетаний в двудольном графе. Используя $A$, постройте полиномиальный вероятностный алгоритм, который является равномерным генератором с точностью до $\rho = o(1)$.&lt;br /&gt;
# Пусть существует полиномиальный детерминированный алгоритм, который возвращает число совершенных паросочетаний в двудольном графе, степень каждой вершины которого равна хотя бы $\beta n$, где $0 &amp;lt; \beta &amp;lt; 1$. Докажите, что существует полиномиальный детерминированный алгоритм, который возвращает число совершенных паросочетаний в  произвольном двудольном графе.&lt;br /&gt;
# Рассмотрим алгоритм приближения числа $\pi$. Будем генерировать точки с равномерным распределением в квадрате $1 \times 1$ и считать долю попавших в круг диаметром 1, вписанный в этот квадрат. Оцените число итераций, необходимое, чтобы приблизить $\pi$ с точностью до $\varepsilon$.&lt;/div&gt;</summary>
		<author><name>217.79.4.130</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81244</id>
		<title>Список заданий по продвинутым алгоритмам 2021 осень</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81244"/>
				<updated>2021-11-13T20:01:40Z</updated>
		
		<summary type="html">&lt;p&gt;217.79.4.130: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# $1 | p_i=1 | L_{max}$.&lt;br /&gt;
# $1 | r_i, d_i=d | L_{max}$.&lt;br /&gt;
# $1 | prec, r_i, p_i=1 | L_{max}$.&lt;br /&gt;
# Рассмотрим задачу $1 | p_i = 1, d_i | -$. Докажите, что подмножества работ, которые можно выполнить, образуют семейство независимых множеств некоторого матроида.&lt;br /&gt;
# $1 | p_i = 1, d_i | \sum w_iU_i$. Время $O(n\log n)$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum U_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum w_iU_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = p, pmtn, r_i | \sum w_iU_i$ за $O(n^{10})$.&lt;br /&gt;
# $1 || \sum U_i$&lt;br /&gt;
# $1 | r_i, p_i = p | \sum w_iC_i$ за $O(n^7)$&lt;br /&gt;
# Обозначение outtree означает, что граф зависимостей представляет собой исходящее дерево: каджая работа зависит не более чем от одной другой. $1 | outtree | \sum w_iC_i$&lt;br /&gt;
# Обозначение intree означает, что граф зависимостей представляет собой входящее дерево: от каждой работы зависит не более одной другой. $1 | intree | \sum w_iC_i$&lt;br /&gt;
# $P | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | pmtn, r_i | L_{max}$&lt;br /&gt;
# $Q | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | p_i = p, r_i, d_i | \sum C_i$ за $O(n^3 \log n)$ (бонус за $O(n^3 \log\log n)$)&lt;br /&gt;
# $P | p_i = 1 | \sum w_iU_i$ - доведите доказательство с пары до конца&lt;br /&gt;
# $P | p_i = 1 | \sum w_iC_i$&lt;br /&gt;
# $P | p_i = 1, pmtn | \sum w_iC_i$&lt;br /&gt;
# $Q | pmtn | \sum C_i$&lt;br /&gt;
# $Q | pmtn | \sum f_i$ (напомним, что f_i - произвольная неубывающая функция, может быть своя у каждой работы)&lt;br /&gt;
# $Q | pmtn | f_{max}$&lt;br /&gt;
# $P2 | p_i = 1, prec, r_i | \sum C_i$ за $O(n^9)$&lt;br /&gt;
# Сведите задачу $R|pmtn|C_{max}$ к задаче линейного программирования.&lt;br /&gt;
# $P|intree, p_i=1|L_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $F2 | pmtn | C_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1 | C_{max}$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iC_i$&lt;br /&gt;
# $O | p_{ij} = 1, d_i | -$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1, r_i | C_{max}$&lt;br /&gt;
# $O2 | p_{ij} = 1, prec | \sum C_i$&lt;br /&gt;
# Обозначим как $BP(n)$ время умножения булевых матриц размера $n \times n$ над $\vee, \wedge$. Обозначим как $MM(n)$ время умножения целочисленных матриц размера $n \times n$ над $+, \times$. Докажите, что $BP(n) = O(MM(n))$. &lt;br /&gt;
# Докажите, что можно найти транзитивное замыкание графа за время $O(BP(n))$.&lt;br /&gt;
# Пусть $A$ и $B$ - матрицы размера $n \times n$. Пусть $R \subset \{1, 2, \ldots, n\}$, $|R|=r$. Обозначим как $A^R$ матрицу, которая получается из $A$ удалением всех столбцов, кроме столбцов из множества $R$. Аналогично, обозначим как $B_R$ матрицу, которая получается из $B$ удалением всех строк, кроме строк из множества $R$. Докажите, что произведение матриц $A^R\cdot B_R$ может быть найдено за время $O((n/r)^2 MM(r))$, где $MM(r)$ - время умножения матриц размером $r\times r$. &lt;br /&gt;
# Пусть $MM(n)=2+\varepsilon$, $\varepsilon&amp;gt;0$. Модифицируйте алгоритм построения BPWM, чтобы он работал за $MM(n) \log n$. Почему эта идея не сработает, если $MM(n) = O(n^2)$?&lt;br /&gt;
# Докажите лемму с лекции про то, что если в урне $n$ шаров, из которых $w$ белых и $n/2\le wr \le n$, а событие $A$ означает, что из $r$ наугад выбранных из урны шаров оказался ровно один белый, то $P(A) \ge 1/2e$.&lt;br /&gt;
# Сохраняется ли вероятность из предыдущего задания, если шары после вытаскивания возвращаются в урну? Если нет, то можно ли получить аналогичную оценку?&lt;br /&gt;
# Нижняя оценка на сумму длин путей. Докажите, что можно построить граф, в котором $\Omega(n^2)$ пар вершин, расстояние между которыми $\Omega(n)$.&lt;br /&gt;
# Известно, что у учителя есть $2^k$ яблок для некоторого целого неотрицательного $k$. На глазах у студентов он съедает одно яблоко, а остальное раздает ученикам А и В, чтобы ни один из них не видел, сколько получает другой. А и В не знают числа $k$. Они могут показать друг другу по одному знаку из трёх возможных: почесать голову правой, левой или обеими руками. К удивлению учителя, ученики всегда знают, кто получил больше яблок или что учитель съел единственное яблоко сам. Как такое возможно?&lt;br /&gt;
# Вероятностный алгоритм поиска минимума некоторый функции от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Можно ли найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $2/3$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# В алгоритме Кинг с лекции обозначим как $f(u)$ лист, которая получается в ветвящемся дереве $T'$ из вершины $u$ в исходном дереве $T$. Докажите, что если вес максимального ребра на пути из $u$ в $v$ в $T$ равен $x$, а вес максимального ребра на пути из $f(u)$ в $f(v)$ в $T'$ равен $x'$, то $x \ge x'$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что то $x \le x'$.&lt;br /&gt;
# Рассмотрим ветвящееся дерево, пусть в нем $n$ вершин. Пусть есть $m$ запросов на пары листьев, для которых необходимо найти максимальное ребро на пути. Разобьем каждый запрос на два запроса на вертикальном пути до $LCA$ этих листьев, таким образом имеем $2m$ вертикальных путей. Для вершины $v$ обозначим как $A(v)$ множество вертикальных путей, проходящих через $v$. Обозначим как $D_i$ множество вершин на расстоянии $i$ от корня, как $d_i$ число вершин на расстоянии $i$ от корня ($d_i=|D_i|$). Докажите, что $\sum\limits_{u\in D_i}\lceil\log(1+|A(u)|)\rceil&amp;lt;\sum\limits_{u\in D_i}\left(1+\log(1+|A(u)|)\right)\le d_i+d_i \log\frac{d_i+2m}{d_i}$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что $\sum\limits_{i\ge 0}\left(d_i + d_i\log\frac{d_i+2m}{d_i}\right)\le n+n\log\frac{n+2m}{n}+2n$.&lt;br /&gt;
# Докажите, что $\sum\limits_{u}\lceil\log(1+|A(u)|)\rceil = O(n + m)$.&lt;br /&gt;
# Обозначим как $A[v]$ число, в котором $i$-й бит равен $1$, если в $A(v)$ есть путь, заканчивающийся на расстоянии $i$ от корня. Считайте, что вы можете решить задачу о $m$ запросах $LCA$ в дереве с $n$ вершинами за $O(n+m)$ (например, используя алгоритм Фарах-Колтона и Бендера, см https://www.ics.uci.edu/~eppstein/261/BenFar-LCA-00.pdf). Объясните, как посчитать $A[v]$ за время $O(n+m)$. &lt;br /&gt;
# Назовем вершину $v$ большой, если $|A(v)| &amp;gt; \log n/\log\log n$ и маленькой в противном случае. Докажите, что число больших вершин асимптотически не превышает $m /\log\log n$. Указание: оцените число больших вершин на каждом уровне дерева. Отдельно рассмотрите большие вершины на нижних $\log\log n$ и на остальных уровнях.&lt;br /&gt;
# Для вершины $v$, для которой $|A(v)| = k$ рассмотрим фрагменты путей, лежащие выше вершины $v$. Будем хранить $B(v) = [l_1, l_2, \ldots, l_k]$ - список глубин самых тяжелых ребер на фрагментах путях, проходящих через $v$, в порядке от самого длинного пути к самому короткому. Иначе говоря, пронумеруем пути из $A(v)$ в порядке возрастания глубины их верхней вершины. Тогда $l_i$ - расстояние от корня до ребра, которое является самым тяжелым на пути от $v$ до некоторой вершины $u_i$, которая является верхним концом $i$-го пути. Числа $l_i$ называются тагами, длина тага $O(\log\log n)$. Докажите, что массив $B(v)$ отсортирован по неубыванию.&lt;br /&gt;
# Пусть $p$ - родитель вершины $v$, как связаны массивы $B(p)$ и $B(v)$? Дайте подробное описание, используя, при необходимости, $A(p)$ и $A(v)$.&lt;br /&gt;
# Для больших вершин $B(v)$ помещается в $O(\log\log n)$ машинных слово. Пусть родитель вершины также большой. Предложите алгоритм пересчета $B(v)$ через $B(p)$, $A[p]$ и $A[v]$ за $O(\log\log n)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$.&lt;br /&gt;
# Обозначим как $bigp[v]$ максимальную глубину, на котором находится большой предок вершины $v$. Предложите алгоритм, как за построить массив $bigp$ по массиву $A$ за $O(n)$. &lt;br /&gt;
# Для маленьких вершин $B(v)$ помещается в машинное слово, однако вместо списка $B(v)$ будем хранить вспомогательный список $C(v)$, устроенный так. Если самое тяжелое ребро на $i$-м по глубине пути из $A(v)$ находится ниже, чем $bigp[v]$, то будем хранить просто $l_i$. Иначе будем хранить $z_i$ - номер $l_i$ в $B(bigp[v])$. Обозначим упакованный в машинное слово список $C(v)$ за $C[v]$. Предложите алгоритм пересчета $С[v]$ за $O(1)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$. Вы можете использовать посчитанные для родителей и предков $C[u]$, $B(u)$, $A[u]$, $bigp[u]$.&lt;br /&gt;
# Объедините результаты всех предыдущих заданий, чтобы получить алгоритм обработки $m$ запросов поиска максимального ребра на пути между двумя вершинами на дереве за $O(n+m)$.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального разреза в графе к $O(n)$ запускам алгоритма поиска минимального $s-t$ разреза.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального $s-t$ разреза в графе к полиномимальному числу запусков алгоритма поиска глобального минимального разреза.&lt;br /&gt;
# Петя хочет упростить алгоритм Каргера-Штайна. Он запускает алгоритм Каргера (стягивание по случайному ребру), пока количество вершин не станет равно $t$, а затем запускает алгоритм за $t^3$ поиска минимального глобального разреза. Затем он повторяет алгоритм, пока вероятность успеха не составит хотя бы $1/2$. Какое значение $t$ необходимо выбрать, чтобы минимизировать время работы получившегося алгоритма? Какое будет время работы?&lt;br /&gt;
# Докажите, что если в полном двоичном дереве высоты $h$ каждое ребро удаляется с вероятностью $1/2$, то путь от корня до листа сохраняется с вероятностью $\Theta(1/h)$. &lt;br /&gt;
# Обобщите предыдущее задание, если ребро удаляется с вероятностью $p$.&lt;br /&gt;
# С учетом предыдущего задания модифицируйте алгоритм Каргера-Штайна, чтобы разветвляться когда накопленная вероятность ошибки достигнет $p$. Найдите зависимость времени работы от $p$, какое значение $p$ оптимально выбрать?&lt;br /&gt;
# Назовем разрез $\alpha$-оптимальным, если его размер не больше $\alpha C_{min}$, где $C_{min}$ - минимальный разрез. Оцените вероятность, что один запуск алгоритма Каргера (без разветвлений) найдет $\alpha$-оптимальный разрез (в зависимости от $\alpha$).&lt;br /&gt;
# Докажите, что в графе не больше $n\choose 2$ различных минимальных глобальных разрезов.&lt;br /&gt;
# Сформулируйте и докажите аналогичный предыдущему заданию результат для $\alpha$-оптимальных разрезов.&lt;br /&gt;
# Докажите, что для полинома $p(x_1, \ldots, x_n)$ от $n$ переменных степени $d$ над полем $F$ и множества $S\subset F$ размера $s$ вероятность $P(p(x_1, \ldots, x_n)=0)\le d/s$, где вероятностное пространство - равновероятно все вектора $(x_1, \ldots, x_n)\in S^n$. Используйте без доказательства, что полином от одной переменной степени $d$ над любым полем имеет не более $d$ корней.&lt;br /&gt;
# Покажите, что требование, что $F$ поле в предыдущей задаче является существенным, приведите пример полинома степени $d$ над кольцом, которое не является полем, имеющего более $d$ корней.&lt;br /&gt;
# Покажите, что в определении PRAS можно заменить константу $3/4$ в требовании, что вероятность попасть в интервал $[1-\varepsilon;1+\varepsilon]$ должна быть $3/4$, на любое другое число, строго большее $1/2$.&lt;br /&gt;
# Можно ли в предыдущем задании заменить $1/2$ на $0$?&lt;br /&gt;
# Можно ли в решении задания 73 брать среднее значение в качестве оценки?&lt;br /&gt;
# Рассмотрим формулу в ДНФ. Обозначим как $t$ количество пар $($терм$,$ удовлетворяющее этот терм назначение переменных$)$. Выберем случайно терм, где вероятность выбрать терм пропорциональна числу удовлетворяющих этот терм назначений. Выберем случайное назначение $a$, удовлетворяющее этот терм. Рассмотрим случайную величину $X = t/cov(a)$, где $cov(a)$ - число термов, удовлетворенных назначением $a$. Докажите, что $EX = Y$, где $Y$ - число удовлетворяющих назначений заданной формулы.&lt;br /&gt;
# На базе предыдущего задания предложите альтернативный алгоритм апроксимации числа удовлетворяющих назначений ДНФ.&lt;br /&gt;
# Рандомизированный алгоритм для 2SAT. Рассмотрим следующий алгоритм решения задачи удовлетворимости булевой формулы в 2КНФ с $n$ переменными. Выберем случайное значение каждой переменной. Если формула не удовлетворена, выберем случайный не удовлетворенный клоз и инвертируем значение случайной переменной в нем. Докажите, что если удовлетворяющее назначение существует, оно будет найдено за $O(n^2)$ шагов. Указание: зафиксируйте любое удовлетворяющее формулу назначение и рассмотрите задачу как случайное блуждание по прямой, где координата - это число переменных, значение которых совпадает с значением в выбранном назначении.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для 3SAT?&lt;br /&gt;
# Докажите, что оценку из задания 78 нельзя улучшить: предложите формулу, для которой в среднем понадобится $\Omega(n^2)$ случайных шагов для поиска удовлетворяющего назначения.&lt;br /&gt;
# Предложите аналогичный заданию 78 алгоритм поиска раскраски графа в два цвета.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для поиска раскраски графа в три цвета?&lt;br /&gt;
# Обозначим как $m_k(G)$ количество паросочетаний размера $k$ в двудольном графе $G$, каждая доля которого содержит по $n$ вершин. Докажите, что существует ребро $uv$, такое что $m_k(G)/m_k(G\setminus uv) \le n$.&lt;br /&gt;
# Пусть вероятностный алгоритм $U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем все паросочетания равновероятны. Покажите, как с использованием $U_k$ получить $\varepsilon$-$\delta$-FRPAS для доли паросочетаний, содержащих заданное ребро $uv$ в графе $G$.&lt;br /&gt;
# Покажите, как с использованием $U_k$ из предедыдущего задания получить $\varepsilon$-$\delta$-FRPAS для числа $m_k(G)$.&lt;br /&gt;
# Будем называть вероятностный алгоритм $U_k$ равномерным с точностью до $\rho$ генератором, если он получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем для любого паросочетания $M$ $|P(U_k(G)=M) - 1/m_k(G)| \le \rho/m_k(G)$. Пусть $\rho \le 1/n^b$ для некоторого $b$. Подберите константу $b$, чтобы можно было решить задание 84, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 85, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Пусть вероятностный алгоритм $\hat U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$ или $k-1$, причем все паросочетания равновероятны. Пусть $r = m_k(G)/m_{k-1}(G)$ удовлетворяет условию $1/n^2 \le r \le n^2$. Докажите, что с помощью $\hat U_k$ можно получить $\varepsilon$-$\delta$-FRPAS для $m_k(G)$.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 88, используя равномерный с точностью до $\rho \le 1/n^b$ генератор.&lt;br /&gt;
# Докажите, что если степень любой вершины в графе не меньше $n/2$, то выполнено условие $1/n^2 \le r \le n^2$ для задания 88.&lt;br /&gt;
# Соедините предыдущие задания, чтобы получить из существования равномерного с точностью до $\rho \le 1/n^b$ генератора $\hat U_k$ для любого $k$ $\varepsilon$-$\delta$-FPRAS для числа совершенных паросочетаний в двудольном графе, где степени всех вершин не меньше $n/2$.&lt;/div&gt;</summary>
		<author><name>217.79.4.130</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81243</id>
		<title>Список заданий по продвинутым алгоритмам 2021 осень</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81243"/>
				<updated>2021-11-13T19:59:33Z</updated>
		
		<summary type="html">&lt;p&gt;217.79.4.130: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# $1 | p_i=1 | L_{max}$.&lt;br /&gt;
# $1 | r_i, d_i=d | L_{max}$.&lt;br /&gt;
# $1 | prec, r_i, p_i=1 | L_{max}$.&lt;br /&gt;
# Рассмотрим задачу $1 | p_i = 1, d_i | -$. Докажите, что подмножества работ, которые можно выполнить, образуют семейство независимых множеств некоторого матроида.&lt;br /&gt;
# $1 | p_i = 1, d_i | \sum w_iU_i$. Время $O(n\log n)$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum U_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum w_iU_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = p, pmtn, r_i | \sum w_iU_i$ за $O(n^{10})$.&lt;br /&gt;
# $1 || \sum U_i$&lt;br /&gt;
# $1 | r_i, p_i = p | \sum w_iC_i$ за $O(n^7)$&lt;br /&gt;
# Обозначение outtree означает, что граф зависимостей представляет собой исходящее дерево: каджая работа зависит не более чем от одной другой. $1 | outtree | \sum w_iC_i$&lt;br /&gt;
# Обозначение intree означает, что граф зависимостей представляет собой входящее дерево: от каждой работы зависит не более одной другой. $1 | intree | \sum w_iC_i$&lt;br /&gt;
# $P | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | pmtn, r_i | L_{max}$&lt;br /&gt;
# $Q | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | p_i = p, r_i, d_i | \sum C_i$ за $O(n^3 \log n)$ (бонус за $O(n^3 \log\log n)$)&lt;br /&gt;
# $P | p_i = 1 | \sum w_iU_i$ - доведите доказательство с пары до конца&lt;br /&gt;
# $P | p_i = 1 | \sum w_iC_i$&lt;br /&gt;
# $P | p_i = 1, pmtn | \sum w_iC_i$&lt;br /&gt;
# $Q | pmtn | \sum C_i$&lt;br /&gt;
# $Q | pmtn | \sum f_i$ (напомним, что f_i - произвольная неубывающая функция, может быть своя у каждой работы)&lt;br /&gt;
# $Q | pmtn | f_{max}$&lt;br /&gt;
# $P2 | p_i = 1, prec, r_i | \sum C_i$ за $O(n^9)$&lt;br /&gt;
# Сведите задачу $R|pmtn|C_{max}$ к задаче линейного программирования.&lt;br /&gt;
# $P|intree, p_i=1|L_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $F2 | pmtn | C_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1 | C_{max}$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iC_i$&lt;br /&gt;
# $O | p_{ij} = 1, d_i | -$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1, r_i | C_{max}$&lt;br /&gt;
# $O2 | p_{ij} = 1, prec | \sum C_i$&lt;br /&gt;
# Обозначим как $BP(n)$ время умножения булевых матриц размера $n \times n$ над $\vee, \wedge$. Обозначим как $MM(n)$ время умножения целочисленных матриц размера $n \times n$ над $+, \times$. Докажите, что $BP(n) = O(MM(n))$. &lt;br /&gt;
# Докажите, что можно найти транзитивное замыкание графа за время $O(BP(n))$.&lt;br /&gt;
# Пусть $A$ и $B$ - матрицы размера $n \times n$. Пусть $R \subset \{1, 2, \ldots, n\}$, $|R|=r$. Обозначим как $A^R$ матрицу, которая получается из $A$ удалением всех столбцов, кроме столбцов из множества $R$. Аналогично, обозначим как $B_R$ матрицу, которая получается из $B$ удалением всех строк, кроме строк из множества $R$. Докажите, что произведение матриц $A^R\cdot B_R$ может быть найдено за время $O((n/r)^2 MM(r))$, где $MM(r)$ - время умножения матриц размером $r\times r$. &lt;br /&gt;
# Пусть $MM(n)=2+\varepsilon$, $\varepsilon&amp;gt;0$. Модифицируйте алгоритм построения BPWM, чтобы он работал за $MM(n) \log n$. Почему эта идея не сработает, если $MM(n) = O(n^2)$?&lt;br /&gt;
# Докажите лемму с лекции про то, что если в урне $n$ шаров, из которых $w$ белых и $n/2\le wr \le n$, а событие $A$ означает, что из $r$ наугад выбранных из урны шаров оказался ровно один белый, то $P(A) \ge 1/2e$.&lt;br /&gt;
# Сохраняется ли вероятность из предыдущего задания, если шары после вытаскивания возвращаются в урну? Если нет, то можно ли получить аналогичную оценку?&lt;br /&gt;
# Нижняя оценка на сумму длин путей. Докажите, что можно построить граф, в котором $\Omega(n^2)$ пар вершин, расстояние между которыми $\Omega(n)$.&lt;br /&gt;
# Известно, что у учителя есть $2^k$ яблок для некоторого целого неотрицательного $k$. На глазах у студентов он съедает одно яблоко, а остальное раздает ученикам А и В, чтобы ни один из них не видел, сколько получает другой. А и В не знают числа $k$. Они могут показать друг другу по одному знаку из трёх возможных: почесать голову правой, левой или обеими руками. К удивлению учителя, ученики всегда знают, кто получил больше яблок или что учитель съел единственное яблоко сам. Как такое возможно?&lt;br /&gt;
# Вероятностный алгоритм поиска минимума некоторый функции от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Можно ли найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $2/3$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# В алгоритме Кинг с лекции обозначим как $f(u)$ лист, которая получается в ветвящемся дереве $T'$ из вершины $u$ в исходном дереве $T$. Докажите, что если вес максимального ребра на пути из $u$ в $v$ в $T$ равен $x$, а вес максимального ребра на пути из $f(u)$ в $f(v)$ в $T'$ равен $x'$, то $x \ge x'$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что то $x \le x'$.&lt;br /&gt;
# Рассмотрим ветвящееся дерево, пусть в нем $n$ вершин. Пусть есть $m$ запросов на пары листьев, для которых необходимо найти максимальное ребро на пути. Разобьем каждый запрос на два запроса на вертикальном пути до $LCA$ этих листьев, таким образом имеем $2m$ вертикальных путей. Для вершины $v$ обозначим как $A(v)$ множество вертикальных путей, проходящих через $v$. Обозначим как $D_i$ множество вершин на расстоянии $i$ от корня, как $d_i$ число вершин на расстоянии $i$ от корня ($d_i=|D_i|$). Докажите, что $\sum\limits_{u\in D_i}\lceil\log(1+|A(u)|)\rceil&amp;lt;\sum\limits_{u\in D_i}\left(1+\log(1+|A(u)|)\right)\le d_i+d_i \log\frac{d_i+2m}{d_i}$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что $\sum\limits_{i\ge 0}\left(d_i + d_i\log\frac{d_i+2m}{d_i}\right)\le n+n\log\frac{n+2m}{n}+2n$.&lt;br /&gt;
# Докажите, что $\sum\limits_{u}\lceil\log(1+|A(u)|)\rceil = O(n + m)$.&lt;br /&gt;
# Обозначим как $A[v]$ число, в котором $i$-й бит равен $1$, если в $A(v)$ есть путь, заканчивающийся на расстоянии $i$ от корня. Считайте, что вы можете решить задачу о $m$ запросах $LCA$ в дереве с $n$ вершинами за $O(n+m)$ (например, используя алгоритм Фарах-Колтона и Бендера, см https://www.ics.uci.edu/~eppstein/261/BenFar-LCA-00.pdf). Объясните, как посчитать $A[v]$ за время $O(n+m)$. &lt;br /&gt;
# Назовем вершину $v$ большой, если $|A(v)| &amp;gt; \log n/\log\log n$ и маленькой в противном случае. Докажите, что число больших вершин асимптотически не превышает $m /\log\log n$. Указание: оцените число больших вершин на каждом уровне дерева. Отдельно рассмотрите большие вершины на нижних $\log\log n$ и на остальных уровнях.&lt;br /&gt;
# Для вершины $v$, для которой $|A(v)| = k$ рассмотрим фрагменты путей, лежащие выше вершины $v$. Будем хранить $B(v) = [l_1, l_2, \ldots, l_k]$ - список глубин самых тяжелых ребер на фрагментах путях, проходящих через $v$, в порядке от самого длинного пути к самому короткому. Иначе говоря, пронумеруем пути из $A(v)$ в порядке возрастания глубины их верхней вершины. Тогда $l_i$ - расстояние от корня до ребра, которое является самым тяжелым на пути от $v$ до некоторой вершины $u_i$, которая является верхним концом $i$-го пути. Числа $l_i$ называются тагами, длина тага $O(\log\log n)$. Докажите, что массив $B(v)$ отсортирован по неубыванию.&lt;br /&gt;
# Пусть $p$ - родитель вершины $v$, как связаны массивы $B(p)$ и $B(v)$? Дайте подробное описание, используя, при необходимости, $A(p)$ и $A(v)$.&lt;br /&gt;
# Для больших вершин $B(v)$ помещается в $O(\log\log n)$ машинных слово. Пусть родитель вершины также большой. Предложите алгоритм пересчета $B(v)$ через $B(p)$, $A[p]$ и $A[v]$ за $O(\log\log n)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$.&lt;br /&gt;
# Обозначим как $bigp[v]$ максимальную глубину, на котором находится большой предок вершины $v$. Предложите алгоритм, как за построить массив $bigp$ по массиву $A$ за $O(n)$. &lt;br /&gt;
# Для маленьких вершин $B(v)$ помещается в машинное слово, однако вместо списка $B(v)$ будем хранить вспомогательный список $C(v)$, устроенный так. Если самое тяжелое ребро на $i$-м по глубине пути из $A(v)$ находится ниже, чем $bigp[v]$, то будем хранить просто $l_i$. Иначе будем хранить $z_i$ - номер $l_i$ в $B(bigp[v])$. Обозначим упакованный в машинное слово список $C(v)$ за $C[v]$. Предложите алгоритм пересчета $С[v]$ за $O(1)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$. Вы можете использовать посчитанные для родителей и предков $C[u]$, $B(u)$, $A[u]$, $bigp[u]$.&lt;br /&gt;
# Объедините результаты всех предыдущих заданий, чтобы получить алгоритм обработки $m$ запросов поиска максимального ребра на пути между двумя вершинами на дереве за $O(n+m)$.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального разреза в графе к $O(n)$ запускам алгоритма поиска минимального $s-t$ разреза.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального $s-t$ разреза в графе к полиномимальному числу запусков алгоритма поиска глобального минимального разреза.&lt;br /&gt;
# Петя хочет упростить алгоритм Каргера-Штайна. Он запускает алгоритм Каргера (стягивание по случайному ребру), пока количество вершин не станет равно $t$, а затем запускает алгоритм за $t^3$ поиска минимального глобального разреза. Затем он повторяет алгоритм, пока вероятность успеха не составит хотя бы $1/2$. Какое значение $t$ необходимо выбрать, чтобы минимизировать время работы получившегося алгоритма? Какое будет время работы?&lt;br /&gt;
# Докажите, что если в полном двоичном дереве высоты $h$ каждое ребро удаляется с вероятностью $1/2$, то путь от корня до листа сохраняется с вероятностью $\Theta(1/h)$. &lt;br /&gt;
# Обобщите предыдущее задание, если ребро удаляется с вероятностью $p$.&lt;br /&gt;
# С учетом предыдущего задания модифицируйте алгоритм Каргера-Штайна, чтобы разветвляться когда накопленная вероятность ошибки достигнет $p$. Найдите зависимость времени работы от $p$, какое значение $p$ оптимально выбрать?&lt;br /&gt;
# Назовем разрез $\alpha$-оптимальным, если его размер не больше $\alpha C_{min}$, где $C_{min}$ - минимальный разрез. Оцените вероятность, что один запуск алгоритма Каргера (без разветвлений) найдет $\alpha$-оптимальный разрез (в зависимости от $\alpha$).&lt;br /&gt;
# Докажите, что в графе не больше $n\choose 2$ различных минимальных глобальных разрезов.&lt;br /&gt;
# Сформулируйте и докажите аналогичный предыдущему заданию результат для $\alpha$-оптимальных разрезов.&lt;br /&gt;
# Докажите, что для полинома $p(x_1, \ldots, x_n)$ от $n$ переменных степени $d$ над полем $F$ и множества $S\subset F$ размера $s$ вероятность $P(p(x_1, \ldots, x_n)=0)\le d/s$, где вероятностное пространство - равновероятно все вектора $(x_1, \ldots, x_n)\in S^n$. Используйте без доказательства, что полином от одной переменной степени $d$ над любым полем имеет не более $d$ корней.&lt;br /&gt;
# Покажите, что требование, что $F$ поле в предыдущей задаче является существенным, приведите пример полинома степени $d$ над кольцом, которое не является полем, имеющего более $d$ корней.&lt;br /&gt;
# Покажите, что в определении PRAS можно заменить константу $3/4$ в требовании, что вероятность попасть в интервал $[1-\varepsilon;1+\varepsilon]$ должна быть $3/4$, на любое другое число, строго большее $1/2$.&lt;br /&gt;
# Можно ли в предыдущем задании заменить $1/2$ на $0$?&lt;br /&gt;
# Можно ли в решении задания 73 брать среднее значение в качестве оценки?&lt;br /&gt;
# Рассмотрим формулу в ДНФ. Обозначим как $t$ количество пар $($терм$,$ удовлетворяющее этот терм назначение переменных$)$. Выберем случайно терм, где вероятность выбрать терм пропорциональна числу удовлетворяющих этот терм назначений. Выберем случайное назначение $a$, удовлетворяющее этот терм. Рассмотрим случайную величину $X = t/cov(a)$, где $cov(a)$ - число термов, удовлетворенных назначением $a$. Докажите, что $EX = Y$, где $Y$ - число удовлетворяющих назначений заданной формулы.&lt;br /&gt;
# На базе предыдущего задания предложите альтернативный алгоритм апроксимации числа удовлетворяющих назначений ДНФ.&lt;br /&gt;
# Рандомизированный алгоритм для 2SAT. Рассмотрим следующий алгоритм решения задачи удовлетворимости булевой формулы в 2КНФ с $n$ переменными. Выберем случайное значение каждой переменной. Если формула не удовлетворена, выберем случайный не удовлетворенный клоз и инвертируем значение случайной переменной в нем. Докажите, что если удовлетворяющее назначение существует, оно будет найдено за $O(n^2)$ шагов. Указание: зафиксируйте любое удовлетворяющее формулу назначение и рассмотрите задачу как случайное блуждание по прямой, где координата - это число переменных, значение которых совпадает с значением в выбранном назначении.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для 3SAT?&lt;br /&gt;
# Докажите, что оценку из задания 78 нельзя улучшить: предложите формулу, для которой в среднем понадобится $\Omega(n^2)$ случайных шагов для поиска удовлетворяющего назначения.&lt;br /&gt;
# Предложите аналогичный заданию 78 алгоритм поиска раскраски графа в два цвета.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для поиска раскраски графа в три цвета?&lt;br /&gt;
# Обозначим как $m_k(G)$ количество паросочетаний размера $k$ в двудольном графе $G$, каждая доля которого содержит по $n$ вершин. Докажите, что существует ребро $uv$, такое что $m_k(G)/m_k(G\setminus uv) \le n$.&lt;br /&gt;
# Пусть вероятностный алгоритм $U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем все паросочетания равновероятны. Покажите, как с использованием $U_k$ получить $\varepsilon$-$\delta$-FRPAS для доли паросочетаний, содержащих заданное ребро $uv$ в графе $G$.&lt;br /&gt;
# Покажите, как с использованием $U_k$ из предедыдущего задания получить $\varepsilon$-$\delta$-FRPAS для числа $m_k(G)$.&lt;br /&gt;
# Будем называть вероятностный алгоритм $U_k$ равномерным с точностью до $\rho$ генератором, если он получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$, причем для любого паросочетания $M$ $|P(U_k(G)=M) - 1/m_k(G)| \le \rho/m_k(G)$. Пусть $\rho \le 1/n^b$ для некоторого $b$. Подберите константу $b$, чтобы можно было решить задание 84, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 85, используя равномерный с точностью до $\rho$ генератор.&lt;br /&gt;
# Пусть вероятностный алгоритм $\hat U_k$ получает на вход граф $G$ и выдает случайное паросочетание в $G$ размера $k$ или $k-1$, причем все паросочетания равновероятны. Пусть $r = m_k(G)/m_{k-1}(G)$ удовлетворяет условию $1/n^2 \le r \le n^2$. Докажите, что с помощью $\hat U_k$ можно получить $\varepsilon$-$\delta$-FRPAS для $m_k(G)$.&lt;br /&gt;
# Подберите константу $b$, чтобы можно было решить задание 88, используя равномерный с точностью до $\rho \le 1/n^b$ генератор.&lt;br /&gt;
# Докажите, что если степень любой вершины в графе не меньше $n/2$, то выполнено условие $1/n^2 \le r \le n^2$ для задания 88.&lt;br /&gt;
# Соедините предыдущие задания, чтобы получить из существования равномерного с точностью до $\rho \le 1/n^b$ генератора $\hat U_k$ для любого $k$ $\varepsion$-$\delta$-FPRAS для числа совершенных паросочетаний в двудольном графе, где степени всех вершин не меньше $n/2$.&lt;/div&gt;</summary>
		<author><name>217.79.4.130</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81217</id>
		<title>Список заданий по продвинутым алгоритмам 2021 осень</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81217"/>
				<updated>2021-11-07T16:11:56Z</updated>
		
		<summary type="html">&lt;p&gt;217.79.4.130: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# $1 | p_i=1 | L_{max}$.&lt;br /&gt;
# $1 | r_i, d_i=d | L_{max}$.&lt;br /&gt;
# $1 | prec, r_i, p_i=1 | L_{max}$.&lt;br /&gt;
# Рассмотрим задачу $1 | p_i = 1, d_i | -$. Докажите, что подмножества работ, которые можно выполнить, образуют семейство независимых множеств некоторого матроида.&lt;br /&gt;
# $1 | p_i = 1, d_i | \sum w_iU_i$. Время $O(n\log n)$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum U_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum w_iU_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = p, pmtn, r_i | \sum w_iU_i$ за $O(n^{10})$.&lt;br /&gt;
# $1 || \sum U_i$&lt;br /&gt;
# $1 | r_i, p_i = p | \sum w_iC_i$ за $O(n^7)$&lt;br /&gt;
# Обозначение outtree означает, что граф зависимостей представляет собой исходящее дерево: каджая работа зависит не более чем от одной другой. $1 | outtree | \sum w_iC_i$&lt;br /&gt;
# Обозначение intree означает, что граф зависимостей представляет собой входящее дерево: от каждой работы зависит не более одной другой. $1 | intree | \sum w_iC_i$&lt;br /&gt;
# $P | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | pmtn, r_i | L_{max}$&lt;br /&gt;
# $Q | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | p_i = p, r_i, d_i | \sum C_i$ за $O(n^3 \log n)$ (бонус за $O(n^3 \log\log n)$)&lt;br /&gt;
# $P | p_i = 1 | \sum w_iU_i$ - доведите доказательство с пары до конца&lt;br /&gt;
# $P | p_i = 1 | \sum w_iC_i$&lt;br /&gt;
# $P | p_i = 1, pmtn | \sum w_iC_i$&lt;br /&gt;
# $Q | pmtn | \sum C_i$&lt;br /&gt;
# $Q | pmtn | \sum f_i$ (напомним, что f_i - произвольная неубывающая функция, может быть своя у каждой работы)&lt;br /&gt;
# $Q | pmtn | f_{max}$&lt;br /&gt;
# $P2 | p_i = 1, prec, r_i | \sum C_i$ за $O(n^9)$&lt;br /&gt;
# Сведите задачу $R|pmtn|C_{max}$ к задаче линейного программирования.&lt;br /&gt;
# $P|intree, p_i=1|L_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $F2 | pmtn | C_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1 | C_{max}$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iC_i$&lt;br /&gt;
# $O | p_{ij} = 1, d_i | -$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1, r_i | C_{max}$&lt;br /&gt;
# $O2 | p_{ij} = 1, prec | \sum C_i$&lt;br /&gt;
# Обозначим как $BP(n)$ время умножения булевых матриц размера $n \times n$ над $\vee, \wedge$. Обозначим как $MM(n)$ время умножения целочисленных матриц размера $n \times n$ над $+, \times$. Докажите, что $BP(n) = O(MM(n))$. &lt;br /&gt;
# Докажите, что можно найти транзитивное замыкание графа за время $O(BP(n))$.&lt;br /&gt;
# Пусть $A$ и $B$ - матрицы размера $n \times n$. Пусть $R \subset \{1, 2, \ldots, n\}$, $|R|=r$. Обозначим как $A^R$ матрицу, которая получается из $A$ удалением всех столбцов, кроме столбцов из множества $R$. Аналогично, обозначим как $B_R$ матрицу, которая получается из $B$ удалением всех строк, кроме строк из множества $R$. Докажите, что произведение матриц $A^R\cdot B_R$ может быть найдено за время $O((n/r)^2 MM(r))$, где $MM(r)$ - время умножения матриц размером $r\times r$. &lt;br /&gt;
# Пусть $MM(n)=2+\varepsilon$, $\varepsilon&amp;gt;0$. Модифицируйте алгоритм построения BPWM, чтобы он работал за $MM(n) \log n$. Почему эта идея не сработает, если $MM(n) = O(n^2)$?&lt;br /&gt;
# Докажите лемму с лекции про то, что если в урне $n$ шаров, из которых $w$ белых и $n/2\le wr \le n$, а событие $A$ означает, что из $r$ наугад выбранных из урны шаров оказался ровно один белый, то $P(A) \ge 1/2e$.&lt;br /&gt;
# Сохраняется ли вероятность из предыдущего задания, если шары после вытаскивания возвращаются в урну? Если нет, то можно ли получить аналогичную оценку?&lt;br /&gt;
# Нижняя оценка на сумму длин путей. Докажите, что можно построить граф, в котором $\Omega(n^2)$ пар вершин, расстояние между которыми $\Omega(n)$.&lt;br /&gt;
# Известно, что у учителя есть $2^k$ яблок для некоторого целого неотрицательного $k$. На глазах у студентов он съедает одно яблоко, а остальное раздает ученикам А и В, чтобы ни один из них не видел, сколько получает другой. А и В не знают числа $k$. Они могут показать друг другу по одному знаку из трёх возможных: почесать голову правой, левой или обеими руками. К удивлению учителя, ученики всегда знают, кто получил больше яблок или что учитель съел единственное яблоко сам. Как такое возможно?&lt;br /&gt;
# Вероятностный алгоритм поиска минимума некоторый функции от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Можно ли найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $2/3$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# В алгоритме Кинг с лекции обозначим как $f(u)$ лист, которая получается в ветвящемся дереве $T'$ из вершины $u$ в исходном дереве $T$. Докажите, что если вес максимального ребра на пути из $u$ в $v$ в $T$ равен $x$, а вес максимального ребра на пути из $f(u)$ в $f(v)$ в $T'$ равен $x'$, то $x \ge x'$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что то $x \le x'$.&lt;br /&gt;
# Рассмотрим ветвящееся дерево, пусть в нем $n$ вершин. Пусть есть $m$ запросов на пары листьев, для которых необходимо найти максимальное ребро на пути. Разобьем каждый запрос на два запроса на вертикальном пути до $LCA$ этих листьев, таким образом имеем $2m$ вертикальных путей. Для вершины $v$ обозначим как $A(v)$ множество вертикальных путей, проходящих через $v$. Обозначим как $D_i$ множество вершин на расстоянии $i$ от корня, как $d_i$ число вершин на расстоянии $i$ от корня ($d_i=|D_i|$). Докажите, что $\sum\limits_{u\in D_i}\lceil\log(1+|A(u)|)\rceil&amp;lt;\sum\limits_{u\in D_i}\left(1+\log(1+|A(u)|)\right)\le d_i+d_i \log\frac{d_i+2m}{d_i}$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что $\sum\limits_{i\ge 0}\left(d_i + d_i\log\frac{d_i+2m}{d_i}\right)\le n+n\log\frac{n+2m}{n}+2n$.&lt;br /&gt;
# Докажите, что $\sum\limits_{u}\lceil\log(1+|A(u)|)\rceil = O(n + m)$.&lt;br /&gt;
# Обозначим как $A[v]$ число, в котором $i$-й бит равен $1$, если в $A(v)$ есть путь, заканчивающийся на расстоянии $i$ от корня. Считайте, что вы можете решить задачу о $m$ запросах $LCA$ в дереве с $n$ вершинами за $O(n+m)$ (например, используя алгоритм Фарах-Колтона и Бендера, см https://www.ics.uci.edu/~eppstein/261/BenFar-LCA-00.pdf). Объясните, как посчитать $A[v]$ за время $O(n+m)$. &lt;br /&gt;
# Назовем вершину $v$ большой, если $|A(v)| &amp;gt; \log n/\log\log n$ и маленькой в противном случае. Докажите, что число больших вершин асимптотически не превышает $m /\log\log n$. Указание: оцените число больших вершин на каждом уровне дерева. Отдельно рассмотрите большие вершины на нижних $\log\log n$ и на остальных уровнях.&lt;br /&gt;
# Для вершины $v$, для которой $|A(v)| = k$ рассмотрим фрагменты путей, лежащие выше вершины $v$. Будем хранить $B(v) = [l_1, l_2, \ldots, l_k]$ - список глубин самых тяжелых ребер на фрагментах путях, проходящих через $v$, в порядке от самого длинного пути к самому короткому. Иначе говоря, пронумеруем пути из $A(v)$ в порядке возрастания глубины их верхней вершины. Тогда $l_i$ - расстояние от корня до ребра, которое является самым тяжелым на пути от $v$ до некоторой вершины $u_i$, которая является верхним концом $i$-го пути. Числа $l_i$ называются тагами, длина тага $O(\log\log n)$. Докажите, что массив $B(v)$ отсортирован по неубыванию.&lt;br /&gt;
# Пусть $p$ - родитель вершины $v$, как связаны массивы $B(p)$ и $B(v)$? Дайте подробное описание, используя, при необходимости, $A(p)$ и $A(v)$.&lt;br /&gt;
# Для больших вершин $B(v)$ помещается в $O(\log\log n)$ машинных слово. Пусть родитель вершины также большой. Предложите алгоритм пересчета $B(v)$ через $B(p)$, $A[p]$ и $A[v]$ за $O(\log\log n)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$.&lt;br /&gt;
# Обозначим как $bigp[v]$ максимальную глубину, на котором находится большой предок вершины $v$. Предложите алгоритм, как за построить массив $bigp$ по массиву $A$ за $O(n)$. &lt;br /&gt;
# Для маленьких вершин $B(v)$ помещается в машинное слово, однако вместо списка $B(v)$ будем хранить вспомогательный список $C(v)$, устроенный так. Если самое тяжелое ребро на $i$-м по глубине пути из $A(v)$ находится ниже, чем $bigp[v]$, то будем хранить просто $l_i$. Иначе будем хранить $z_i$ - номер $l_i$ в $B(bigp[v])$. Обозначим упакованный в машинное слово список $C(v)$ за $C[v]$. Предложите алгоритм пересчета $С[v]$ за $O(1)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$. Вы можете использовать посчитанные для родителей и предков $C[u]$, $B(u)$, $A[u]$, $bigp[u]$.&lt;br /&gt;
# Объедините результаты всех предыдущих заданий, чтобы получить алгоритм обработки $m$ запросов поиска максимального ребра на пути между двумя вершинами на дереве за $O(n+m)$.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального разреза в графе к $O(n)$ запускам алгоритма поиска минимального $s-t$ разреза.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального $s-t$ разреза в графе к полиномимальному числу запусков алгоритма поиска глобального минимального разреза.&lt;br /&gt;
# Петя хочет упростить алгоритм Каргера-Штайна. Он запускает алгоритм Каргера (стягивание по случайному ребру), пока количество вершин не станет равно $t$, а затем запускает алгоритм за $t^3$ поиска минимального глобального разреза. Затем он повторяет алгоритм, пока вероятность успеха не составит хотя бы $1/2$. Какое значение $t$ необходимо выбрать, чтобы минимизировать время работы получившегося алгоритма? Какое будет время работы?&lt;br /&gt;
# Докажите, что если в полном двоичном дереве высоты $h$ каждое ребро удаляется с вероятностью $1/2$, то путь от корня до листа сохраняется с вероятностью $\Theta(1/h)$. &lt;br /&gt;
# Обобщите предыдущее задание, если ребро удаляется с вероятностью $p$.&lt;br /&gt;
# С учетом предыдущего задания модифицируйте алгоритм Каргера-Штайна, чтобы разветвляться когда накопленная вероятность ошибки достигнет $p$. Найдите зависимость времени работы от $p$, какое значение $p$ оптимально выбрать?&lt;br /&gt;
# Назовем разрез $\alpha$-оптимальным, если его размер не больше $\alpha C_{min}$, где $C_{min}$ - минимальный разрез. Оцените вероятность, что один запуск алгоритма Каргера (без разветвлений) найдет $\alpha$-оптимальный разрез (в зависимости от $\alpha$).&lt;br /&gt;
# Докажите, что в графе не больше $n\choose 2$ различных минимальных глобальных разрезов.&lt;br /&gt;
# Сформулируйте и докажите аналогичный предыдущему заданию результат для $\alpha$-оптимальных разрезов.&lt;br /&gt;
# Докажите, что для полинома $p(x_1, \ldots, x_n)$ от $n$ переменных степени $d$ над полем $F$ и множества $S\subset F$ размера $s$ вероятность $P(p(x_1, \ldots, x_n)=0)\le d/s$, где вероятностное пространство - равновероятно все вектора $(x_1, \ldots, x_n)\in S^n$. Используйте без доказательства, что полином от одной переменной степени $d$ над любым полем имеет не более $d$ корней.&lt;br /&gt;
# Покажите, что требование, что $F$ поле в предыдущей задаче является существенным, приведите пример полинома степени $d$ над кольцом, которое не является полем, имеющего более $d$ корней.&lt;br /&gt;
# Покажите, что в определении PRAS можно заменить константу $3/4$ в требовании, что вероятность попасть в интервал $[1-\varepsilon;1+\varepsilon]$ должна быть $3/4$, на любое другое число, строго большее $1/2$.&lt;br /&gt;
# Можно ли в предыдущем задании заменить $1/2$ на $0$?&lt;br /&gt;
# Можно ли в решении задания 73 брать среднее значение в качестве оценки?&lt;br /&gt;
# Рассмотрим формулу в ДНФ. Обозначим как $t$ количество пар (терм, удовлетворяющее этот терм назначение перемеррых). Выберем случайно терм, где вероятность выбрать терм пропорциональна числу удовлетворяющих этот терм назначений. Выберем случайное назначение $a$, удовлетворяющее этот терм. Рассмотрим случайную величину $X = t/cov(a)$, где $cov(a)$ - число термов, удовлетворенных назначением $a$. Докажите, что $EX = Y$, где $Y$ - число удовлетворяющих назначений заданной формулы.&lt;br /&gt;
# На базе предыдущего задания предложите альтернативный алгоритм апроксимации числа удовлетворяющих назначений ДНФ.&lt;br /&gt;
# Рандомизированный алгоритм для 2SAT. Рассмотрим следующий алгоритм решения задачи удовлетворимости булевой формулы в 2КНФ с $n$ переменными. Выберем случайное значение каждой переменной. Если формула не удовлетворена, выберем случайный не удовлетворенный клоз и инвертируем значение случайной переменной в нем. Докажите, что если удовлетворяющее назначение существует, оно будет найдено за $O(n^2)$ шагов. Указание: зафиксируйте любое удовлетворяющее формулу назначение и рассмотрите задачу как случайное блуждание по прямой, где координата - это число переменных, значение которых совпадает с значением в выбранном назначении.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для 3SAT?&lt;br /&gt;
# Докажите, что оценку из задания 78 нельзя улучшить: предложите формулу, для которой в среднем понадобится $\Omega(n^2)$ случайных шагов для поиска удовлетворяющего назначения.&lt;br /&gt;
# Предложите аналогичный заданию 78 алгоритм поиска раскраски графа в два цвета.&lt;br /&gt;
# Почему алгоритм из предыдущего задания не работает для поиска раскраски графа в три цвета?&lt;/div&gt;</summary>
		<author><name>217.79.4.130</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81209</id>
		<title>Список заданий по продвинутым алгоритмам 2021 осень</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D1%8B%D0%BC_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D0%BC_2021_%D0%BE%D1%81%D0%B5%D0%BD%D1%8C&amp;diff=81209"/>
				<updated>2021-10-31T11:50:42Z</updated>
		
		<summary type="html">&lt;p&gt;217.79.4.130: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# $1 | p_i=1 | L_{max}$.&lt;br /&gt;
# $1 | r_i, d_i=d | L_{max}$.&lt;br /&gt;
# $1 | prec, r_i, p_i=1 | L_{max}$.&lt;br /&gt;
# Рассмотрим задачу $1 | p_i = 1, d_i | -$. Докажите, что подмножества работ, которые можно выполнить, образуют семейство независимых множеств некоторого матроида.&lt;br /&gt;
# $1 | p_i = 1, d_i | \sum w_iU_i$. Время $O(n\log n)$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum U_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = 1, d_i, r_i | \sum w_iU_i$. Время - полином от $n$.&lt;br /&gt;
# $1 | p_i = p, pmtn, r_i | \sum w_iU_i$ за $O(n^{10})$.&lt;br /&gt;
# $1 || \sum U_i$&lt;br /&gt;
# $1 | r_i, p_i = p | \sum w_iC_i$ за $O(n^7)$&lt;br /&gt;
# Обозначение outtree означает, что граф зависимостей представляет собой исходящее дерево: каджая работа зависит не более чем от одной другой. $1 | outtree | \sum w_iC_i$&lt;br /&gt;
# Обозначение intree означает, что граф зависимостей представляет собой входящее дерево: от каждой работы зависит не более одной другой. $1 | intree | \sum w_iC_i$&lt;br /&gt;
# $P | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | pmtn, r_i | L_{max}$&lt;br /&gt;
# $Q | pmtn, r_i | C_{max}$&lt;br /&gt;
# $P | p_i = p, r_i, d_i | \sum C_i$ за $O(n^3 \log n)$ (бонус за $O(n^3 \log\log n)$)&lt;br /&gt;
# $P | p_i = 1 | \sum w_iU_i$ - доведите доказательство с пары до конца&lt;br /&gt;
# $P | p_i = 1 | \sum w_iC_i$&lt;br /&gt;
# $P | p_i = 1, pmtn | \sum w_iC_i$&lt;br /&gt;
# $Q | pmtn | \sum C_i$&lt;br /&gt;
# $Q | pmtn | \sum f_i$ (напомним, что f_i - произвольная неубывающая функция, может быть своя у каждой работы)&lt;br /&gt;
# $Q | pmtn | f_{max}$&lt;br /&gt;
# $P2 | p_i = 1, prec, r_i | \sum C_i$ за $O(n^9)$&lt;br /&gt;
# Сведите задачу $R|pmtn|C_{max}$ к задаче линейного программирования.&lt;br /&gt;
# $P|intree, p_i=1|L_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $F2 | pmtn | C_{max}$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $F | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1 | C_{max}$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum C_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iC_i$&lt;br /&gt;
# $O | p_{ij} = 1, d_i | -$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum U_i$&lt;br /&gt;
# $O | p_{ij} = 1 | \sum w_iU_i$&lt;br /&gt;
# $O | p_{ij} = 1, r_i | C_{max}$&lt;br /&gt;
# $O2 | p_{ij} = 1, prec | \sum C_i$&lt;br /&gt;
# Обозначим как $BP(n)$ время умножения булевых матриц размера $n \times n$ над $\vee, \wedge$. Обозначим как $MM(n)$ время умножения целочисленных матриц размера $n \times n$ над $+, \times$. Докажите, что $BP(n) = O(MM(n))$. &lt;br /&gt;
# Докажите, что можно найти транзитивное замыкание графа за время $O(BP(n))$.&lt;br /&gt;
# Пусть $A$ и $B$ - матрицы размера $n \times n$. Пусть $R \subset \{1, 2, \ldots, n\}$, $|R|=r$. Обозначим как $A^R$ матрицу, которая получается из $A$ удалением всех столбцов, кроме столбцов из множества $R$. Аналогично, обозначим как $B_R$ матрицу, которая получается из $B$ удалением всех строк, кроме строк из множества $R$. Докажите, что произведение матриц $A^R\cdot B_R$ может быть найдено за время $O((n/r)^2 MM(r))$, где $MM(r)$ - время умножения матриц размером $r\times r$. &lt;br /&gt;
# Пусть $MM(n)=2+\varepsilon$, $\varepsilon&amp;gt;0$. Модифицируйте алгоритм построения BPWM, чтобы он работал за $MM(n) \log n$. Почему эта идея не сработает, если $MM(n) = O(n^2)$?&lt;br /&gt;
# Докажите лемму с лекции про то, что если в урне $n$ шаров, из которых $w$ белых и $n/2\le wr \le n$, а событие $A$ означает, что из $r$ наугад выбранных из урны шаров оказался ровно один белый, то $P(A) \ge 1/2e$.&lt;br /&gt;
# Сохраняется ли вероятность из предыдущего задания, если шары после вытаскивания возвращаются в урну? Если нет, то можно ли получить аналогичную оценку?&lt;br /&gt;
# Нижняя оценка на сумму длин путей. Докажите, что можно построить граф, в котором $\Omega(n^2)$ пар вершин, расстояние между которыми $\Omega(n)$.&lt;br /&gt;
# Известно, что у учителя есть $2^k$ яблок для некоторого целого неотрицательного $k$. На глазах у студентов он съедает одно яблоко, а остальное раздает ученикам А и В, чтобы ни один из них не видел, сколько получает другой. А и В не знают числа $k$. Они могут показать друг другу по одному знаку из трёх возможных: почесать голову правой, левой или обеими руками. К удивлению учителя, ученики всегда знают, кто получил больше яблок или что учитель съел единственное яблоко сам. Как такое возможно?&lt;br /&gt;
# Вероятностный алгоритм поиска минимума некоторый функции от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $1/2$. Можно ли найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# Вероятностный алгоритм проверки некоторого предиката от входных данных размера $n$ работает за полином $p(n)$ и дает верный ответ с вероятностью $2/3$. Как найти верный ответ с вероятностью $99/100$ за полином от $n$?&lt;br /&gt;
# В алгоритме Кинг с лекции обозначим как $f(u)$ лист, которая получается в ветвящемся дереве $T'$ из вершины $u$ в исходном дереве $T$. Докажите, что если вес максимального ребра на пути из $u$ в $v$ в $T$ равен $x$, а вес максимального ребра на пути из $f(u)$ в $f(v)$ в $T'$ равен $x'$, то $x \ge x'$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что то $x \le x'$.&lt;br /&gt;
# Рассмотрим ветвящееся дерево, пусть в нем $n$ вершин. Пусть есть $m$ запросов на пары листьев, для которых необходимо найти максимальное ребро на пути. Разобьем каждый запрос на два запроса на вертикальном пути до $LCA$ этих листьев, таким образом имеем $2m$ вертикальных путей. Для вершины $v$ обозначим как $A(v)$ множество вертикальных путей, проходящих через $v$. Обозначим как $D_i$ множество вершин на расстоянии $i$ от корня, как $d_i$ число вершин на расстоянии $i$ от корня ($d_i=|D_i|$). Докажите, что $\sum\limits_{u\in D_i}\lceil\log(1+|A(u)|)\rceil&amp;lt;\sum\limits_{u\in D_i}\left(1+\log(1+|A(u)|)\right)\le d_i+d_i \log\frac{d_i+2m}{d_i}$.&lt;br /&gt;
# В условиях предыдущей задачи докажите, что $\sum\limits_{i\ge 0}\left(d_i + d_i\log\frac{d_i+2m}{d_i}\right)\le n+n\log\frac{n+2m}{n}+2n$.&lt;br /&gt;
# Докажите, что $\sum\limits_{u}\lceil\log(1+|A(u)|)\rceil = O(n + m)$.&lt;br /&gt;
# Обозначим как $A[v]$ число, в котором $i$-й бит равен $1$, если в $A(v)$ есть путь, заканчивающийся на расстоянии $i$ от корня. Считайте, что вы можете решить задачу о $m$ запросах $LCA$ в дереве с $n$ вершинами за $O(n+m)$ (например, используя алгоритм Фарах-Колтона и Бендера, см https://www.ics.uci.edu/~eppstein/261/BenFar-LCA-00.pdf). Объясните, как посчитать $A[v]$ за время $O(n+m)$. &lt;br /&gt;
# Назовем вершину $v$ большой, если $|A(v)| &amp;gt; \log n/\log\log n$ и маленькой в противном случае. Докажите, что число больших вершин асимптотически не превышает $m /\log\log n$. Указание: оцените число больших вершин на каждом уровне дерева. Отдельно рассмотрите большие вершины на нижних $\log\log n$ и на остальных уровнях.&lt;br /&gt;
# Для вершины $v$, для которой $|A(v)| = k$ рассмотрим фрагменты путей, лежащие выше вершины $v$. Будем хранить $B(v) = [l_1, l_2, \ldots, l_k]$ - список глубин самых тяжелых ребер на фрагментах путях, проходящих через $v$, в порядке от самого длинного пути к самому короткому. Иначе говоря, пронумеруем пути из $A(v)$ в порядке возрастания глубины их верхней вершины. Тогда $l_i$ - расстояние от корня до ребра, которое является самым тяжелым на пути от $v$ до некоторой вершины $u_i$, которая является верхним концом $i$-го пути. Числа $l_i$ называются тагами, длина тага $O(\log\log n)$. Докажите, что массив $B(v)$ отсортирован по неубыванию.&lt;br /&gt;
# Пусть $p$ - родитель вершины $v$, как связаны массивы $B(p)$ и $B(v)$? Дайте подробное описание, используя, при необходимости, $A(p)$ и $A(v)$.&lt;br /&gt;
# Для больших вершин $B(v)$ помещается в $O(\log\log n)$ машинных слово. Пусть родитель вершины также большой. Предложите алгоритм пересчета $B(v)$ через $B(p)$, $A[p]$ и $A[v]$ за $O(\log\log n)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$.&lt;br /&gt;
# Обозначим как $bigp[v]$ максимальную глубину, на котором находится большой предок вершины $v$. Предложите алгоритм, как за построить массив $bigp$ по массиву $A$ за $O(n)$. &lt;br /&gt;
# Для маленьких вершин $B(v)$ помещается в машинное слово, однако вместо списка $B(v)$ будем хранить вспомогательный список $C(v)$, устроенный так. Если самое тяжелое ребро на $i$-м по глубине пути из $A(v)$ находится ниже, чем $bigp[v]$, то будем хранить просто $l_i$. Иначе будем хранить $z_i$ - номер $l_i$ в $B(bigp[v])$. Обозначим упакованный в машинное слово список $C(v)$ за $C[v]$. Предложите алгоритм пересчета $С[v]$ за $O(1)$, перед этим можно выполнить общий для всех вершин предподсчет за $O(n+m)$. Вы можете использовать посчитанные для родителей и предков $C[u]$, $B(u)$, $A[u]$, $bigp[u]$.&lt;br /&gt;
# Объедините результаты всех предыдущих заданий, чтобы получить алгоритм обработки $m$ запросов поиска максимального ребра на пути между двумя вершинами на дереве за $O(n+m)$.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального разреза в графе к $O(n)$ запускам алгоритма поиска минимального $s-t$ разреза.&lt;br /&gt;
# Покажите, как свести задачу поиска минимального $s-t$ разреза в графе к полиномимальному числу запусков алгоритма поиска глобального минимального разреза.&lt;br /&gt;
# Петя хочет упростить алгоритм Каргера-Штайна. Он запускает алгоритм Каргера (стягивание по случайному ребру), пока количество вершин не станет равно $t$, а затем запускает алгоритм за $t^3$ поиска минимального глобального разреза. Затем он повторяет алгоритм, пока вероятность успеха не составит хотя бы $1/2$. Какое значение $t$ необходимо выбрать, чтобы минимизировать время работы получившегося алгоритма? Какое будет время работы?&lt;br /&gt;
# Докажите, что если в полном двоичном дереве высоты $h$ каждое ребро удаляется с вероятностью $1/2$, то путь от корня до листа сохраняется с вероятностью $\Theta(1/h)$. &lt;br /&gt;
# Обобщите предыдущее задание, если ребро удаляется с вероятностью $p$.&lt;br /&gt;
# С учетом предыдущего задания модифицируйте алгоритм Каргера-Штайна, чтобы разветвляться когда накопленная вероятность ошибки достигнет $p$. Найдите зависимость времени работы от $p$, какое значение $p$ оптимально выбрать?&lt;br /&gt;
# Назовем разрез $\alpha$-оптимальным, если его размер не больше $\alpha C_{min}$, где $C_{min}$ - минимальный разрез. Оцените вероятность, что один запуск алгоритма Каргера (без разветвлений) найдет $\alpha$-оптимальный разрез (в зависимости от $\alpha$).&lt;br /&gt;
# Докажите, что в графе не больше $n\choose 2$ различных минимальных глобальных разрезов.&lt;br /&gt;
# Сформулируйте и докажите аналогичный предыдущему заданию результат для $\alpha$-оптимальных разрезов.&lt;br /&gt;
# Докажите, что для полинома $p(x_1, \ldots, x_n)$ от $n$ переменных степени $d$ над полем $F$ и множества $S\subset F$ размера $s$ вероятность $P(p(x_1, \ldots, x_n)=0)\le d/s$, где вероятностное пространство - равновероятно все вектора $(x_1, \ldots, x_n)\in S^n$. Используйте без доказательства, что полином от одной переменной степени $d$ над любым полем имеет не более $d$ корней.&lt;br /&gt;
# Покажите, что требование, что $F$ поле в предыдущей задаче является существенным, приведите пример полинома степени $d$ над кольцом, которое не является полем, имеющего более $d$ корней.&lt;/div&gt;</summary>
		<author><name>217.79.4.130</name></author>	</entry>

	</feed>