[Algorithmus] Die verständlichste Erklärung des Greedy-Algorithmus (mit Beispielen)

1. Definition

Greedy-Algorithmus, definiert als : Zerlegen eines großen Problems in mehrere kleine Probleme. In jedem Schritt der Lösung des Problems ist nur die unmittelbare Entscheidung optimal, unabhängig davon, welche Auswirkungen die aktuelle Entscheidung in diesem Schritt auf die Zukunft haben wird. Dies wird wiederholt, bis schließlich die optimale Lösung vorliegt.

Fehler : Ich möchte nur die optimale Lösung erhalten. Obwohl jeder Schritt die optimale Lösung ist, ist es möglicherweise nicht möglich, die optimale Lösung als Ganzes zu erhalten.

Vorteile : Die zeitliche Komplexität ist normalerweise relativ gering , das heißt, es dauert weniger Zeit. Das Ganze ist vielleicht nicht das Beste, aber es liegt auch nahe bei zehn .


Zweitens Beispiele

Es gibt so viele Zahlen, die nach der Pyramide angeordnet sind, wie in der Abbildung unten gezeigt. Wir beginnen am Scheitelpunkt und ermitteln die Summe der größten Pfade von oben nach unten. Mit anderen Worten: Fügen Sie jeder Ebene von oben nach unten eine Zahl hinzu, um diese Zahl zur größten zu machen.

Wenn Sie es mit Ihren Augen betrachten, ist es einfacher zu erkennen, dass der beste Pfad 9-7-3-4-5 ist, aber wenn Sie zu viele zählen, wird es nicht gut funktionieren und Sie müssen sich auf den Code verlassen berechne es.

Es gibt eine Lösung, die jede mögliche Möglichkeit berechnet und brutal umsetzt, die zudem einfach zu schreiben ist. Dies ist jedoch offensichtlich sehr zeitaufwändig und speicherintensiv, und der Computer bleibt jede Minute hängen. Deshalb verwenden wir hier den Greedy-Algorithmus .


3. Code

Wir stellen dieses Pyramidenarray als a[i][j] dar, schreiben Sie einfach einen Code wie folgt:

// 注意,下面的代码只是表意,不能直接扒过去用
// a[i][j]表示数组,maxJ表示数组的最大层数,temp表示临时数值
// maxJ表示总列数,maxI表示当前列的最大行数

for(j=0; j<maxJ; j++){
    for(i=0; i<maxI; i++){
        temp1 = a[i][j] + a[i][j+1];
        temp2 = a[i][j] + a[i+1][j+1];
        temp = max(temp1, temp2);
    }
    maxSum = maxSum + temp;
}
return maxSum;

Supongo que te gusta

Origin blog.csdn.net/m0_55080712/article/details/124675250
Recomendado
Clasificación