Algorithm 如何在子矩阵中求最大异或?

Algorithm 如何在子矩阵中求最大异或?,algorithm,Algorithm,例如,给定3 x 3矩阵 1 2 3 4 5 6 7 8 9 最大异或值=15 子矩阵 2 5 8 这就是索引为1的列矩阵 对于1D阵列,trie是一种可能的方法,但无法想到任何可以用于快速异或计算和更新的2D阵列方法。段树是另一种可以使用的结构。它具有相似的特性,但使用更多的内存。这两种方法都可以用于一维数组情况。加速蛮力的一种方法尝试所有可能的方法是找到一种计算任意子矩阵结果的方法,而无需将其所有元素异或在一起。如果您准备一个表,其中T(x,y)处

例如,给定3 x 3矩阵

   1 2 3
   4 5 6
   7 8 9
最大异或值=15 子矩阵

   2 
   5 
   8
这就是索引为1的列矩阵


对于1D阵列,trie是一种可能的方法,但无法想到任何可以用于快速异或计算和更新的2D阵列方法。段树是另一种可以使用的结构。它具有相似的特性,但使用更多的内存。这两种方法都可以用于一维数组情况。

加速蛮力的一种方法尝试所有可能的方法是找到一种计算任意子矩阵结果的方法,而无需将其所有元素异或在一起。如果您准备一个表,其中T(x,y)处的条目是所有元素(i,j)的异或,其中i是一个正解,则可以执行此操作

  • 枚举所有可能的行范围(上限和下限)

  • 对于每个范围,将该范围内的行垂直相加为一行。 假设我们正在处理问题中的示例,我们试图在从第2行开始到第3行结束的子矩阵中找到最大xor。 然后我们可以垂直地将
    456
    789
    相加到

    4异或7 5异或8 6异或9=3 13 15

  • 使用1D阵列的算法。在这个例子中,我们可以发现
    7 8 9
    的最大异或和是15,它表示子矩阵

    6
    9
    

  • 这将是一个O(n^3log(max value))解决方案。

    该解决方案的预期复杂性是什么?O(n^2)比n^3 log n更好。你能解释一下你的方法吗?与莫涛的答案相同。Trie算法??你能详细说明一下垂直求和吗?max xor可能不需要所有的垂直元素。@rohit1248我添加了一个例子。对于ref,你不认为它对评估所有的可能性效率很低吗?@rohit1248我想知道一个更好的答案。我甚至想看到更好的答案。我想说的是,这比以显而易见的方式评估所有可能性要便宜,在这种方式中,将每个子矩阵中的所有元素异或在一起。