『壹』 設一棵樹的度為3,其中沒有度為2的結點,且葉子結點數為5。該樹中度為3的結點數詳細解析
有個公式結點數=分支數+1
設度為0的結點數為x,度為1的結點數y,度為2的結點數z,度為3的t,那麼
x+y+z+t=0*x+1*y+2z+3t+1
x=z+2t+1
葉子結點就是度為0的結點,z=0你說t等於多少呢
『貳』 老王帶你理解演算法復雜度O(1),O(N),O(N^2)
理解演算法復雜度是編程中的關鍵概念,它描述了演算法的運行時間與問題規模之間的關系。我們來具體解析O(1)、O(N)、O(N^2)以及O(log^n)這幾種復雜度:
O(1)表示常數復雜度。它意味著演算法的執行時間不隨問題規模的增加而改變。就像酒店管理員老王,他只需要快速找到指定房間的鑰匙,無需根據房間數量進行額外的計算。代碼中例如 i = 1 或 i = 3 都是O(1)復雜度的實例。
O(N)表示線性復雜度。隨著問題規模的增加,演算法的執行時間線性增長。老王開始通過給鑰匙編號並將它們串起來,以便更快地找到指定房間的鑰匙。當房間數量從100增加到10000時,查找時間顯著增加,體現了線性增長的特性。
O(N^2)表示平方復雜度。在空間和時間上,演算法的性能會隨著問題規模的平方增加而急劇下降。老王開始通過將每一層的鑰匙串起來,但在查找時,需要找到樓層編號和房間編號,使得演算法復雜度變為O(N^2)。增加房間層數和房間數量會進一步加劇問題的復雜性。
O(log^n)表示對數復雜度。演算法通過不斷縮小查找范圍來提高效率。老王通過從中間切開鑰匙堆,每次都將查找范圍減半,直到找到鑰匙。這種方式在大量數據中查找時非常有效,大大減少了查找時間。
O(nlog^n)表示n對數復雜度,它是對數復雜度的擴展,表示演算法性能隨問題規模的線性增長而提高。例如,使用二分查找在有序列表中搜索元素就是O(log^n),之後以線性速度執行其他操作,總時間復雜度為O(nlog^n)。
在工作和學習中,我們應注重培養解決問題的思維能力,而非僅僅掌握單一的技能或工具。理解演算法復雜度有助於我們在面對不同問題時,選擇最合適的解決方案。例如,根據天氣選擇合適的交通工具,或者在不同的編程語言中選擇最適合特定任務的語言。
對於不足之處,後續將進行補充。非常感謝關注我們公眾號「嵌入式Linux」。您的每一次支持都是我們前進的動力。