У меня очень большая матрица (100M строк по 100M столбцам), у которой много одинаковых значений рядом друг с другом. Например:
8 8 8 8 8 8 8 8 8 8 8 8 8
8 4 8 8 1 1 1 1 1 8 8 8 8
8 4 8 8 1 1 1 1 1 8 8 8 8
8 4 8 8 1 1 1 1 1 8 8 8 8
8 4 8 8 1 1 1 1 1 8 8 8 8
8 4 8 8 1 1 1 1 1 8 8 8 8
8 8 8 8 8 8 8 8 8 8 8 8 8
8 8 3 3 3 3 3 3 3 3 3 3 3
Я хочу, чтобы структура данных/алгоритм хранила такие матрицы как можно компактнее. Например, приведенная выше матрица должна принимать только пространство O (1) (даже если матрица растягивалась сколь угодно большой), поскольку существует только постоянное число прямоугольных областей, где каждая область имеет только одно значение.
Повторение происходит как по строкам, так и по нижним колонкам, поэтому простой подход к сжатию матрицы по строкам недостаточно хорош. (Для хранения любой матрицы требуется минимальное пространство O (num_rows).
Для представления матрицы также требуется доступная строка за строкой, так что я могу сделать умножение матрицы на вектор-столбец.