जब केडेन के एल्गोरिदम का उपयोग करके मैक्सिमम सबएरे खोजना हो, तो एक विधि परिभाषित की जाती है जो सबएरे का मैक्सिमम खोजने में मदद करती है। इटरेटर्स का उपयोग मैक्सिमम सबएरे को ट्रैक करने के लिए किया जाता है।
उदाहरण
def find_max_sub_array(my_list, beg, end):
max_end_at_i = max_seen_till_now = my_list[beg]
max_left_at_i = max_left_till_now = beg
max_right_till_now = beg + 1
for i in range(beg + 1, end):
if max_end_at_i > 0:
max_end_at_i += my_list[i]
else:
max_end_at_i = my_list[i]
max_left_at_i = i
if max_end_at_i > max_seen_till_now:
max_seen_till_now = max_end_at_i
max_left_till_now = max_left_at_i
max_right_till_now = i + 1
return max_left_till_now, max_right_till_now, max_seen_till_now
my_list = input('संख्याओं की सूची दर्ज करें... ')
my_list = my_list.split()
my_list = [int(x) for x in my_list]
beg, end, max_val = find_max_sub_array(my_list, 0, len(my_list))
print('अधिकतम सबएरे इंडेक्स {} से शुरू होता है, इंडेक्स {} पर समाप्त होता है और इसका योग {} है।'.format(beg, end - 1, max_val))
आउटपुट
संख्याओं की सूची दर्ज करें... 2 5 7 12 6 8 अधिकतम सबएरे इंडेक्स 0 से शुरू होता है, इंडेक्स 5 पर समाप्त होता है और इसका योग 40 है।
व्याख्या
'find_max_sub_array' नामक एक विधि परिभाषित की जाती है जो तीन पैरामीटर लेती है।
दिए गए रेंज के भीतर मैक्सिमम सबएरे खोजा जाता है।
यह एक टपल लौटाता है जहां मैक्सिमम सबएरे के बाएं, दाएं इंडेक्स इसके योग के साथ लौटाए जाते हैं।
इंडेक्स i पर समाप्त होने वाले मैक्सिमम सबएरे पर नजर रखने के लिए एक लूप का उपयोग किया जाता है।
यह सभी सबएरे का मैक्सिमम है।
विधि लूप के बाएं और दाएं इंडेक्स के माध्यम से पुनरावृति करते हुए अब तक देखे गए सबएरे के मैक्सिमम योग का भी ट्रैक रखती है।
विधि के बाहर, संख्याओं की सूची उपयोगकर्ता द्वारा इनपुट के रूप में ली जाती है।
इसे पैरामीटर के रूप में विधि को पास किया जाता है।
इसे कंसोल पर आउटपुट के रूप में प्रदर्शित किया जाता है।