Zählung der Anzahl der Summen aus benachbarten Unterfeldern eines Feldes


12

Wir erhalten ein Array mit allen a [ i ] > 0 .ein[1n]ein[ich]>0

Nun müssen wir herausfinden, wie viele verschiedene Summen aus ihren Subarrays gebildet werden können (wobei ein Subarray ein zusammenhängender Bereich des Arrays ist, dh für einige j , k , die Summe ist die Summe aller Elemente des Subarrays). Wenn beispielsweise a = [ 1 , 2 , 1 ] ist , lautet die Antwort 4: Wir können 1 , 2 , 3 , 4 bilden .ein[jk]j,kein=[1,2,1]1,2,3,4

Ich weiß, wie man die Anzahl verschiedener Summen in .Ö(n2)

Darüber hinaus wurde mir klar, dass dies dem klassischen Problem ähnelt, bei dem die Anzahl der unterschiedlichen Teilzeichenfolgen einer Zeichenfolge ermittelt werden muss. Ich dachte über die Möglichkeit nach, ein Suffix-Array zu konstruieren und auf ähnliche Weise zu lösen (in -Zeit). Aber ich habe nicht herausgefunden, wie ich das ändern kann, damit es hier funktioniert. Wenn wir beispielsweise das Suffix-Array für a = [ 1 , 2 , 1 ] verwenden, erhalten wir 5 Fälle anstelle der vier zulässigen Fälle. Ist dies mit Suffix-Arrays möglich oder denke ich in die falsche Richtung?Ö(n)ein=[1,2,1]

Ö(m)


Ö(n lG n)

Ich würde vorschlagen, mit dem folgenden Problem zu beginnen: Wie schwer ist es zu entscheiden, ob es zwei Intervalle mit der gleichen Summe gibt? Es ist verlockend, die 3SUM-Härte dieses Problems zu beweisen, aber bisher habe ich es nicht geschafft.
Yuval Filmus

Antworten:


2

Ö(n2)Θ(n2)

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


Das "fast sicher" liegt daran, dass das Problem die Werte der Summen nicht als Ausgabe benötigt. Ich glaube jedoch nicht, dass Duplikate vermieden werden können, ohne zumindest die meisten Werte zu bestimmen.


Ich sehe keinen besonderen Grund, warum es keinen Weg geben sollte, alle Möglichkeiten zu umgehen und trotzdem die richtige Antwort zu finden. Dynamische Programmieralgorithmen machen das routinemäßig.
Yuval Filmus
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.