Առավելագույն գումարով ենթազանգվածը (maximum sum subarray) n ամբողջ թվերով գտնելու բազմաթիվ եղանակներ կան։ Այդ խնդիրի լուծման մեկ տարբերակն էլ «Բաժանիր և տիրիր» (Divide & Conquer) ալգորիթմի կիրառումն է։ Խնդիրը լուծելու համար զանգվածը ռեկուրսիվ ձևով բաժանում են երկու մասի, գտնում են առավելագույն գումարի ենթազանգվածը ձախ մասի, աջ մասի և այն մասի համար, որը հատում է միջին հատվածը, ապա դրանք համադրելով հաշվում են ամբողջ զանգվածի առավելագույն ենթազանգվածը։
Ստորև բերված է ալգորիթմի պսևդոքոդի մի օրինակ.
def max_subarray(a):
# Հիմնական դեպքեր
if len(a) == 0:
return float('-inf'), float('-inf'), float('-inf')
if len(a) == 1:
return a[0], a[0], a[0]
# Բաժանում (ձախ և աջ մասերի արդյունքների ստացում)
ll, lmax, lr = max_subarray(a[:len(a) // 2])
rl, rmax, rr = max_subarray(a[len(a) // 2:])
lsum = sum(a[:len(a) // 2])
rsum = sum(a[len(a) // 2:])
# Վերցնել 3 թվերը և վերադարձնել առավելագույն պրեֆիքս-գումարը, առավելագույն սաֆիքս-գումարը և ընդհանուր առավելագույն գումարը
return conquer(ll, lmax, lr, lsum, rl, rmax, rr, rsum)
Այս խնդրում ձեզ խնդրում են գրել conquer հատվածը, որտեղ տրված 8 թվից անհրաժեշտ է գտնել 3 արժեք, որոնք ներկայացնում են լավագույն պրեֆիքս-գումարը, միջին կետով հատող լավագույն գումարը և լավագույն սաֆիքս-գումարը։ 8 թվերը տրված են հետևյալ հերթականությամբ.
Ձախ ենթազանգվածի լավագույն պրեֆիքս-գումարը
Ձախ ենթազանգվածի առավելագույն գումարը
Ձախ ենթազանգվածի լավագույն սաֆիքս-գումարը
Ձախ ենթազանգվածի բոլոր թվերի գումարը
Աջ ենթազանգվածի լավագույն պրեֆիքս-գումարը
Աջ ենթազանգվածի առավելագույն գումարը
Աջ ենթազանգվածի լավագույն սաֆիքս-գումարը
Աջ ենթազանգվածի բոլոր թվերի գումարը
Մուտք
Մուտքի միակ տողը պարունակում է 8 ամբողջ թիվ, տրված վերոնշյալ հերթականությամբ։ Բոլոր թվերը չեն գերազանցում -ը բացարձակ արժեքով։
Ելք
Ծրագիրը պետք է տպի 3 թիվ՝ լավագույն պրեֆիքս-գումարը, միջին կետով հատող լավագույն գումարը և լավագույն սաֆիքս-գումարը։