正確な比較を可能にする表現は、構成を表現する一連のビットの最適な圧縮よりも優れたものにすることはできません。
MxN ブール値を整数で一意にエンコードする必要がある場合は、2 M*N値が必要です。プラットフォームの固定精度整数を使用して実現可能かどうかは、M と N のサイズによって異なります。そうでない場合は、ビット文字列または大きな整数を使用する必要があります。
元のデータは単なる 1 または 0 ではなく、任意の整数値であるため、ナイーブ マトリックスのナイーブ ビットストリング ID は の圧縮を提供し8 * sizeof ( matrix::cell_type )
ます。スパース値用に最適化されたビット文字列の方が優れている可能性があります。スパース ビット文字列の適切な実装はデータを圧縮するため、これにより表現のストレージ スペースが削減され、要件である正確な比較が迅速に行われます。
パターンが特定のレベルまでまばらであることが保証されている場合、情報を圧縮して実行できる最適化がありますが、より多くの情報を提供する必要があります。
たとえば、スパース マトリックス表現 (バンド、対角線、行圧縮など) を使用しており、スパース マトリックス ストレージの内部にアクセスできる場合、圧縮されたビット文字列に自然かつ効率的にマップされます。
他の投稿を見ると、マトリックスはマトリックスとしてではなく、ゲームのグリッドとして使用されているようです。その場合、ビット文字列でランレングス圧縮を使用するのがおそらく最善です。これにより、別の有用なプロパティが得られます。構成が相互の翻訳であるマトリックスのエンコードされたビット文字列表現は、エンコーディングの最初の値のみが異なります。