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

सी ++ में सभी समान तत्वों के साथ अधिकतम वर्ग उप-मैट्रिक्स ढूँढना

इस समस्या में, हमें एक N*N मैट्रिक्स मैट [] दिया जाता है। हमारा काम है सभी समान तत्वों के साथ अधिकतम वर्ग उप-मैट्रिक्स ढूँढना

इस समस्या में, हमें दिए गए मैट्रिक्स से एक उप-मैट्रिक्स का अधिकतम आकार खोजने की आवश्यकता है, जिसके सभी तत्व समान हैं।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

Input: mat[][] = {{1, 2, 1}, {1, 2, 2}, {2, 2, 2}}
Output: 2

स्पष्टीकरण -

matrix a11, a12, a21, a22 is of size 2X2 and forms a sub-matrix with all equal elements.

समाधान दृष्टिकोण

समस्या का एक सरल समाधान मैट्रिक्स के सभी तत्वों का पता लगाना है और फिर उन सभी उप-मैट्रिसेस की जांच करना है जिनमें समान तत्व हैं। एल्गोरिथम की समय जटिलता O(n 3 .) है ) और प्रत्येक उप-मैट्रिक्स O(n 2 . की समय जटिलता के साथ बनाया गया है )।

एक वैकल्पिक तरीका समस्या को हल करने के लिए गतिशील प्रोग्रामिंग का उपयोग किया जा रहा है जहां हम सब-मैट्रिक्स के सबसे बड़े आकार को सभी तत्वों के साथ स्थिति तक स्टोर करेंगे। इसके लिए हम पड़ोसी तत्वों पर विचार करेंगे और फिर दी गई शर्त को पूरा करने वाले सबसे लंबे मैट्रिक्स पर विचार करेंगे। आइए डीपी मैट्रिक्स के किसी भी सेल की चौड़ाई तैयार करें।

यदि तत्वों के सभी पड़ोसी समान हैं, तो हम सबसे लंबे उप-मैट्रिक्स के मूल्यों में वृद्धि करेंगे। इस मामले में,

$DP[i][j]\:=\:min(DP[i-1][j] , DP[i][j-1], DP[i-1][j-1]) + 1$

अगर ऐसा नहीं है,

डीपी[i][j] =1

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#include<bits/stdc++.h>
#define n 4
#define m 4
using namespace std;
int findmaxSqMatSize(int mat[][m]){
   int DP[n][m];
   memset(DP, sizeof(DP), 0);
   int maxSqMatSize = 0;
   for (int i = 0 ; i < n ; i++){
      for (int j = 0 ; j < m ; j++){
         if (i == 0 || j == 0)
            DP[i][j] = 1;
         else{
            if (mat[i][j] == mat[i-1][j] && mat[i][j] == mat[i][j-1] && mat[i][j] == mat[i-1][j-1] )
               DP[i][j] = min(min(DP[i-1][j], DP[i][j-1]), DP[i-1][j-1] ) + 1;
            else DP[i][j] = 1;
         }
         maxSqMatSize = max(maxSqMatSize, DP[i][j]);
      }
   }
   return maxSqMatSize;
}
int main(){
   int mat[n][m] = { {2, 1, 4, 3},
   {5, 1, 1, 7},
   {1, 1, 1, 4},
   {9, 4, 6, 0}};
   cout<<"The maximum square sub-matrix with all equal elements is "<<findmaxSqMatSize(mat);
   return 0;
}

आउटपुट

The maximum square sub-matrix with all equal elements is 2

  1. C++ में सभी गहरे नोड्स के साथ सबसे छोटा सबट्री

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है जिसकी जड़ें जड़ में हैं, प्रत्येक नोड की गहराई जड़ से सबसे छोटी दूरी है। यहां एक नोड सबसे गहरा है यदि पूरे पेड़ में किसी भी नोड के बीच इसकी सबसे बड़ी गहराई संभव है। एक नोड का उपप्रकार वह नोड है, साथ ही उस नोड के सभी वंशजों का समूह। हमें नोड को सबसे बड़ी गहराई

  1. C++ में न्यूनतम और अधिकतम तत्वों को छोड़कर आकार K के सभी बाद के उत्पादों का उत्पाद

    एक सरणी एआर [एन] दिया गया है, जिसमें n पूर्णांकों की संख्या और आकार को परिभाषित करने के लिए एक पूर्णांक k है; कार्य न्यूनतम और अधिकतम तत्वों को छोड़कर आकार k के सभी बाद के उत्पादों के उत्पाद को प्रिंट करना है। आइए मान लें कि हमारे पास 4 तत्वों का एक सेट है {1, 2, 3, 4} और k 2 के रूप में इसलिए इसके

  1. सभी सरणी तत्वों को C++ में समान बनाने के लिए आवश्यक न्यूनतम संचालन

    समस्या कथन n धनात्मक पूर्णांकों वाली एक सरणी को देखते हुए। हमें सभी तत्वों को समान बनाने के लिए न्यूनतम संख्या में ऑपरेशन खोजने की आवश्यकता है। हम सरणी तत्व पर किसी भी तत्व के साथ जोड़, गुणा, घटाव या भाग कर सकते हैं। उदाहरण यदि इनपुट ऐरे ={1, 2, 3, 4} है तो हमें सभी तत्वों को समान बनाने के लिए न्य