Научная статья на тему 'Двумерный тернарный поиск и его применение в задачах спортивного программирования'

Двумерный тернарный поиск и его применение в задачах спортивного программирования Текст научной статьи по специальности «Математика»

CC BY
903
84
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
двумерный тернарный поиск / спортивное программирование / two-dimensional ternary search / competitive programming

Аннотация научной статьи по математике, автор научной работы — Н О. Котелина

В этой статье рассматривается использование метода тернарного поиска для решения одной задачи спортивного программирования.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Two-dimensional ternary search and its application in competitive programming

In this paper the application of ternary search in one problem of competitive programming is considered.

Текст научной работы на тему «Двумерный тернарный поиск и его применение в задачах спортивного программирования»

продолжаем поиск. Те же рассуждения верны, если r положить равным 3, тогда метод называется методом тернарного поиска, так как точки c = a + (1 — r)(b — a), d = a + r(b — a) делят отрезок [а, b] на три равные части. Поскольку отрезок, на котором вычисляется минимум, каждый раз сужается в 1.5 раза, до тех пор, пока длина не меньше eps, то асимптотическая сложность тернарного поиска с точностью eps составляет log1 5 b-:. В случае целочисленного аргумента точки c и d выбираются приближенно, а критерием остановки алгоритма является условие b — а < 3, так как в этом случае выбрать c и d нельзя.

2. Двумерный тернарный поиск

Можно обобщить метод тернарного поиска на случай унимодальной функции f (x,y) от двух аргументов x Е [a, b], y Е [c, d], т. е. такой, которая является унимодальной от одного аргумента, если зафиксировать другой. Тогда будем проводить тернарный поиск по x, а именно делим отрезок [a, b] на три части точками m, n, пока длина отрезка не меньше eps, вычисляем при помощи двух тернарных поисков минимумы по y для f (m, y), для f (n, y), сравниваем между собой найденные значения и переопределяем соответствующим образом a и b. Асимптотическая сложность данного алгоритма будет составлять

logl-5 e—s logl-5 e—s *

3. Постановка задачи

Рассмотрим задачу с Регионального этапа Всероссийской олимпиады школьников 2015-2016 «Гармоничная последовательность» [1].

Условие задачи таково.

Цикл лекций в университете Флатландии посвящен изучению последовательностей.

Профессор называет последовательность целых чисел ах, а2,..., ап гармоничной, если каждое число, кроме ах и ап, равно сумме соседних: а2 = ах + аз,аз = а2 + а4,..., ап-х = ап-2 + ап. Например, последовательность [1, 2,1, -1] является гармоничной, поскольку 2 = 1 + 1, и 1 = 2 + (-1).

Рассмотрим последовательности равной длины: А = [ах, а2,... , ап] и В = [Ьх, Ь2,... , Ьп]. Расстоянием между этими последовательностями будем называть величину ^(А, В) = |ах — Ьх| + |а2 — Ь2| + • • • + |ап — Ьп|. Например, ^([1, 2,1, —1], [1, 2, 0, 0]) = |1 — 1| + |2 — 2| + |1 — 0| + | — 1 — 0| = = 0 + 0 + 1 + 1 = 2.

В конце лекции профессор написал на доске последовательность из n целых чисел B = [bi, b2,... , bn] и попросил студентов в качестве домашнего задания найти гармоничную последовательность A = [а1,а2, • • •, an], такую, что d(A, B) минимально. Чтобы облегчить себе проверку, профессор просит написать в качестве ответа только искомое минимальное расстояние d(A, B).

Требуется написать программу, которая по заданной последовательности B определяет, на каком минимальном расстоянии от последовательности B найдется гармоничная последовательность A.

Входные данные. Первая строка входного файла содержит целое число n — количество элементов в последовательности (3 ^ n ^ 300000).

Вторая строка содержит n целых чисел b1,b2,... bn, (—109 ^ bi ^ ^ 109).

Выходные данные. Выходной файл должен содержать одно целое число: минимальное возможное расстояние от последовательности во входном файле до гармоничной последовательности. Время работы программы не должно превышать 1 секунду.

4. Решение задачи

Заметим, что для того, чтобы программа удовлетворяла временным ограничениям, количество операций не должно превосходить 109. Обозначим первые два числа гармоничной последовательности как x и у. Тогда сама последовательность будет иметь вид x, у, (у — x), —x, -у, (x — у), x, у, • • •. Расстояние d(A, B) является функцией от x, у:

d(A, B) = f (x, у) = max{|x — bi|, |у — b21, |у — x — Ьз|, • • • }•

Функция f (x, у) будет выпуклой как максимум семейства выпуклых функций и, следовательно, будет унимодальной.

Пусть все числа в исходной последовательности по модулю не превосходят A. Тогда существует правильный ответ, в котором одно из чисел x и у не превосходит по модулю A, а другое 2A. Доказательство этого факта приведено в разборе заданий ВСоШ [6]. Таким образом, искомые x, у находятся в диапазоне от —2max{|b1|,... , |bn|} до 2max{|b1|,..., |bn|}, и перебор x, у в общем случае не пройдет по времени.

Если воспользоваться двумерным тернарным поиском, то число итераций будет порядка

(log15 (4 ■ 109))2 « 3000.

При этом, если функцию расстояния вычислять напрямую суммированием, то для ее вычисления потребуется 3 • 105 операций. На каждом шаге тернарного поиска по x нужно проводить два тернарных поиска по у, для каждого из которых может потребоваться около 50 итераций, с вычислением на каждой итерации значения f (x, у) в двух точках. Таким образом, даже при грубой оценке общее число операций для вычисления f (x, у) может достигать величины

50 • 2 • 50 • 6 • 105 w 3 • 109,

и поэтому не удовлетворяет временным ограничениям задачи. Поэтому целесообразно вычислять целевую функцию при помощи двоичного поиска, что приводит к значительному уменьшению числа операций. Идея двоичного поиска заключается в том, чтобы узнать, сколько модулей слагаемых в функции расстояния раскрываются с минусом, а сколько — с плюсом, т. е. сводится к проблеме вычисления количества элементов в заданной последовательности B, не превосходящих данного числа. Для этого требуется предварительно отсортировать элементы последовательности B по возрастанию и вычислить частичные суммы для функции расстояния. При этом все слагаемые в функции расстояния разбиваются на 3 группы в зависимости от их номера, поскольку нужно проводить отдельно двоичный поиск для x, у, у — x.

Список литературы

1. Дистанционная подготовка по информатике [Электронный ресурс]. URL: http://informatics.mccme.ru (дата обращения: 29.10.2017).

2. MAXimal. Сайт М. Иванова [Электронный ресурс]. URL: http://e-maxx.ru (дата обращения: 12.09.2017).

3. Кнут Д. Искусство программирования. Т. 3. Сортировка и поиск. М.: Вильямс, 2007. Т. 3. 832 с.

4. Конспекты студентов кафедры компьютерных технологий Университета ИТМО. URL: http: //neerc. ifmo. ru/wiki (дата обращения: 12.09.2017).

5. Мэтьюз Дж. Г., Финк К. Д. Численные методы. Использование

MATLAB. 3-е изд. СПб.: Вильямс, 2001. 716 с.

6. Олимпиады по информатике [Электронный ресурс].

URL: https://neerc.ifmo.ru/school (дата обращения: 12.09.2017).

Summary

Kotelina N. O Two-dimensional ternary search and its application in competitive programming

In this paper the application of ternary search in one problem of competitive programming is considered.

Keywords: two-dimensional ternary search, competitive programming.

References

1. Distantcionnaya podgotovka po informatike (Distance training in computer science). URL: http://informatics.mccme.ru (date of usage: 29.10.2017).

2. MAXimal. Sayt M. Ivanova (MAXimal. Site of M. Ivanov) URL: http://e-maxx.ru (date of usage: 12.09.2017).

3. Knuth D. E. Iskusstvo programmirovaniya (The Art of Computer Programming. Vol. 3. Sorting and Searching) M. :Williams (2007). 832 p.

4. Konspekty studentov kafedry komp'yuternykh tekhnologiy Universiteta ITMO (Conspects of students of ITMO)

URL: http://neerc.ifmo.ru/wiki (date of usage: 12.09.2017).

5. Mathews J. H., Fink K. D. Chislennyye metody. Ispol'zovaniye MATLAB (Numerical Methods: Using MATLAB) 3rd Edition. Spb.: Williams, 2001, 716 p.

6. Olimpiady po informatike (Olympiads on informatics) URL: https://neerc.ifmo.ru/school. (date of usage: 12.09.2017).

Для цитирования: Котелина Н. О. Двумерный тернарный поиск и его применение в задачах спортивного программирования // Вестник Сыктывкарского университета. Сер. 1: Математика. Механика. Информатика. 2018. Вып. 1 (26). C. 58-63.

For citation: Kotelina N. O. Two-dimensional ternary search and its application in competitive programming, Bulletin of Syktyvkar University, Series 1: Mathematics. Mechanics. Informatics, 2018, 1 (26), pp. 58-63.

СГУ им. Питирима Сорокина Поступила 29.12.2017

i Надоели баннеры? Вы всегда можете отключить рекламу.