Size: a a a

2020 March 26

DK

Dmitry Kozyrev in pro.algorithms
Блин
источник

DK

Dmitry Kozyrev in pro.algorithms
Точняк
источник

K

Kotomord_λapki in pro.algorithms
если бы префикс - я бы за  O(NL) решал
источник

DK

Dmitry Kozyrev in pro.algorithms
понял, то, что я написал, не будет работать для не префикса
источник

DK

Dmitry Kozyrev in pro.algorithms
тогда можно бинпоиск и хеши
источник

DK

Dmitry Kozyrev in pro.algorithms
Решаем для текущей строки. На длину ответа выполнены условия бинпоиска. Начальный отрезок low = 0 - нельзя, high = L - можно.  Хотим понять, можно ли mid = (low + high) / 2. Тогда складываем в хеш таблицу все подстроки других строк длины mid. И ищем в ней все подстроки текущей строки длины mid. Если какой-то не нашлось, то high = mid, иначе low = mid.
источник

DK

Dmitry Kozyrev in pro.algorithms
Подстрок длины mid суммарно порядка N * L. Бинпоиск за log(L), итого O(N * L * log(L))
источник

K

Kotomord_λapki in pro.algorithms
не, N*N*Log L
источник

K

Kotomord_λapki in pro.algorithms
вовне ещё цикл для каждой строки
источник

K

Kotomord_λapki in pro.algorithms
но можно соптимизировать, да
источник

K

Kotomord_λapki in pro.algorithms
хотя хз, как именно
источник

DK

Dmitry Kozyrev in pro.algorithms
Значит опять наврал. Тогда нужно заранее сложить все хеши в хеш таблицу, чтобы не бегать лишний раз. Их будет не более 5*10^6.
источник

K

Kotomord_λapki in pro.algorithms
да,  один раз сложить все подстроки в хэш-таблицу с пометкой "нашлась в одной строке или "
источник

DK

Dmitry Kozyrev in pro.algorithms
Хотя человек спросил как решать суффмасом за O(N * L)
источник

DK

Dmitry Kozyrev in pro.algorithms
Тут нужен @Kirundel
источник

DK

Dmitry Kozyrev in pro.algorithms
Kotomord_λapki
да,  один раз сложить все подстроки в хэш-таблицу с пометкой "нашлась в одной строке или "
По памяти будет 60 мбайт, еле войдет
источник

KK

Kirill Kaymakov in pro.algorithms
Dmitry Kozyrev
Тут нужен @Kirundel
Шо, где?
источник

K

Kotomord_λapki in pro.algorithms
Dmitry Kozyrev
По памяти будет 60 мбайт, еле войдет
написать stringview
источник

DK

Dmitry Kozyrev in pro.algorithms
@Kirundel расскажи человеку как решать суфмассивом (он просил одним сообщением ниже) мы не умеем
источник

Ш

ШаХа in pro.algorithms
Переслано от Mikail Bagishov
Сначала смержим все строку в одну, через разделитель
Давай построим LCP и по очереди решим задачу для каждой строки.
Теперь давай переберем суффикс, с которого начинается искомая подстрока.
Давай найдем ближайшие "слева" и "справа" (в порядке суфмаса, т.е. лексикографическом) суффиксы, относящиеся к другим строкам. пусть наш LCP  с ними - k1, k2.
Тогда мы не можем взять от нас ни один префикс длины max(k1, k2) или меньше, а вот префикс длины max(k1, k2) + 1 подойдет
источник