Conquer Maximum Sum Subarray with Divide & Conquer Algorithm
Esistono molti modi per trovare il sottoarray con la somma massima all’interno di n interi. Uno dei metodi per risolvere il problema consiste nell’utilizzare un algoritmo di tipo divide & conquer (divide et impera). Per affrontare il problema, si suddivide ricorsivamente l’array in due parti, si individua il sottoarray di somma massima nella parte sinistra, nella parte destra e nella parte che attraversa il punto centrale, e si calcola la soluzione per l’array attuale a partire da questi risultati.
Quindi, il pseudocodice per l’algoritmo potrebbe essere:
def max_subarray(a):
# Casi base
if len(a) == 0:
return float('-inf'), float('-inf'), float('-inf')
if len(a) == 1:
return a[0], a[0], a[0]
# Divide (recupera le risposte per la parte sinistra e quella destra)
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:])
# Ottieni 3 valori e restituisci maxi-prefisso, maxi-suffisso e somma massima totale
return conquer(ll, lmax, lr, lsum, rl, rmax, rr, rsum)
In questo problema, ti viene richiesto di implementare la parte conquer, dove, dati 8 numeri, dovrai trovare correttamente 3 valori che rappresentino la migliore somma di prefisso, la somma migliore che attraversa il punto centrale e la migliore somma di suffisso. Gli 8 numeri forniti sono:
La migliore somma di prefisso per il sottoarray sinistro
La somma massima del sottoarray sinistro
La migliore somma di suffisso per il sottoarray sinistro
La somma di tutti i numeri nel sottoarray sinistro
La migliore somma di prefisso per il sottoarray destro
La somma massima del sottoarray destro
La migliore somma di suffisso per il sottoarray destro
La somma di tutti i numeri nel sottoarray destro
Input
L’unica riga di input contiene 8 interi nell’ordine sopra descritto. Tutti gli interi non superano in valore assoluto.
Output
Il programma deve stampare 3 numeri: la migliore somma di prefisso, la migliore somma che attraversa il punto centrale e la migliore somma di suffisso.