Rumah >pembangunan bahagian belakang >C++ >Bilangan pokok yang jumlah darjah puncaknya ialah L

Bilangan pokok yang jumlah darjah puncaknya ialah L

PHPz
PHPzke hadapan
2023-09-06 19:57:11771semak imbas

Bilangan pokok yang jumlah darjah puncaknya ialah L

Bilangan pokok untuk darjah integer L yang diberikan boleh ditentukan dengan persamaan berdasarkan andaian graf. Pertama, kita perhatikan bahawa darjah integer pokok dengan N bucu adalah 2N-2 secara berterusan. Dengan menggunakan ini, kita boleh mengira bilangan kelegaan dalam pokok, iaitu L tolak 2. Kaedah lain ialah menentukan bilangan bucu dalaman dengan menolak bilangan berlepas daripada jumlah bilangan bucu. Akhir sekali, kita boleh menentukan bilangan cara untuk mengagihkan baki darjah di antara bucu pedalaman dengan menggunakan persamaan gabungan. Oleh itu, langkah-langkah ini boleh digunakan untuk mengira bilangan pokok darjah integer L.

Kaedah penggunaan

  • Penghitungan rekursif

  • Analisis Gabungan

Penghitungan rekursif

Pengiraan rekursif boleh menjadi strategi untuk menentukan bilangan pokok dengan darjah L tertentu. Bermula dari satu bucu, kami secara sistematik memasukkan bucu dan tepi moden untuk membina pokok itu. Pada setiap langkah, kami melepasi darjah yang tinggal di antara bucu sedia ada sambil mengekalkan jumlah yang ditentukan. Proses ini diulang secara rekursif, meneroka semua kombinasi yang mungkin. Dengan berundur dan mempertimbangkan darjah yang berbeza, kami dapat menentukan bilangan pokok yang sah. Pendekatan ini sangat berguna untuk saiz input yang lebih kecil, tetapi mungkin menjadi tidak cekap untuk nilai L yang lebih besar kerana kerumitan masanya adalah eksponen.

Algoritma

  • Tentukan fungsi rekursif countTrees(L, vertexCount), dengan L ialah jumlah darjah yang diperlukan dan vertexCount mewakili bilangan bucu dalam pokok.

  • Situasi asas.

  • Jika L seimbang dengan 2 dan vertexCount sama dengan 1, maka 1 dikembalikan (kerana satu bucu boleh menjadi pokok yang besar). Mulakan pembolehubah treeCount kepada 0.

  • Lintas darjah kemungkinan puncak semasa dari 1 ke L-1.

  • Di dalam gelung.

  • Tolak L daripada darjah semasa dan panggil countTrees secara rekursif dengan L dan vertexCount-1 yang dinaik taraf. Berikan nilai yang dikembalikan kepada treeCount. Kembalikan treeCount.

  • Kiraan panggilan. Pokok berfungsi dengan L yang diperlukan dan kiraan puncak (mengikut peraturan 1) untuk mendapatkan bilangan pokok dengan jumlah darjah yang diberikan.

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

#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;
}

Output

Number of trees with sum of degrees 8 and 4 vertices: 10

Analisis Gabungan

Analisis kombinatorial ialah proses mempertimbangkan struktur pokok dan menomborkannya menggunakan strategi gabungan apabila menentukan bilangan pokok dengan jumlah darjah tertentu L. Ia melibatkan menganalisis keperluan darjah, menentukan bilangan bucu dalaman dan mengosongkannya, dan memberikan baki darjah kepada mereka. Dengan memanfaatkan konsep seperti gabungan, peringkat, dan perhubungan berulang, analisis gabungan membolehkan persamaan terbitan atau kaedah pengiraan untuk mengira bilangan pokok dengan jumlah darjah tertentu L dengan tepat. Pendekatan ini menggunakan piawaian saintifik untuk menyelesaikan masalah dengan cekap dan mahir.

Algoritma

  • Mulakan pembolehubah count_trees kepada 0.

  • Ulang bilangan penapis yang mungkin dari 1 hingga L-2, i.

  • Kira bilangan bucu dalaman, iaitu L - i.

  • Tugaskan baki darjah kepada bucu dalaman menggunakan kaedah gabungan. Anda boleh mengira taburan ini menggunakan kaedah rekursif atau pengaturcaraan dinamik.

  • Tingkatkan bilangan_pokok kepada bilangan item dengan melepasi darjah antara bucu dalaman dan memilih daun.

  • Kembalikan bilangan_pokok sebagai hasilnya.

Terjemahan bahasa Cina bagi

Contoh

ialah:

Contoh

#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;
}

Output

Number of trees: 168

Kesimpulan

Artikel ini meneroka dua strategi untuk menentukan bilangan pokok dengan darjah tertentu dalam graf. Strategi utama ialah pengenalan rekursif, yang mencipta pepohon dengan menambahkan bucu dan tepi dengan cekap, melepasi darjah yang tinggal. Strategi kedua ialah analisis gabungan, yang menggunakan kriteria berangka dan kaedah gabungan untuk mengira bilangan pokok dengan melepasi darjah antara bucu. Kedua-dua kaedah menyediakan cara yang cekap untuk menyelesaikan masalah dan relevan dalam senario yang sama sekali berbeza.

Atas ialah kandungan terperinci Bilangan pokok yang jumlah darjah puncaknya ialah L. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam