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

C++ में बाइनरी मैट्रिक्स की उस पंक्ति की संख्या खोजें जिसमें अधिकतम 1s हों


इस समस्या में, हमें एक बाइनरी मैट्रिक्स दिया गया है जिसमें प्रत्येक पंक्ति सॉर्टेड है। हमारा कार्य बाइनरी मैट्रिक्स की उस पंक्ति की संख्या खोजना है जिसमें अधिकतम संख्या में 1s हों।

आइए एक उदाहरण से इस समस्या को समझते हैं,

इनपुट

binMat[][] = {    1, 1, 1, 1    0, 0, 0, 0    0, 0, 0, 1    0, 0, 1, 1 }

आउटपुट

1

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

इस समस्या का एक सरल समाधान प्रत्येक पंक्ति में कुल 1s की गिनती करना है। और फिर अधिकतम 1 काउंट वाली पंक्ति संख्या वापस करना है।

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम,

उदाहरण

#include <iostream> using namespace std; #define R 4 #define C 4 int findMax1Row(bool mat[R][C]) {    int max1Row = 0, max1Count = -1;    int i, index;    for (i = 0; i < R; i++) {       int oneCount = 0;       for(int j = 0; j < C; j++){          if(mat[i][j])             oneCount++;       }       if(oneCount > max1Count){          max1Count = oneCount;          max1Row = i;       }    }    return (max1Row + 1); } int main() {    bool mat[R][C] = {       {0, 1, 1, 1},       {0, 0, 1, 1},       {0, 0, 0, 1},       {0, 0, 0, 0}    };    cout<<"The number of row with maximum number of 1's is "<<findMax1Row(mat);    return 0; }

आउटपुट

The number of row with maximum number of 1's is 1 एक बेहतर समाधान प्रत्येक पंक्ति पर बाइनरी सर्च का उपयोग करके पंक्ति में 1 की पहली घटना को ढूंढना हो सकता है। पंक्ति में 1s की संख्या पंक्ति आकार - पहली 1 के इंडेक्स का उपयोग करके पाई जा सकती है। इसका उपयोग करके, हम प्रत्येक पंक्ति में 1s की संख्या ढूंढ सकते हैं और फिर अधिकतम 1s वाली पंक्ति वापस कर सकते हैं।

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम,

उदाहरण

#include <iostream> using namespace std; #define R 4 #define C 4 int binarySearch1Row(bool arr[], int start, int end) {    if(end >= start) {       int mid = start + (end - start)/2;       if ( ( mid == 0 || arr[mid-1] == 0) && arr[mid] == 1)          return mid;       else if (arr[mid] == 0)          return binarySearch1Row(arr, (mid + 1), end);       else          return binarySearch1Row(arr, start, (mid -1));    }    return -1; } int findMax1Row(bool mat[R][C]) {    int max1Row = 0, max1Count = -1;    int i, index;    for (i = 0; i < R; i++) {       index = binarySearch1Row(mat[i], 0, C-1);       if (index != -1 && ( C-index) > max1Count) {          max1Count = C - index;          max1Row = i;       }    }    return (max1Row + 1); } int main() {    bool mat[R][C] = {       {0, 1, 1, 1},       {0, 0, 1, 1},       {0, 0, 0, 1},       {0, 0, 0, 0}    };    cout<<"The number of row with maximum number of 1's is "<<findMax1Row(mat);    return 0; }

आउटपुट

The number of row with maximum number of 1's is 1

उपरोक्त दृष्टिकोण में एक अनुकूलन जोड़ा जा सकता है यह जांचना कि क्या वर्तमान पंक्ति में पिछली पंक्ति से अधिक 1s हैं, पहली 1 के इंडेक्स का उपयोग करके। यदि इसमें अधिक 1s हैं तो बाइनरी सर्च करें लेकिन 0 से पिछली पंक्ति में पहली 1 के इंडेक्स तक।

यह वर्तमान से कम 1s वाली पंक्ति में 1s की संख्या की गणना के ओवरहेड को बचाएगा।

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम,

उदाहरण

#include <iostream> using namespace std; #define R 4 #define C 4 int binarySearch1Row(bool arr[], int start, int end) {    if(end >= start) {       int mid = start + (end - start)/2;       if ( ( mid == 0 || arr[mid-1] == 0) && arr[mid] == 1)          return mid;       else if (arr[mid] == 0)          return binarySearch1Row(arr, (mid + 1), end);       else          return binarySearch1Row(arr, start, (mid -1));    }    return -1; } int findMax1Row(bool mat[R][C]) {    int i, index;    int max1Row = 0;    int max1Count = binarySearch1Row(mat[0], 0, C - 1);    for (i = 1; i < R; i++){       if (max1Count != -1 && mat[i][C - max1Count - 1] == 1) {          index = binarySearch1Row (mat[i], 0, C - max1Count);          if (index != -1 && C - index > max1Count) {             max1Count = C - index;             max1Row = i;          }       }       else       max1Count = binarySearch1Row(mat[i], 0, C - 1);    }    return (max1Row + 1); } int main() {    bool mat[R][C] = {       {0, 1, 1, 1},       {0, 0, 0, 1},       {0, 0, 1, 1},       {0, 0, 0, 0}    };    cout<<"The number of row with maximum number of 1's is "<<findMax1Row(mat);    return 0; }

आउटपुट

The number of row with maximum number of 1's is 1

  1. C++ में अधिकतम मोड़ों वाला पथ लंबाई C++ में अधिकतम मोड़ों वाला पथ लंबाई

    एक समस्या को हल करने के लिए जिसमें हमें एक बाइनरी ट्री दिया गया है। अब हमें अधिकतम संख्या में मोड़ों वाला पथ खोजने की आवश्यकता है। यानी, एक मोड़ तब माना जाता है जब पथ की दिशा बाएं से दाएं या इसके विपरीत बदलती है, उदाहरण के लिएइनपुट -आउटपुट -6अब इस दृष्टिकोण में, हम ट्री को पार करेंगे और पिछली गतिविध

  1. C++ में बाइनरी ट्री में अधिकतम स्तर योग खोजें C++ में बाइनरी ट्री में अधिकतम स्तर योग खोजें

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है जिसमें सकारात्मक और नकारात्मक मान हैं। हमारा कार्य बाइनरी ट्री में अधिकतम स्तर योग खोजना है। समस्या विवरण: हमारे पास एक बाइनरी ट्री है, हम बाइनरी ट्री में सभी स्तरों का योग खोजेंगे और फिर उनमें से अधिकतम लौटाएंगे।एक उदाहरण लेकर समस्या को समझते

  1. C++ में बाइनरी ट्री में अधिकतम (या न्यूनतम) मान ढूंढें C++ में बाइनरी ट्री में अधिकतम (या न्यूनतम) मान ढूंढें

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है। हमारा कार्य बाइनरी ट्री में अधिकतम (या न्यूनतम) मान ढूंढना है। समस्या विवरण: हमें बाइनरी ट्री के उन नोड्स को ढूंढना है जिनका मान बाइनरी ट्री में अधिकतम और न्यूनतम है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट: आउटपुट: max = 9 , min = 1 समाधान