Я пытался найти оптимальное решение следующей (интересной?) Проблемы, которая возникла на работе: в конце концов я согласился на достаточно хорошее решение, но я хотел бы знать, есть ли лучшее.
Пусть a 1 ... a n будет массивом строк.
Пусть s 1 ... s k - неупорядоченный список строк, все они также являются членами массива.
Задача состоит в том, чтобы найти минимальный набор элементов диапазонов индексов s
cover в a
.
Так, например, если a = ["x", "y", "a", "f", "c"] и s = {"c", "y", "f"},ответ будет (1; 1), (3; 4), при условии, что массив проиндексирован с нуля.
a
обычно довольно большой (сотни тысяч элементов), тогда как s
относительно мала, обычно длина (с)
Итак, вопрос в том, можете ли вы найти эффективный по времени алгоритм для этой проблемы?(Эффективность пространства не имеет значения в разумных пределах.)
Просто быстрое, но важное обновление: мне нужно выполнить эту операцию с различными значениями s
, но одинаковыми a
.Так что предварительные вычисления, основанные на a
, разрешены, это действительно единственный способ.