এই সমস্যার প্রাইমিটিভ সমাধান হলো ইনপুট ম্যাট্রিক্সে সংরক্ষিত সব এলিমেন্ট স্ক্যান করে দেয়া কী খোঁজা। এই লিনিয়ার সার্চ অপ্রোচের খরচ O(MN) টাইম যদি ম্যাট্রিক্সের সাইজ MxN হয়।
ম্যাট্রিক্সকে একটি সর্টেড वन-ডাইমেনশনাল অ্যারে হিসেবে দেখা যায়। যদি ইনপুট ম্যাট্রিক্সের সকল রো টপ-ডাউন অর্ডারে কনক্যাটেনেট করা হয়, তবে এটি একটি সর্টেড वन-ডাইমেনশনাল অ্যারে বানাবে। এবং সেক্ষেত্রে বাইনারি সার্চ অ্যালগরিদম এই 2D অ্যারের জন্য উপযোগী। নিচের কোডটি SearchRowwiseColumnWiseMatrix ফাংশনটি ডেভেলপ করে যা টু-ডাইমেনশনাল অ্যারে এবং সার্চ কী ইনপুট হিসেবে নেয় এবং সাফল্য বা ব্যর্থতার উপর ভিত্তি করে true বা false রিটার্ন করে।
উদাহরণ
public class Matrix{ public bool SearchRowwiseColumnWiseMatrix(int[,] mat, int searchElement){ int col = getMatrixColSize(mat); int start = 0; int last = mat.Length - 1; while (start <= last){ int mid = start + (last - start) / 2; int mid_element = mat[mid / col, mid % col]; if (searchElement == mid_element){ return true; } else if (searchElement < mid_element){ last = mid - 1; } else{ start = mid + 1; } } return false; } private int getMatrixRowSize(int[,] mat){ return mat.GetLength(0); } private int getMatrixColSize(int[,] mat){ return mat.GetLength(1); } } static void Main(string[] args){ Matrix m = new Matrix(); int[,] mat = new int[3, 4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } }; Console.WriteLine(m.SearchRowwiseColumnWiseMatrix(mat, 11)); }আউটপুট
TRUE