给出了在所有三维中排序的三维矩阵,我们必须找到 找到其中的给定数字。在已排序的三维数组中搜索元素
对于上述问题,我一直在想这样的:三维阵列arr[m][n][r]
会像矩形的叠层,其中每个矩形(考虑arr[m][n][0]
)将具有最大的元素作为最低最右边的元件(arr[m-1][n-1][0]
) 。我们可以在每个O(m+n)
矩形内搜索:
int row = 0;
int col = N-1;
while (row < M && col >= 0)
{
if (mat[row][col] == elem)
{
return true;
}
else if (mat[row][col] > elem)
{
col--;
}
else
{
row++;
}
}
我想这也同样可以扩展到第三维,从而使其成为一个线性复杂的解决方案(O(m+n+r)
)。我对吗 ?
有没有人有任何其他想法?什么是复杂性?
你可以可能会在每个维度上连续使用简单的二进制搜索(3x)。这将产生O(log(m)+ log(n)+ log(r))。深度为3的B树在相同的复杂度下基本上会做同样的事情。 – JimmyB 2012-07-21 14:36:15