Для представления, которое обеспечивает точное сравнение, невозможно добиться лучшего, чем оптимальное сжатие последовательности битов, которые представляют конфигурацию.
Если вам требуется, чтобы логические значения MxN были уникально закодированы в целое число, вам потребуется 2 M * N значений. Возможно ли это с помощью целых чисел с фиксированной точностью на вашей платформе, зависит от размера M и N; в противном случае вам придется использовать битовую строку или большое целое число.
Поскольку исходными данными является любое целочисленное значение, а не просто 1 или 0, идентификатор наивной цепочки битов наивной матрицы даст сжатие 8 * sizeof ( matrix::cell_type )
. Строка битов, оптимизированная для разреженных значений, может быть лучше. Хорошие реализации разреженных цепочек битов сжимают данные, так что это уменьшит пространство хранения представления и позволит быстро и точно сравнивать, что и является требованиями.
Если шаблоны гарантированно разрежены до определенного уровня, существуют способы оптимизации, которые можно выполнить для сжатия информации, но вам нужно предоставить больше информации.
Например, используете ли вы разреженное матричное представление (с полосами, диагональю, сжатые строки и т. Д.) И имеете доступ к внутренним частям хранилища разреженной матрицы, которое естественно и эффективно отобразит сжатую цепочку битов.
Глядя на ваш другой пост, кажется, что матрица используется как сетка для игры, а не как матрица. В этом случае, вероятно, лучше использовать сжатие длин серий для цепочки битов, поскольку это дает другое полезное свойство - закодированное представление цепочек битов матриц, конфигурации которых являются переводами друг друга, будет отличаться только первым значением кодирования.