列印給定 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中文網其他相關文章!

C#和C 在面向对象编程(OOP)中的实现方式和特性上有显著差异。1)C#的类定义和语法更为简洁,支持如LINQ等高级特性。2)C 提供更细粒度的控制,适用于系统编程和高性能需求。两者各有优势,选择应基于具体应用场景。

從XML轉換到C 並進行數據操作可以通過以下步驟實現:1)使用tinyxml2庫解析XML文件,2)將數據映射到C 的數據結構中,3)使用C 標準庫如std::vector進行數據操作。通過這些步驟,可以高效地處理和操作從XML轉換過來的數據。

C#使用自動垃圾回收機制,而C 採用手動內存管理。 1.C#的垃圾回收器自動管理內存,減少內存洩漏風險,但可能導致性能下降。 2.C 提供靈活的內存控制,適合需要精細管理的應用,但需謹慎處理以避免內存洩漏。

C 在現代編程中仍然具有重要相關性。 1)高性能和硬件直接操作能力使其在遊戲開發、嵌入式系統和高性能計算等領域佔據首選地位。 2)豐富的編程範式和現代特性如智能指針和模板編程增強了其靈活性和效率,儘管學習曲線陡峭,但其強大功能使其在今天的編程生態中依然重要。

C 學習者和開發者可以從StackOverflow、Reddit的r/cpp社區、Coursera和edX的課程、GitHub上的開源項目、專業諮詢服務以及CppCon等會議中獲得資源和支持。 1.StackOverflow提供技術問題的解答;2.Reddit的r/cpp社區分享最新資訊;3.Coursera和edX提供正式的C 課程;4.GitHub上的開源項目如LLVM和Boost提陞技能;5.專業諮詢服務如JetBrains和Perforce提供技術支持;6.CppCon等會議有助於職業

C#適合需要高開發效率和跨平台支持的項目,而C 適用於需要高性能和底層控制的應用。 1)C#簡化開發,提供垃圾回收和豐富類庫,適合企業級應用。 2)C 允許直接內存操作,適用於遊戲開發和高性能計算。

C 持續使用的理由包括其高性能、廣泛應用和不斷演進的特性。 1)高效性能:通過直接操作內存和硬件,C 在系統編程和高性能計算中表現出色。 2)廣泛應用:在遊戲開發、嵌入式系統等領域大放異彩。 3)不斷演進:自1983年發布以來,C 持續增加新特性,保持其競爭力。

C 和XML的未來發展趨勢分別為:1)C 將通過C 20和C 23標準引入模塊、概念和協程等新特性,提升編程效率和安全性;2)XML將繼續在數據交換和配置文件中佔據重要地位,但會面臨JSON和YAML的挑戰,並朝著更簡潔和易解析的方向發展,如XMLSchema1.1和XPath3.1的改進。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

記事本++7.3.1
好用且免費的程式碼編輯器

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版
好用的JavaScript開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),