[GO] Lösen Sie das maximale Subarray-Problem in Python

Einführung

Schön, Sie alle kennenzulernen. Ich heiße ryuichi69.

Heute werde ich die Ausgabe dessen schreiben, was ich hier mit dem Algorithmus studiert habe. Heute haben wir es mit einem Algorithmus zu tun, der als maximales Subarray-Problem bezeichnet wird. Bitte teilen Sie uns in den Kommentaren mit, ob Teile schwer verständlich sind oder Anforderungen fehlen.

Was ist das maximale Subarray-Problem?

Nun, das ist das Hauptthema. Das Problem der maximalen Teilsumme ist ein Problem, das besagt: " In jedem Element befindet sich ein Array mit Ganzzahlen. Wenn Sie einige davon auswählen, ermitteln Sie den Maximalwert der Summe der ausgewählten ".

Problem Sei

n eine ganze Zahl größer oder gleich 0. Zu diesem Zeitpunkt erfüllt die aus n Elementen bestehende Zahlenfolge (Array) a [k] die folgenden Bedingungen.

  1. a [0], a [1], ..... a [n-1] ist eine ganze Zahl
  2. Es wird angenommen, dass jedes Element der Sequenz a in absteigender Reihenfolge angeordnet ist. .. Für alle natürlichen Zahlen i, die 1 ≤ i ≤ (n-1) erfüllen, ist a [i]> a [i + 1] erfüllt.

    Außerdem sei k eine natürliche Zahl, die 1 ≤ k ≤ n erfüllt. Wählen Sie k Elemente aus der Sequenz a [n] aus. Erstellen Sie ein Programm, in dem die Summe der zu diesem Zeitpunkt ausgewählten Elemente S [k] ist.

    Einschränkungen
    1. 1≦n≦10
    2. 1≦k≦10
    3. -10≦a[k]≦10

    * Da dies eine Algorithmuspraxis ist, berücksichtigen wir den Rechenaufwand nicht.

    Geben Sie 1 ein

    a = [7,9,-1,1,-4]
    k = 4
    * Wenn a = [7,9, -1,1] und die Elemente des Arrays nicht wie oben beschrieben in absteigender Reihenfolge sind, sortieren Sie die Elemente des Arrays in absteigender Reihenfolge und insgesamt.

    Ausgabe 1

    17

    Eingabe 2

    a = [-1,-2,-3,-4]
    k = 3
    * Wenn alle Elemente negative Ganzzahlen sind, werden sie nicht hinzugefügt.

    Ausgabe 2

    0

    Vorgehensweise (Kadanes Algorithmus) Fügen Sie für jede

    -Sequenz in der Reihenfolge von 0 hinzu. Und wenn die Gesamtwertschöpfung größer ist als vor der Addition, wird dieser Wert als S_k übernommen. Insbesondere

    1. Sortieren Sie das Array in absteigender Reihenfolge.
    2. Erstellen Sie eine Funktion max (a, b), die die größere der ganzen Zahlen a und b zurückgibt.
    3. Erhöhen Sie k um 1. Fügen Sie dem maximalen Summenwert s [k-1] ein [k] hinzu, betrachten Sie Fälle, in denen sie nicht addiert werden, und notieren (speichern) Sie im Array mit dem größeren Wert s [k]. (Dynamische Planungsmethode). In der Formel ausgedrückt ist