2 डी स्थानीय अधिकतम
इनपुट: 2-आयामी सरणी एn × nए
आउटपुट: एक स्थानीय अधिकतम - एक जोड़ी ऐसा है कि A [ i , j ] के पास सरणी में कोई पड़ोसी सेल नहीं है जिसमें कड़ाई से बड़ा मान होता है। ( i , j )A [ i , j ]
(पड़ोसी कोशिकाएँ हैं जो सरणी में मौजूद हैं। इसलिए, उदाहरण के लिए, यदि ए हैA[i,j+1],A[i,j−1],A[i−1,j],A[i+1,j]A
0324125033014113
फिर प्रत्येक बोल्ड सेल एक स्थानीय अधिकतम है। प्रत्येक गैर-खाली सरणी में कम से कम एक स्थानीय अधिकतम होता है।
कलन विधि। एक -टाइम एल्गोरिथ्म है: बस प्रत्येक सेल की जांच करें। यहां एक तेज, पुनरावर्ती एल्गोरिदम के लिए एक विचार है।O(n2)
को देखते हुए , मध्य स्तंभ में कोशिकाओं और मध्य पंक्ति में कोशिकाओं से मिलकर क्रॉस एक्स को परिभाषित करें । पहले एक्स में प्रत्येक सेल को यह देखने के लिए जांचें कि सेल ए में अधिकतम स्थानीय है या नहीं । यदि हां, तो ऐसी सेल लौटाएं। अन्यथा, चलो ( i , j ) अधिकतम मान के साथ X में एक सेल हो । के बाद से ( मैं , जे ) नहीं एक स्थानीय अधिकतम है, यह एक पड़ोसी सेल होना आवश्यक है ( मैं ' , जे ' ) बड़े मूल्य के साथ।AXXA(i,j)X(i,j)(i′,j′)
A∖XAX(i′,j′)A′
A′A
(i′,j′)A′A′(i′,j′)⋄
एल्गोरिथ्म खुद को पुन: पर कॉल करता हैn2×n2A′(i,j)
T(n)n×nT(n)=T(n/2)+O(n)T(n)=O(n)
इस प्रकार, हमने निम्नलिखित प्रमेय को सिद्ध किया है:
O(n)n×n
या हमारे पास है?