Pull to refresh

Comments 7

спасибо, правда очень интересно, правда скорость придётся замерять самому, наверняка скорости разные, симд/несимд/сейф/ансейф/с/с++

просто сейчас всё обращено на некоторые аспекты, мы же не на спарке программируем

В начале написана асимптотика алгоритма, и она состовляет O(N ^2 2^N).

Так как время работы сильно зависит от машины, на которой работает алгоритм, в теоретической информатике работают с асимптотиками алгоритмов. Про это можно подробнее прочитать тут и на википедии.

Спасибо за интересную статью.

Не могли бы вы заодно расписать, как эта свертка применяется к оригинальной задаче.

Ведь N отсюда - это же 20 - количество друзей в задаче, верно? А 2^20 > M = 5*10^5 - количества кучек. Поэтому "наивное" решение за O(N^2 M), состоящее в переборе всех пар друзей и проходу по всем кучкам, будет даже быстрее этой свертки за O(N^2 2^N).

Или задача послужила только вдохновлением к этому методу?

Мы не можем перебрать все пары друзей, так как их 10^5. Поэтому нужно использовать приведённый алгоритм, но с некоторой вариацией.

Постараюсь кратко указать направление идеи.

В качестве f_i и g_i возьмем c_i равное количеству друзей которые едят именно этот набор пицц.

Так же i будет равен не размеру множества, а количеству пицц нечетного размера.

Делаем свертку с_i, с самим собой перемножаем в c_{2,i} и разворачиваем.

Тут нужно учесть, что ответ будет в 2 раза больше, и для i = 0, нужно удалить неподходящие случаи.

Так же у задачи есть разбор и пример кода.

Но эта задача сложная (*3000), и разбор будет большим, поэтому я постарался рассказать только направление идеи.

Да, невнимательно прочитал. Пиц там N - до 20, а друзей 5*10^5.

R - это поле, в данном случае число

Вы не про \mathbb{R} часом?

Да, тут мы работаем с обычными числами. Но этот же алгоритм можно применить, к примеру, если R это матрицы.

Тут я заметил ошибку, в статье мы используем не поле, а кольцо.

Sign up to leave a comment.

Articles