是否有可能具有布尔矩阵的旋转不变标识符?

int*_*nt3 6 algorithm matrix

说我有一和零的矩阵,并且我想为这个矩阵取相同值的"识别符"而不管该基质是否由90,180,或270度,即,一个4对1映射旋转.理想情况下,此标识符应为矩阵大小的1/4.是否可以编写一个执行此映射的函数?

背景:我在UVa问题集上看到了这个问题.我并不需要这样的功能来解决问题,但它存在似乎是合理的,并且使用它将使得更优雅的解决方案.

Mar*_*ers 7

是.您可以使用原始矩阵A,并将其旋转到所有可能的配置A',A''和A'''.然后,您可以使用您选择的某些排序(只是保持一致)对这些进行排序,选择第一个,并使用您选择的任何哈希函数进行哈希(再次,实际哈希函数无关紧要,只需保持一致).

显然,这可以通过不实际进行完全旋转和排序来进行大量优化 - 您可以懒惰地进行比较,一旦知道哪个旋转首先排序就停止 - 但原理是相同的.

  • 或者不打扰排序,但产生所有4个哈希并将它们混合在一起.+1好主意! (3认同)
  • 生成唯一结果不需要哈希函数.良好的散列函数会产生大致均匀分布在散列结果空间上的结果,即使只对输入进行了少量更改.对两个均匀分布的变量进行异或仍然是均匀分布的. (2认同)
  • int3,根据您的要求,您的"哈希"函数应该只是"附加所有N*N位以生成N*N位整数". (2认同)