एरियल नोट के रूप में , मानक अधिकतम-एल्गोरिथ्म नीचे दिया गया है:
def find_maximum(a):
m = a[0]
for x in a:
if x > m: m = x
return m
जब तक संशोधन के बिना वास्तव में काम करेंगे:
- तत्वों की किसी भी जोड़ी की तुलना की जा सकती है, और
- इनपुट में एक अधिकतम तत्व, यानी एक तत्व होता है जो इनपुट में किसी भी अन्य तत्व की तुलना में अधिक बड़ा होता है।
(ऊपर की पहली धारणा वास्तव में आराम कर सकती है, यहां तक कि एल्गोरिथ्म को संशोधित किए बिना भी, जब तक हम यह मान लेते हैं कि अधिकतम तत्व हर दूसरे तत्व के साथ तुलनीय है और x > y
यह हमेशा गलत है अगर तत्व x
और y
अतुलनीय हैं।)
विशेष रूप से, आपका दावा है कि:
[…] एक उत्तर के कुछ होने के लिए, तत्व को स्पष्ट रूप से हर दूसरे तत्व की तुलना में करने की आवश्यकता होती है (क्योंकि तुलनात्मक रूप से तुलनात्मक नहीं है)।
ऊपर दी गई मान्यताओं के तहत सच नहीं है। वास्तव में, यह साबित करने के लिए कि ऊपर दिए गए एल्गोरिदम को हमेशा अधिकतम तत्व मिलेगा, यह देखने के लिए पर्याप्त है:
- चूंकि लूप सभी इनपुट तत्वों पर पुनरावृति करता है, कुछ पुनरावृत्ति
x
में अधिकतम तत्व होगा;
- चूँकि अधिकतम तत्व हर दूसरे तत्व की तुलना में अधिक बड़ा होता है, इसलिए यह उस पुनरावृत्ति के अंत में,
m
अधिकतम तत्व होगा; तथा
- चूँकि कोई भी अन्य तत्व अधिकतम तत्व की तुलना में युग्मक नहीं हो सकता है, यह इस प्रकार है कि
m
बाद के किसी भी पुनरावृत्तियों पर नहीं बदलेगा।
इसलिए, लूप के अंत में, m
हमेशा अधिकतम तत्व होगा, यदि इनपुट में एक है।
Ps। इनपुट है, तो नहीं जरूरी हमेशा एक अधिक से अधिक तत्व शामिल है, तो उस तथ्य वास्तव में सत्यापित करने के लिए कि यह वास्तव में अधिक से अधिक है हर दूसरे तत्व के खिलाफ उम्मीदवार जवाब परीक्षण की आवश्यकता होगी की पुष्टि करने के। हालाँकि, हम अभी भी ओ ( एन ) समय में ऊपर अधिकतम एल्गोरिथ्म चलाने के बाद कर सकते हैं :
def find_maximum_if_any(a):
# step 1: find the maximum, if one exists
m = a[0]
for x in a:
if x > m: m = x
# step 2: verify that the element we found is indeed maximal
for x in a:
if x > m: return None # the input contains no maximal element
return m # yes, m is a maximal element
(मैं यहाँ मान रहा हूँ कि यह संबंध >
अकाट्य है, अर्थात कोई भी तत्व अपने आप से बड़ा नहीं हो सकता है। यदि जरूरी नहीं है कि x > m
चरण 2 में तुलना को बदल दिया जाए x ≠ m and x > m
, जहाँ ≠
पहचान की तुलना को दर्शाता है। या हम केवल अनुकूलन लागू कर सकते हैं। नीचे उल्लेख किया गया।)
एल्गोरिथ्म के इस बदलाव की शुद्धता को साबित करने के लिए, दो संभावित मामलों पर विचार करें:
- यदि इनपुट में एक अधिकतम तत्व है, तो चरण 1 इसे ढूंढेगा (जैसा कि ऊपर दिखाया गया है) और चरण 2 इसकी पुष्टि करेगा।
- इनपुट करता है नहीं एक अधिक से अधिक तत्व होते हैं, तो चरण 1 के रूप में कुछ मनमाने ढंग से तत्व उठा खत्म हो जाएगा
m
। इससे कोई फर्क नहीं पड़ता कि यह कौन सा तत्व है, क्योंकि यह किसी भी मामले में गैर-अधिकतम होगा, और इसलिए चरण 2 यह पता लगाएगा और वापस आ जाएगा None
।
हम के सूचकांक संग्रहीत हैं m
इनपुट सरणी में a
, हम कर सकते थे वास्तव में केवल उन तत्वों को पहले आने की जाँच करने का अनुकूलन चरण 2 m
में a
, किसी भी बाद में तत्वों के बाद से पहले से ही के साथ तुलना में किया गया है m
चरण 1 में लेकिन इस अनुकूलन asymptotic समय जटिलता नहीं बदलता है एल्गोरिथ्म, जो अभी भी हे ( एन ) है।