行列Aは、行と列でソートされます。ここで、A [i] [j] <A [i] [j+1]およびA[i][j] <A [i +1][j]です。追加情報は、各行の最初の要素が前の行の最後の要素よりも小さいことです。次に例を示します。
⎡1 3 5 17⎤
⎢2 4 6 18⎥
⎣7 9 11 20⎦
そして、この追加情報がO(lgn)の複雑さを決定する上でどのような役割を果たしているのか混乱しています。
私は次のようにO(m)+ O(n)を思い付くことができます:
int search(int mat[4][4], int n, int x)
{
int i = 0, j = n-1; //set indexes for top right element
while ( i < n && j >= 0 )
{
if ( mat[i][j] == x )
{
printf("\n Found at %d, %d", i, j);
return 1;
}
if ( mat[i][j] > x )
j--;
else // if mat[i][j] < x
i++;
}
printf("\n Element not found");
return 0; // if ( i==n || j== -1 )
}
しかし、私は情報を使用したとは思いません。各行の最初の要素は、前の行の最後の要素よりも小さいです。
誰かplzは私にいくつかのヒントを与えることができますか?さらに、これは宿題ではありません。ありがとうございました!