Diviser et conquérir des algorithmes pour trouver le maximum d'élément d'un tableau

Je suis en train d'essayer de comprendre comment les algorithmes suivants œuvres.

#include <iostream>
using namespace std;
int maxsimum(int a[], int l, int r) {
    if (l == r)  
        return a[l];
    int m = (l+r)/2;
    int u = maxsimum(a,l,m);
    int v = maxsimum(a,m+1,r);
    return u>v?u:v;    
}

int main() {
    int a[] = {34,23,45,56,30,31,57,33,55,10};
    int n = sizeof(a)/sizeof(int);
    cout << maxsimum(a,0,n) << endl;         
    return 0;
}

Tout d'abord, ce qui m'intéresse, c'est que, en dépit de l'algorithme fonctionne correctement, il est mystérieux pour moi la façon dont il trouve l'élément maximum. Je vais vous montrer comment j'ai compris de cet algorithme:

Étape 1: nous dire que dans le cas d'un tableau, l=0 et r=10, il vérifie if (l>r) qui ne détiennent pas de cours donc il calcule m=(0+10)/2;. Puis effectuez de nouveau la procédure pour les nouvelles limites. La première paire est (0,5), la deuxième (6,10) et après l'opération finale, il compare deux valeurs renvoyées et enfin retourne l'élément maximal entre eux.

N'cet algorithme travaille toujours? À chaque itération, il ne fait pas de comparaison, seule la dernière étape. Comment peut-il déterminer l'élément maximum à chaque récursive itération? Il vérifie que ce. Par exemple: prendre la paire(0,5), est (0 plus de 5)? Non, afin de le répéter encore et diviser ces limites en deux afin d'obtenir de nouvelles valeur moyenne m1=(0+5)/2, puis à nouveau à nouveau et revenir à l'élément, mais pas le maximum. Aussi pour la deuxième subarray on peut dire la même chose.

Quelle est l'idée principale de cet algorithme?

  • oui je sais que c'est récursive maximale de l'élément de recherche, j'ai besoin que voulez comprendre comment il trouve le maximum j'ai essayé de faire un peu de travail sur le papier, mais pas de résultat
  • Votre question est complètement inintelligible. J'ai essayé de l'améliorer mais je ne sais pas vraiment par où commencer. Veuillez utiliser les paragraphes et une mise en forme appropriée.
  • Konrad Rudolph ma question est est-il exact que la comparaison est écrit sur la dernière ligne?
  • Pourquoi dois-je continuer à voir de cet algorithme sur ce site? Est-ce un apprentissage en commun de l'exercice? Il ne semble pas plus vite qu'un linéaire de recherche...
  • Qu'est-ce que la complexité asymptotique de cet algorithme ?
  • Asymtotic de la complexité est la même, mais la constante multiplicateur est au moins deux fois plus grande, de sorte que c'est au moins deux fois plus lent.
  • C'est le grand O(n). J'ai pensé à elle.