У меня есть большое количество списков (всего 35 МБ), в которых я хотел бы искать подпоследовательности: каждый термин должен появиться в порядок, но не обязательно последовательно. Таким образом, 1, 2, 3 соответствует каждому из
1, 2, 3, 4, 5, 6
1, 2, 2, 3, 3, 3
, но не
6, 5, 4, 3, 2, 1
123, 4, 5, 6, 7
(,
- это разделитель, а не символы для сопоставления.)
За исключением выполнения регулярного выражения ( / 1, ([^,] +,) * 2, ([^,] +,) * 3 /
для примера) для десятков или сотен тысяч последовательностей, как я могу определить, какие последовательности совпадают? Я могу предварительно обработать последовательности, хотя использование памяти должно оставаться разумным (скажем, в пределах постоянного множителя существующего размера последовательности). Самая длинная последовательность короткая, менее килобайта, поэтому вы можете предположить, что запросы тоже короткие.