अवधारणा
किसी दिए गए एम एक्स एम मैट्रिक्स के संबंध में, समस्या मैट्रिक्स की सभी पंक्तियों के लिए सभी अलग-अलग तत्वों को निर्धारित करना है। तो तत्वों को किसी भी क्रम में प्रदर्शित किया जा सकता है।
इनपुट
mat[][] = { {13, 2, 15, 4, 17},
{15, 3, 2, 4, 36},
{15, 2, 15, 4, 12},
{15, 26, 4, 3, 2},
{2, 19, 4, 22, 15}
} आउटपुट
2 4 15
तरीके
पहला तरीका:तीन नेस्टेड लूप लागू करें। सत्यापित करें कि पहली पंक्ति का कोई तत्व बाद की सभी पंक्तियों में मौजूद है या नहीं। यहाँ, समय जटिलता O(m^3) है। डुप्लिकेट तत्वों को नियंत्रित करने के लिए अतिरिक्त स्थान की आवश्यकता हो सकती है।
दूसरी विधि:बढ़ते क्रम में मैट्रिक्स की सभी पंक्तियों को अलग-अलग व्यवस्थित या क्रमबद्ध करें। इसलिए हम 3 क्रमबद्ध सरणियों में सामान्य तत्वों को निर्धारित करने की समस्या के एक संशोधित दृष्टिकोण को लागू करते हैं। उसी के लिए एक कार्यान्वयन के बाद दिया गया है।
उदाहरण
// C++ implementation to find distinct elements
// common to all rows of a matrix
#include <bits/stdc++.h>
using namespace std;
const int MAX1 = 100;
// Shows function to individually sort
// each row in increasing order
void sortRows1(int mat1[][MAX1], int m){
for (int i=0; i<m; i++)
sort(mat1[i], mat1[i] + m);
}
// Shows function to find all the common elements
void findAndPrintCommonElements1(int mat1[][MAX1], int m){
//Used to sort rows individually
sortRows1(mat1, m);
// Shows current column index of each row is stored
// from where the element is being searched in
// that row
int curr_index1[m];
memset(curr_index1, 0, sizeof(curr_index1));
int f = 0;
for (; curr_index1[0]<m; curr_index1[0]++){
//Indicates value present at the current column index
// of 1st row
int value1 = mat1[0][curr_index1[0]];
bool present1 = true;
//Indicates 'value' is being searched in all the
// subsequent rows
for (int i=1; i<m; i++){
// Used to iterate through all the elements of
// the row from its current column index
// till an element greater than the 'value'
// is found or the end of the row is
// encountered
while (curr_index1[i] < m &&
mat1[i][curr_index1[i]] <= value1)
curr_index1[i]++;
// Now if the element was not present at the column
// before to the 'curr_index' of the row
if (mat1[i][curr_index1[i]-1] != value1)
present1 = false;
// Now if all elements of the row have
// been traversed
if (curr_index1[i] == m){
f = 1;
break;
}
}
// Now if the 'value' is common to all the rows
if (present1)
cout << value1 << " ";
// Now if any row have been completely traversed
// then no more common elements can be found
if (f == 1)
break;
}
}
// Driver program to test above
int main(){
int mat1[][MAX1] = { {13, 2, 15, 4, 17},{15, 3, 2, 4, 36},{15, 2, 15, 4, 12},
{15, 26, 4, 3, 2},{2, 19, 4, 22, 15}};
int m = 5;
findAndPrintCommonElements1(mat1, m);
return 0;
} आउटपुट
2 4 15