Difference between revisions of "TADM2E 4.35"

From Algorithm Wiki
Jump to: navigation, search
(Recovering wiki)
 
(Recovering wiki)
Line 1: Line 1:
<math>O(n+m)</math> is necessary and sufficient.
+
<math>O(n+m)</math> is necessary and sufficient.
 
Lower bound comes from potentially independent values along second diagonal --
 
Lower bound comes from potentially independent values along second diagonal --
 
upper bound comes from observing that we can eliminate either a row or a
 
upper bound comes from observing that we can eliminate either a row or a
Line 9: Line 9:
 
Point* findPosition(int key) {
 
Point* findPosition(int key) {
 
   int row = 0, col = m-1;
 
   int row = 0, col = m-1;
   while (row &lt; n &amp;&amp; col &gt;= 0) {
+
   while (row < n && col >= 0) {
 
     if (M[row][col] == key) {
 
     if (M[row][col] == key) {
 
         return new Point(row,col);         
 
         return new Point(row,col);         
 
     }
 
     }
     else if (M[row][col] &gt; key) {
+
     else if (M[row][col] > key) {
 
         col--;
 
         col--;
 
     }
 
     }

Revision as of 18:23, 11 September 2014

$ O(n+m) $ is necessary and sufficient. Lower bound comes from potentially independent values along second diagonal -- upper bound comes from observing that we can eliminate either a row or a column in each comparison if we start from the lower left corner and walk up or left.

Having M[0..n-1][0..m-1] and a struct Point {int x, int y}, we could have the following solution:

Point* findPosition(int key) {

 int row = 0, col = m-1;
 while (row < n && col >= 0) {
    if (M[row][col] == key) {
       return new Point(row,col);         
    }
    else if (M[row][col] > key) {
       col--;
    }
    else row++; 
 }
 return NULL;

}