Maison > Article > développement back-end > Le nombre d'arbres dont la somme des degrés des sommets est L
Le nombre d'arbres pour un degré entier L donné peut être déterminé par une équation basée sur l'hypothèse graphique. Tout d’abord, on remarque que le degré entier d’un arbre à N sommets est continûment 2N-2. En utilisant cela, nous pouvons calculer le nombre de dégagements dans l’arbre, qui est L moins 2. Une autre méthode consiste à déterminer le nombre de sommets internes en soustrayant le nombre de décollages du nombre total de sommets. Enfin, nous pouvons déterminer le nombre de façons de répartir les degrés restants entre les sommets intérieurs en utilisant une équation de combinaison. Par conséquent, ces étapes peuvent être utilisées pour compter le nombre d’arbres de degré entier L.
Énumération récursive
Analyse combinée
Le comptage récursif peut être une stratégie pour déterminer le nombre d'arbres avec un degré L donné. En partant d'un seul sommet, nous incluons systématiquement des sommets et des arêtes modernes pour construire l'arbre. A chaque étape, nous passons les degrés restants entre les sommets existants tout en conservant la somme spécifiée. Ce processus est répété de manière récursive, explorant toutes les combinaisons possibles. En revenant en arrière et en considérant différents degrés, nous sommes en mesure de déterminer le nombre d'arbres valides. Cette approche est très utile pour les tailles d'entrée plus petites, mais peut devenir inefficace pour des valeurs plus grandes de L puisque sa complexité temporelle est exponentielle.
Définissez une fonction récursive countTrees(L, vertexCount), où L est la somme de degrés requise et vertexCount représente le nombre de sommets dans l'arbre.
Situation de base.
Si L est équilibré avec 2 et que vertexCount est égal à 1, alors 1 est renvoyé (car un seul sommet peut être un arbre substantiel). Initialisez la variable treeCount à 0.
Parcourez les degrés possibles du sommet actuel de 1 à L-1.
Dans la boucle.
Soustrayez L du degré actuel et appelez countTrees de manière récursive avec le L et le vertexCount-1 améliorés. Attribuez la valeur renvoyée à treeCount. Renvoie TreeCount.
Nombre d'appels. Les arbres fonctionnent avec le L requis et le nombre de sommets de départ (selon la règle 1) pour obtenir le nombre d'arbres avec la somme de degrés donnée.
#include <iostream> int countTrees(int L, int vertexCount) { if (L == 2 && vertexCount == 1) { return 1; } int treeCount = 0; for (int degree = 1; degree <= L - 1; degree++) { int remainingSum = L - degree; int subTreeCount = countTrees(remainingSum, vertexCount - 1); treeCount += subTreeCount; } return treeCount; } int main() { int L = 8; int vertexCount = 4; int numTrees = countTrees(L, vertexCount); std::cout << "Number of trees with sum of degrees " << L << " and " << vertexCount << " vertices: " << numTrees << std::endl; return 0; }
Number of trees with sum of degrees 8 and 4 vertices: 10
L'analyse combinatoire est le processus consistant à considérer la structure des arbres et à les numéroter à l'aide d'une stratégie combinatoire pour déterminer le nombre d'arbres avec une somme de degrés L donnée. Cela implique d'analyser les exigences en matière de diplômes, de déterminer le nombre de sommets internes, de les effacer et de leur attribuer les degrés restants. En utilisant des concepts tels que les combinaisons, les étapes et les relations récurrentes, l'analyse combinatoire permet de dériver des équations ou des méthodes de calcul pour compter avec précision le nombre d'arbres avec une somme de degrés spécifique L. Cette approche utilise des normes scientifiques pour résoudre les problèmes de manière efficace et compétente.
Initialisez la variable count_trees à 0.
Itérer le nombre de filtres possibles de 1 à L-2, c'est-à-dire.
Calculez le nombre de sommets internes, c'est-à-dire L - i.
Attribuez les degrés restants aux sommets intérieurs en utilisant la méthode de combinaison. Vous pouvez calculer cette distribution à l'aide de méthodes récursives ou de programmation dynamique.
Augmentez count_trees au nombre d'éléments en passant des degrés entre les sommets internes et en sélectionnant les feuilles.
Renvoyer count_trees comme résultat.
#include <iostream> #include <algorithm> #include <vector> int countTrees(int L) { int count_trees = 0; for (int i = 1; i <= L - 2; i++) { int internal_vertices = L - i; // Calculate the number of ways to distribute degrees among internal vertices std::vector<int> degrees(internal_vertices - 2, 1); degrees.push_back(2); do { // Calculate the number of ways to select the leaves int leaf_selection = std::count_if(degrees.begin(), degrees.end(), [](int x) { return x == 1; }); count_trees += leaf_selection; } while (std::next_permutation(degrees.begin(), degrees.end())); } return count_trees; } int main() { int L = 10; // Assuming L = 10 int result = countTrees(L); std::cout << "Number of trees: " << result << std::endl; return 0; }
Number of trees: 168
Cet article explore deux stratégies pour déterminer le nombre d'arbres avec un degré spécifique dans un graphique. La stratégie principale est l'identification récursive, qui crée l'arbre en ajoutant efficacement des sommets et des arêtes, en passant les degrés restants. La deuxième stratégie est l'analyse combinatoire, qui utilise des critères numériques et des méthodes combinatoires pour calculer le nombre d'arbres en passant des degrés entre les sommets. Les deux méthodes offrent des moyens efficaces de résoudre des problèmes et sont pertinentes dans des scénarios complètement différents.
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!