首頁 >後端開發 >C++ >列印給定Prufer序列中每個節點的度數

列印給定Prufer序列中每個節點的度數

王林
王林轉載
2023-09-08 15:09:021267瀏覽

列印給定Prufer序列中每個節點的度數

列印給定 Prufer 排列中每個中心的度,準備透過排列強調並統計每個節點的事件。透過追蹤每個節點的遞歸,我們將確定該中心在對應標記樹中的度數。這些數據可以深入了解樹的網路和結構。透過列印每個輪轂的度數,您可以分析變速箱並區分必要的輪轂。這項檢查對於理解基於 Prufer 排列表示的初始樹的屬性和特徵有所不同。

使用的方法

  • 頻率計數方法

  • #鄰接表表示方法

#頻率計數方法

從給定的 Prufer 排列中列印每個集線器度數的頻率計數方法包括統計每個集線器的事件來確定其度數。為了實現這種方法,初始化一個字典或簇來儲存中心的頻率。重複普魯弗安排並增加每個經歷過的樞紐的數量。每個集線器的計數顯示其在標記樹中的程度。最後,根據重複檢查列印所有輪轂的度數。這種方法提供了一種清晰的方法來分析Prufer排列內的網絡和樞紐度的傳播,並獲得第一棵樹的結構特徵。

演算法

  • 初始化一個清除詞引用或叢集來儲存節點的頻率。

  • 迭代 Prufer 序列中的每個元件「中心」。

  • 檢查字典或陣列中是否存在「hub」。

  • 如果存在,則將其計數增加 1。

  • 如果不存在,請將其包含在單字引用或簇中,初始計數為 1。

  • 循環完成後,您就可以獲得 Prufer 序列中每個中心的頻率。

  • 迭代單字引用或陣列中的每個鍵值對。

  • 鍵與中心相關,而自尊則與標記樹中的數量或程度相關。

  • 列印每個鍵值對的中心及其比較程度。

  • 列印的集線器度數說明了它們在標記樹中的特定度數。

範例

#include <iostream>
#include <vector>

struct HubFrequency {
   int hub;
   int frequency;
};

void countFrequencies(const std::vector<int>& pruferSequence) {
   std::vector<HubFrequency> frequencyVector;

   for (int hub : pruferSequence) {
      bool found = false;
      for (HubFrequency& hf : frequencyVector) {
         if (hf.hub == hub) {
            hf.frequency++;
            found = true;
            break;
         }
      }

      if (!found) {
         frequencyVector.push_back({hub, 1});
      }
   }

   for (const HubFrequency& hf : frequencyVector) {
      std::cout << "Hub: " << hf.hub << ", Degree: " << hf.frequency << std::endl;
   }
}

int main() {
   std::vector<int> pruferSequence = {1, 2, 3, 1, 3};
   countFrequencies(pruferSequence);

   return 0;
}

輸出

Hub: 1, Degree: 2
Hub: 2, Degree: 1
Hub: 3, Degree: 2

鄰接表表示方法

鄰接表表示方法包括將 Prufer 分組變更為鄰接表資訊結構。初始化一個清除鄰接列表,對於 Prufer 序列中的每個元件,在列表中新增一個部分來展示該節點的鄰居。建立鄰接清單時,請追蹤每個集線器的頻率。最後,確定鄰接清單中重複率最高的中心,並將其與 Prufer 分組中度數最高的中心進行比較。這種方法使我們能夠利用鄰接表的結構和從 Prufer 分組推斷的遞歸資料最大程度地熟練地確定集線器。

演算法

  • 初始化一個空的鄰接清單和一個清除重複計數器。

  • 迭代 Prufer 序列中的每個元件:

  • #a。增加目前節點的重複計數器。

  • b。將目前集線器包含為序列中提到的集線器的鄰居。

  • 在重複計數器中找出重複頻率最高的中心。此集線器與度數最大的集線器進行比較。

  • 將輪圈恢復至最大程度。

範例

#include <iostream>
#include <vector>
#include <unordered_map>

// Function to find the hub with the highest recurrence
int findHighestRecurrence(const std::unordered_map<int, int>& recurrenceCounter) {
   int highestRecurrence = 0;
   int hubWithHighestRecurrence = -1;

   for (const auto& entry : recurrenceCounter) {
      int hub = entry.first;
      int recurrence = entry.second;

      if (recurrence > highestRecurrence) {
         highestRecurrence = recurrence;
         hubWithHighestRecurrence = hub;
      }
   }

   return hubWithHighestRecurrence;
}

// Function to construct adjacency list from Prufer sequence
std::vector<std::vector<int>> constructAdjacencyList(const std::vector<int>& pruferSequence) {
   std::unordered_map<int, int> recurrenceCounter;
   std::vector<std::vector<int>> adjacencyList(pruferSequence.size() + 2);

   for (int hub : pruferSequence) {
      recurrenceCounter[hub]++;
      adjacencyList[hub].push_back(findHighestRecurrence(recurrenceCounter));
      adjacencyList[findHighestRecurrence(recurrenceCounter)].push_back(hub);
   }

   recurrenceCounter[findHighestRecurrence(recurrenceCounter)]++;

   return adjacencyList;
}

int main() {
   // Example Prufer sequence: {1, 3, 4, 2}
   std::vector<int> pruferSequence = {1, 3, 4, 2};
   std::vector<std::vector<int>> adjacencyList = constructAdjacencyList(pruferSequence);

   // Print the constructed adjacency list
   for (int i = 1; i < adjacencyList.size(); i++) {
      std::cout << "Node " << i << " connects to: ";
      for (int j = 0; j < adjacencyList[i].size(); j++) {
         std::cout << adjacencyList[i][j] << " ";
      }
      std::cout << std::endl;
   }

   return 0;
}

輸出

Node 1 connects to: 1 1 
Node 2 connects to: 2 2 
Node 3 connects to: 3 3 
Node 4 connects to: 4 4 
Node 5 connects to: 

結論

本文闡明如何使用兩種不同的方法列印給定 Prufer 分組中每個中心的度數:遞歸計數方法和鄰接列表表示方法。重複計數方法包括對分組內每個中心的事件進行計數以確定其程度。鄰接列表表示方法根據排列開發鄰接列表並追蹤每個集線器的重複以發現具有最值得注意度的集線器。本文提供了這兩種方法的 C 程式碼說明並說明了它們的用法。透過列印輪轂度數,我們可以分析組織結構並識別 Prufer 排列表示中的關鍵輪轂。

以上是列印給定Prufer序列中每個節點的度數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除