Поиск подпоследовательностей

У меня есть большое количество списков (всего 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 / для примера) для десятков или сотен тысяч последовательностей, как я могу определить, какие последовательности совпадают? Я могу предварительно обработать последовательности, хотя использование памяти должно оставаться разумным (скажем, в пределах постоянного множителя существующего размера последовательности). Самая длинная последовательность короткая, менее килобайта, поэтому вы можете предположить, что запросы тоже короткие.

5
задан Charles 21 September 2011 в 01:18
поделиться