एक आइटम को पीक एलिमेंट कहा जाता है जब वह अपने चारों पड़ोसियों से बड़ा या बराबर होता है। पड़ोसी तत्व शीर्ष, नीचे, बाएँ और दाएँ तत्व हैं। इस समस्या के लिए, हम कुछ सीमाएँ मानते हैं। विकर्ण तत्वों को पड़ोसी तत्वों के रूप में नहीं जाँचा जाता है। एक मैट्रिक्स में एक से अधिक पीक एलिमेंट हो सकते हैं, और पीक एलिमेंट आवश्यक रूप से मैट्रिक्स का सबसे बड़ा तत्व नहीं होता है।
इनपुट और आउटपुट
इनपुट: विभिन्न संख्याओं का एक मैट्रिक्स। 10 8 10 10 14 13 12 11 15 9 11 11 15 9 11 21 16 17 19 20 आउटपुट: मैट्रिक्स का पीक एलिमेंट। यहाँ पीक एलिमेंट है: 21
एल्गोरिदम
findMaxMid(rows, mid, max)
इनपुट: मैट्रिक्स की पंक्तियों की संख्या, मध्य पंक्ति, आउटपुट तर्क के रूप में एक अधिकतम तत्व।
आउटपुट: अधिकतम आइटम और अधिकतम तत्व के सूचकांक को अपडेट करें।
शुरू maxIndex := 0 मैट्रिक्स में सभी पंक्तियों r के लिए, करें यदि max < matrix[i, mid], तो max = matrix[i, mid], maxIndex := r किया maxIndex वापस करें अंत
findPeakElement(rows, columns, mid)
इनपुट: मैट्रिक्स की पंक्ति और स्तंभ, और मध्य पंक्ति स्थान।
आउटपुट: मैट्रिक्स में पीक एलिमेंट।
शुरू maxMid := 0 maxMidIndex := findMaxMid(rows, mid, maxMid) यदि mid पहला या अंतिम स्तंभ है, तो वापस करें maxMid यदि maxMid >= पिछली और अगली पंक्ति के आइटम मध्य स्तंभ के लिए, तो वापस करें maxMid यदि maxMid अपने बाएँ तत्व से कम है, तो res := findPeakElement(rows, columns, mid – mid/2) वापस करें res यदि maxMid अपने दाएँ तत्व से कम है, तो res := findPeakElement(rows, columns, mid + mid/2) वापस करें res अंत
उदाहरण
#include<iostream> #define M 4 #define N 4 using namespace std; int arr[M][N] = { {10, 8, 10, 10}, {14, 13, 12, 11}, {15, 9, 11, 21}, {16, 17, 19, 20} }; int findMaxMid(int rows, int mid, int&max) { int maxIndex = 0; for (int i = 0; i < rows; i++) { //मध्य स्तंभ में अधिकतम तत्व खोजें if (max < arr[i][mid]) { max = arr[i][mid]; maxIndex = i; } } return maxIndex; } int findPeakElement(int rows, int columns, int mid) { int maxMid = 0; int maxMidIndex = findMaxMid(rows, mid, maxMid); if (mid == 0 || mid == columns-1) //पहले और अंतिम स्तंभ के लिए, maxMid अधिकतम है return maxMid; // यदि maxMid भी पीक है if (maxMid >= arr[maxMidIndex][mid-1] && maxMid >= arr[maxMidIndex][mid+1]) return maxMid; if (maxMid < arr[maxMidIndex][mid-1]) // यदि maxMid अपने बाएँ तत्व से कम है return findPeakElement(rows, columns, mid - mid/2); return findPeakElement(rows, columns, mid+mid/2); } int main() { int row = 4, col = 4; cout<< "The peak element is: "<<findPeakElement(row, col, col/2); }
आउटपुट
The peak element is: 21