質問

1と0のマトリックスがあり、マトリックスが90、180、または270度回転しているかどうかに関係なく同じ値をとるこのマトリックスの「識別子」、つまり4〜 -1マッピング。理想的には、この識別子はマトリックスのサイズの1/4である必要があります。このマッピングを行う関数を書くことは可能ですか?

背景:UVa問題セットでこの問題を見ていました。問題を解決するためにそのような関数は必ずしも必要ではありませんが、それが存在することは理にかなっているようであり、それを使用するとよりエレガントなソリューションになります。

役に立ちましたか?

解決

はい。元のマトリックスAを取得し、可能なすべての構成A '、A' '、およびA' ''に回転させることができます。次に、選択した並べ替え(一貫性がある)を使用してこれらを並べ替え、最初のものを選択し、選択した任意のハッシュ関数を使用してハッシュします(繰り返しますが、実際のハッシュ関数は関係ありません、一貫性があります)。

明らかに、これは実際に完全な回転と並べ替えを行わないことで大幅に最適化できます-比較を遅延して行うことができ、最初にどの回転が並べ替えられるかがわかるとすぐに停止します-原理は同じです

他のヒント

すべての回転をXORするだけで、対称識別子になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top