Maison > développement back-end > C++ > Théorème principal avancé pour la récursion diviser pour régner

Théorème principal avancé pour la récursion diviser pour régner

王林
Libérer: 2023-08-31 21:09:17
avant
994 Les gens l'ont consulté

Théorème principal avancé pour la récursion diviser pour régner

Divide and Conquer est un algorithme basé sur la décomposition récursive d'un problème en plusieurs sous-problèmes de type similaire, et ces sous-problèmes peuvent être facilement résolus.

Exemple

Prenons un exemple pour comprendre plus en profondeur la technique diviser pour régner -

function recursive(input x size n)
   if(n < k)
      Divide the input into m subproblems of size n/p.
      and call f recursively of each sub problem
   else
      Solve x and return
Copier après la connexion

Combinez les résultats de tous les sous-problèmes et renvoyons la solution au problème d'origine.

Explication − Dans le problème ci-dessus, le L'ensemble de problèmes doit être subdivisé en sous-problèmes plus petits qui peuvent être résolus facilement.

Le théorème des maîtres pour diviser pour mieux régner est un théorème d'analyse qui peut être utilisé pour déterminer une valeur grande-0 pour les algorithmes de relations récursives. le temps requis par l'algorithme et représentez-le sous forme de notation asymptotique.

Exemple de valeur d'exécution du problème dans l'exemple ci-dessus −

T(n) = f(n) + m.T(n/p)
Copier après la connexion

Pour la plupart des algorithmes récursifs, vous pourrez trouver la complexité temporelle pour l'algorithme en utilisant le théorème de maître, mais dans certains cas, le théorème de maître peut ne pas être applicable. Ce sont les cas dans lesquels le théorème de maître n'est pas applicable lorsque le problème T(n) n'est pas monotone, par exemple, T(n) = péché. n . La fonction problème f(n) n'est pas un polynôme.

Comme le théorème principal pour trouver la complexité temporelle n'est pas très efficace dans ces cas, un théorème principal avancé pour la récurrence récursive a été conçu pour gérer le problème de récurrence du. form −

T(n) = aT(n/b) + &oslash;((n^k)logpn)
Copier après la connexion

où n est la taille du problème.

a = nombre de sous-problèmes dans la récursion, a > 0

n/b = taille de chaque sous-problème b > 1, k >= 0, p est un nombre réel.

Pour résoudre ce type de problème nous utiliserons la solution suivante :

  • Si a > bk, alors T(n) = ∅ (nlogba)
  • Si a = bk, alors
    • Si p > -1, alors T(n) = ∅(nlogba logp+1n)
    • Si p = -1, alors T(n) = ∅(nlogba loglogn)
    • Si p ba)
  • Si a k, alors
    • Si p > klogpn)
    • Si p

En utilisant l'algorithme maître avancé, nous calculerons la complexité de certains algorithmes −

Recherche binaire − t(n) = θ(logn)

Tri par fusion − T(n) = θ(nlogn)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal