Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में 2D मैट्रिक्स खोजें

मान लीजिए कि हमने एक m x n मैट्रिक्स में मान की खोज करने के लिए एक कुशल एल्गोरिदम लिखा है। इस मैट्रिक्स में नीचे की तरह कुछ गुण हैं -

  • प्रत्येक पंक्ति को बाएं से दाएं क्रमबद्ध किया जाता है
  • प्रत्येक पंक्ति की पहली संख्या पिछली पंक्ति के अंतिम पूर्णांक से अधिक है।

तो अगर मैट्रिक्स की तरह है -

1 3 5 7
10 11 16 20
23 30 34 50
53 62 78 98

और अगर टारगेट वैल्यू 16 है, तो आउटपुट ट्रू होगा।

आइए चरणों को देखें -

  • n:=पंक्तियों की संख्या, यदि n 0 है, तो झूठी वापसी करें, m:=स्तंभों की संख्या, यदि m =0, तो झूठी वापसी करें
  • निम्न :=0 और उच्च :=n – 1
  • जबकि कम <उच्च
    • मध्य :=निम्न + (उच्च - निम्न + 1)/2
    • यदि चटाई[मध्य, 0] <=लक्ष्य, तो निम्न :=मध्य, अन्यथा उच्च :=मध्य - 1
  • rlow :=0 और rhigh :=m – 1 and ans :=0
  • जबकि rlow <=rhigh
    • मध्य :=rlow + (rhigh - rlow)/2
    • अगर मैट [कम, मध्य] =लक्ष्य, तो उत्तर:=1, और लूप तोड़ें
    • अन्यथा जब मैट्रिक्स [निम्न, मध्य] <लक्ष्य, फिर पंक्ति:=मध्य + 1
    • else rhigh :=मध्य - 1
  • वापसी उत्तर

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
   public:
   bool searchMatrix(vector<vector<int>>& matrix, int target) {
      lli n,m;
      n = matrix.size();
      if(!n)return false;
      m = matrix[0].size();
      if(!m)return false;
      lli low = 0, high = n-1;
      while(low<high){
         lli mid = low + ( high - low +1)/2;
         if(matrix[mid][0]<=target)low = mid;
         else high = mid -1;
      }
      lli rlow = 0, rhigh = m-1;
      lli ans = 0;
      while(rlow<=rhigh){
         lli mid = rlow+(rhigh - rlow)/2;
         if(matrix[low][mid] == target){
            ans =1;
            break;
         }else if(matrix[low][mid]<target)rlow=mid+1;
         else rhigh= mid-1;
      }
      return ans;
   }
};
main(){
   Solution ob;
   vector<vector<int>> v = {{1,3,5,7},{10,11,16,20},{23,30,34,50},{53,62,78,98}};
   cout << ob.searchMatrix(v, 16);
}

इनपुट

[[1,3,5,7],[10,11,16,20],[23,30,34,50],[53,62,78,98]]
16

आउटपुट

1

  1. C++ में मैट्रिक्स की पंक्ति-वार बनाम स्तंभ-वार ट्रैवर्सल

    एक मैट्रिक्स को दो तरह से ट्रेस किया जा सकता है। रो-माइस ट्रैवर्सल पहली पंक्ति से शुरू होकर दूसरी और इसी तरह अंतिम पंक्ति तक एक-एक करके प्रत्येक पंक्ति का दौरा करता है। पंक्ति में तत्वों को सूचकांक 0 से अंतिम सूचकांक में लौटाया जाता है। कॉलम-वार ट्रैवर्सल में, तत्वों को पहले कॉलम से अंतिम कॉलम तक क

  1. C++ में बाइनरी सर्च ट्री पुनर्प्राप्त करें

    मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री है, अब इस बीएसटी के दो तत्वों की अदला-बदली पर विचार करें, इसलिए हमें इस बाइनरी सर्च ट्री को पुनर्प्राप्त करना होगा। तो अगर दिया गया पेड़ नीचे जैसा है (पहला वाला), तो बरामद पेड़ होगा (दूसरा वाला) - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - नोड्

  1. सी ++ प्रोग्राम में बाइनरी सर्च?

    द्विआधारी खोज, जिसे अर्ध-अंतराल खोज, लॉगरिदमिक खोज या बाइनरी चॉप के रूप में भी जाना जाता है, एक खोज एल्गोरिथ्म है जो एक क्रमबद्ध सरणी के भीतर लक्ष्य मान की स्थिति का पता लगाता है। बाइनरी खोज लक्ष्य मान की तुलना सरणी के मध्य तत्व से करती है। यदि वे समान नहीं हैं, तो आधा जिसमें लक्ष्य झूठ नहीं बोल सकत