Given an n x n matrix, where every row and column is sorted in increasing order. Given a key, how to decide whether this key is in the matrix.
A linear time complexity is discussed in the previous post. This problem can also be a very good example for divide and conquer algorithms. Following is divide and conquer algorithm.
1) Find the middle element.
2) If middle element is same as key return.
3) If middle element is lesser than key then
….3a) search submatrix on lower side of middle element
….3b) Search submatrix on right hand side.of middle element
4) If middle element is greater than key then
….4a) search vertical submatrix on left side of middle element
….4b) search submatrix on right hand side.
Following implementation of above algorithm.
Found 10 at 0 0 Found 20 at 0 1 Found 30 at 0 2 Found 40 at 0 3 Found 15 at 1 0 Found 25 at 1 1 Found 35 at 1 2 Found 45 at 1 3 Found 27 at 2 0 Found 29 at 2 1 Found 37 at 2 2 Found 48 at 2 3 Found 32 at 3 0 Found 33 at 3 1 Found 39 at 3 2 Found 50 at 3 3
We are given a n*n matrix, the algorithm can be seen as recurring for 3 matrices of size n/2 x n/2. Following is recurrence for time complexity
T(n) = 3T(n/2) + O(1)
The solution of recurrence is O(n1.58) using Master Method.
But the actual implementation calls for one submatrix of size n x n/2 or n/2 x n, and other submatrix of size n/2 x n/2.
This article is contributed by Kaushik Lele. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Karatsuba algorithm for fast multiplication using Divide and Conquer algorithm
- Merge K sorted arrays | Set 3 ( Using Divide and Conquer Approach )
- Closest Pair of Points using Divide and Conquer algorithm
- Maximum Subarray Sum using Divide and Conquer algorithm
- Tiling Problem using Divide and Conquer algorithm
- The Skyline Problem using Divide and Conquer algorithm
- Longest Common Prefix using Divide and Conquer Algorithm
- Convex Hull using Divide and Conquer Algorithm
- Merge K sorted arrays of different sizes | ( Divide and Conquer Approach )
- Divide and Conquer Algorithm | Introduction
- Frequency of an integer in the given array using Divide and Conquer
- Maximum Sum SubArray using Divide and Conquer | Set 2
- Divide and Conquer | Set 5 (Strassen's Matrix Multiplication)
- Advanced master theorem for divide and conquer recurrences
- Dynamic Programming vs Divide-and-Conquer
- Generate a random permutation of elements from range [L, R] (Divide and Conquer)
- Sum of maximum of all subarrays | Divide and Conquer
- Decrease and Conquer
- Search equal, bigger or smaller in a sorted array in Java
- Search element in a sorted matrix