Conteggio del numero di somme da sottoquarti contigui di un array


12

Ci viene dato un array con tutto un [ i ] > 0 .a[1n]a[i]>0

Ora abbiamo bisogno di scoprire quante somme distinte possono essere formate dai suoi sottoarrays (dove un subarray è un intervallo contiguo dell'array, cioè per alcuni j , k , la somma è la somma di tutti i elementi del subarray). Ad esempio, se a = [ 1 , 2 , 1 ] , la risposta è 4: possiamo formare 1 , 2 , 3 , 4 .a[jk]j,ka=[1,2,1]1,2,3,4

So contare il numero di somme distinte nel tempo .O(n2)

Inoltre, ho capito che questo è simile al problema classico in cui dobbiamo trovare il numero di sottostringhe distinte di una stringa. Stavo pensando alla possibilità di costruire un array di suffissi e risolverlo in modo simile (in tempi ). Ma non sono stato in grado di capire come modificarlo per funzionare qui. Ad esempio, se utilizziamo l'array di suffissi per a = [ 1 , 2 , 1 ] otterremo 5 casi invece di quattro accettabili. È possibile farlo utilizzando array di suffissi o sto pensando nella direzione sbagliata?O(n)a=[1,2,1]

Inoltre c'è un'altra direzione in cui ho pensato. Dividi e conquista. Come se divido l'array in due parti ogni volta fino a quando non viene ridotto a un singolo elemento. Un singolo elemento può avere una somma. Ora se combiniamo due singoli elementi, può essere fatto in due modi: se entrambi i singoli intervalli hanno lo stesso elemento, allora otteniamo 2 somme diverse, oppure se entrambi hanno elementi diversi otteniamo 3 somme diverse. Ma non riesco a generalizzare questo per unire matrici di lunghezza maggiore di 1. È possibile unire due matrici di dimensioni m e ottenere la risposta in ?O(m)


O(n lg n)

Suggerirei di iniziare con il seguente problema: quanto è difficile decidere se ci sono due intervalli con la stessa somma? È allettante provare la durezza 3SUM di questo problema, ma finora non sono stato in grado di farlo.
Yuval Filmus,

Risposte:


2

O(n2)Θ(n2)

[1,2,4,8,,2n]n(n+1)2


Il "quasi sicuramente" è dovuto al fatto che il problema non richiede i valori delle somme come output. Tuttavia, non penso che i duplicati possano essere evitati senza determinare almeno la maggior parte dei valori.


Non vedo alcun motivo particolare per cui non dovrebbe esserci un modo per evitare in qualche modo di sfuggire a tutte le possibilità pur trovando la risposta corretta. Gli algoritmi di programmazione dinamica lo fanno abitualmente.
Yuval Filmus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.