[Algorithme] L'explication de l'algorithme glouton la plus compréhensible (avec exemples)

1. Définition

Algorithme glouton, défini comme : démanteler un gros problème en plusieurs petits problèmes, à chaque étape de résolution du problème, quel que soit l'impact que la décision actuelle à cette étape aura sur le futur, seule la décision immédiate est optimale. Ceci est répété jusqu'à ce que la solution optimale soit finalement obtenue.

Défaut : Je veux juste obtenir la solution optimale. Bien que chaque étape soit la solution optimale, il se peut qu'elle ne permette pas d'obtenir la solution optimale dans son ensemble.

Avantages : La complexité temporelle est généralement relativement faible , c'est-à-dire que cela prend moins de temps. L'ensemble n'est peut-être pas le meilleur, mais il est aussi proche de dix .


Deux exemples

Il existe une telle série de nombres, disposés selon la pyramide, comme le montre la figure ci-dessous. Nous partons du sommet et trouvons la somme des plus grands chemins de haut en bas ; en d’autres termes, ajoutons un nombre à chaque couche de haut en bas pour que ce nombre soit le plus grand.

Si vous le regardez avec vos yeux, il est plus facile de voir que le meilleur chemin est 9-7-3-4-5, mais si vous en comptez trop, cela ne fonctionnera pas bien et vous devrez vous fier au code pour calculez-le.

Il existe une solution qui calcule toutes les possibilités possibles et les force brute, qui est également simple à écrire. Mais évidemment, cela prend beaucoup de temps et de mémoire, et l'ordinateur sera bloqué toutes les minutes, nous utilisons donc ici l'algorithme glouton .


3. Coder

Nous représentons ce tableau pyramidal comme a[i][j], écrivez simplement un code comme suit :

// 注意,下面的代码只是表意,不能直接扒过去用
// 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;

Je suppose que tu aimes

Origine blog.csdn.net/m0_55080712/article/details/124675250
conseillé
Classement