У меня есть много файлов журналов посещений веб-страниц, где каждый визит связан с идентификатором пользователя и меткой времени. Мне нужно определить наиболее популярную (т.е. Наиболее часто посещаемую) трехстраничную последовательность всех. Файлы журнала слишком велики для хранения в основной памяти одновременно.
Пример файла журнала:
User ID Page ID
A 1
A 2
A 3
B 2
B 3
C 1
B 4
A 4
Соответствующие результаты:
A: 1-2-3, 2-3-4
B: 2-3-4
2-3-4 - самая популярная трехстраничная последовательность
Моя идея - использовать две хэш-таблицы. Первые хэши на идентификаторе пользователя и сохраняют его последовательность; второй хеширует трехстраничные последовательности и запоминает количество раз, когда каждый появляется. Это занимает O (n) пространство и O (n) время.
Однако, поскольку я должен использовать две таблицы хэша, память не может держать все сразу, и я должен использовать диск. Не очень эффективно обращаться к диску очень часто.
Как я могу сделать это лучше?