Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình Python để giải quyết vấn đề mảng con tối đa bằng cách sử dụng Chia và Chinh phục

Khi cần giải quyết vấn đề mảng con tối đa bằng cách sử dụng phương pháp chia và chinh phục,

Dưới đây là minh chứng về điều tương tự -

Ví dụ

def max_crossing_sum(my_array, low, mid, high):

   sum_elements = 0
   sum_left_elements = -10000

   for i in range(mid, low-1, -1):
   sum_elements = sum_elements + my_array[i]

   if (sum_elements > sum_left_elements):
      sum_left_elements = sum_elements

   sum_elements = 0
   sum_right_elements = -1000
   for i in range(mid + 1, high + 1):
      sum_elements = sum_elements + my_array[i]

      if (sum_elements > sum_right_elements):
         sum_right_elements = sum_elements

   return max(sum_left_elements + sum_right_elements, sum_left_elements, sum_right_elements)

def max_sub_array_sum(my_array, low, high):

   if (low == high):
      return my_array[low]

   mid = (low + high) // 2

   return max(max_sub_array_sum(my_array, low, mid), max_sub_array_sum(my_array, mid+1, high), max_crossing_sum(my_array, low, mid, high))

my_list = [23, 12, 45, 67, 89, 11]
list_length = len(my_list)
print("The list is :")
print(my_list)

max_sum = max_sub_array_sum(my_list, 0, list_length-1)
print("The maximum contiguous sum is ")
print(max_sum)

Đầu ra

The list is :
[23, 12, 45, 67, 89, 11]
The maximum contiguous sum is
247

Giải thích

  • Phương thức có tên ‘max_crossing_sum’ được định nghĩa để tính tổng các phần tử ở phần bên trái của danh sách.

  • Điều này đạt được bằng cách sử dụng ‘max_sub_array_sum’ giúp tính tổng của mọi mảng con.

  • Bên ngoài phương thức, một danh sách được xác định và hiển thị trên bảng điều khiển.

  • Độ dài của danh sách được xác định.

  • Phương thức tính tổng mảng con được gọi bằng cách chuyển danh sách này.

  • Tổng được hiển thị dưới dạng đầu ra trên bảng điều khiển