Я получил несколько мегабайт данных, как это:Обнаружения повторяющихся групп линий
11 2 1
4 3 1
11 2 1
4 3 1
11 2 1
4 3 1
18 3 2
Я хотел бы, чтобы сжать его, добавив строки, говоря «предыдущие п строк повторяются т раз.» Алгоритм должен читать строки и задерживать их распечатку до нахождения максимально возможного m * n, но может принимать n < = 10. Какой был бы лучший способ сделать это?
Я думал о том, чтобы хранить 10 массивов из 1,10 предыдущих строк с помощью счетчиков повторов, вращая содержимое массива, когда появляются новые строки, и печатает вышеприведенное сообщение, когда новая строка чтения не соответствует самой старой записи в любой из массивов, и по крайней мере один из массивов заполняется повторами.
Вы можете подробно рассказать о технологии, которую вы используете, и о цели? если вы просто хотите сжать, вы можете использовать zip-алгоритмы, нет? – YavgenyP
Я хочу, чтобы данные оставались читаемыми человеком. Linux syslog сжимает отдельные повторяющиеся строки таким образом, но я хотел бы также повторять последовательности групп из 2-10 строк, сжатых таким же образом. – jjrv
Сжатие может быть выполнено, например, в awk, perl или C. Кроме того, в данных, отличных от повторов, мало корреляции. – jjrv