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

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

SublimeText3漢化版
中文版,非常好用

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

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

C語言數據結構:樹和圖的數據表示與操作樹是一個層次結構的數據結構由節點組成,每個節點包含一個數據元素和指向其子節點的指針二叉樹是一種特殊類型的樹,其中每個節點最多有兩個子節點數據表示structTreeNode{intdata;structTreeNode*left;structTreeNode*right;};操作創建樹遍歷樹(先序、中序、後序)搜索樹插入節點刪除節點圖是一個集合的數據結構,其中的元素是頂點,它們通過邊連接在一起邊可以是帶權或無權的數據表示鄰

文件操作難題的真相:文件打開失敗:權限不足、路徑錯誤、文件被佔用。數據寫入失敗:緩衝區已滿、文件不可寫、磁盤空間不足。其他常見問題:文件遍歷緩慢、文本文件編碼不正確、二進製文件讀取錯誤。

C語言函數是代碼模塊化和程序搭建的基礎。它們由聲明(函數頭)和定義(函數體)組成。 C語言默認使用值傳遞參數,但也可使用地址傳遞修改外部變量。函數可以有返回值或無返回值,返回值類型必須與聲明一致。函數命名應清晰易懂,使用駝峰或下劃線命名法。遵循單一職責原則,保持函數簡潔性,以提高可維護性和可讀性。

C語言函數名定義包括:返回值類型、函數名、參數列表和函數體。函數名應清晰、簡潔、統一風格,避免與關鍵字衝突。函數名具有作用域,可在聲明後使用。函數指針允許將函數作為參數傳遞或賦值。常見錯誤包括命名衝突、參數類型不匹配和未聲明的函數。性能優化重點在函數設計和實現上,而清晰、易讀的代碼至關重要。

C35 的計算本質上是組合數學,代表從 5 個元素中選擇 3 個的組合數,其計算公式為 C53 = 5! / (3! * 2!),可通過循環避免直接計算階乘以提高效率和避免溢出。另外,理解組合的本質和掌握高效的計算方法對於解決概率統計、密碼學、算法設計等領域的許多問題至關重要。

C語言函數是可重複利用的代碼塊,它接收輸入,執行操作,返回結果,可將代碼模塊化提高可複用性,降低複雜度。函數內部機制包含參數傳遞、函數執行、返回值,整個過程涉及優化如函數內聯。編寫好的函數遵循單一職責原則、參數數量少、命名規範、錯誤處理。指針與函數結合能實現更強大的功能,如修改外部變量值。函數指針將函數作為參數傳遞或存儲地址,用於實現動態調用函數。理解函數特性和技巧是編寫高效、可維護、易理解的C語言程序的關鍵。

算法是解決問題的指令集,其執行速度和內存佔用各不相同。編程中,許多算法都基於數據搜索和排序。本文將介紹幾種數據檢索和排序算法。線性搜索假設有一個數組[20,500,10,5,100,1,50],需要查找數字50。線性搜索算法會逐個檢查數組中的每個元素,直到找到目標值或遍歷完整個數組。算法流程圖如下:線性搜索的偽代碼如下:檢查每個元素:如果找到目標值:返回true返回falseC語言實現:#include#includeintmain(void){i

C語言多線程編程指南:創建線程:使用pthread_create()函數,指定線程ID、屬性和線程函數。線程同步:通過互斥鎖、信號量和條件變量防止數據競爭。實戰案例:使用多線程計算斐波那契數,將任務分配給多個線程並同步結果。疑難解答:解決程序崩潰、線程停止響應和性能瓶頸等問題。
