【问题标题】:Is it possible to have a rotationally invariant identifier of a boolean matrix?是否有可能具有布尔矩阵的旋转不变标识符?
【发布时间】:2009-11-28 15:13:02
【问题描述】:

假设我有一个由 1 和 0 组成的矩阵,并且我想要这个矩阵的“标识符”,无论矩阵是否旋转 90、180 或 270 度,我都需要一个相同的值,即 4 到-1 映射。理想情况下,这个标识符应该是矩阵大小的 1/4。能不能写个函数来做这个映射?

背景:我正在查看关于 UVa 问题集的 this problem。我并不完全需要这样的函数来解决问题,但它的存在似乎是合理的,使用它会得到一个更优雅的解决方案。

【问题讨论】:

  • +1 今天我必须阅读 3 遍的第一个问题

标签: algorithm matrix


【解决方案1】:

是的。您可以获取原始矩阵 A,并将其旋转到所有可能的配置 A'、A'' 和 A'''。然后,您可以使用您选择的某种排序方式对它们进行排序(只要保持一致),选择第一个,然后使用您选择的任何散列函数对其进行散列(同样,实际的散列函数并不重要,只要保持一致即可)。

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

【讨论】:

  • 或者不打扰排序,而是生成所有 4 个哈希并将它们异或在一起。 +1 好主意!
  • 您的想法也可行,而且更简单,但可能会更慢,因为可能难以进一步优化。 +1 建议采用不同的方法 - 有时简单性比性能更重要。
  • @Carl:你能澄清一下 4 个哈希值如何异或总是会产生唯一的结果吗?
  • 哈希函数不需要产生唯一的结果。一个好的散列函数会产生大致均匀分布在散列结果空间上的结果,即使只对输入进行很小的更改。异或两个均匀分布的变量仍然是均匀分布的。
  • int3,根据您的要求,您的“哈希”函数应该只是“附加所有 NN 位以生成 NN 位整数”。
【解决方案2】:

您可以对所有旋转进行异或运算,这将是一个对称标识符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    相关资源
    最近更新 更多