給出了在所有三維中排序的三維矩陣,我們必須找到 找到其中的給定數字。在已排序的三維數組中搜索元素
對於上述問題,我一直在想這樣的:三維陣列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