導航:首頁 > 源碼編譯 > 求森林的高度遞歸演算法

求森林的高度遞歸演算法

發布時間:2023-01-14 17:38:27

A. 關於遞歸演算法求二叉樹深度演算法

u,v 分別求出當前節點左子樹和右子樹的深度(高度),
然後當前節點的 深度就等於左右子樹裡面較大的那個+1.

if (u>n) return (u+1)
return (v+1)
這句就是返回較深的+1.

u=height(T->lchild);
v=height(T->rchild);

這兩句就是遞歸的調用,求深度了。

if (T==NULL) return 0;

這個就是終止條件了,如果沒有子節點就返回。

B. 孤立森林(Isolation Forest)演算法簡介

孤立森林演算法是一種適用於連續數據的無監督異常檢測方法,由南京大學周志華教授等人於2008年首次提出,之後又於2012年提出了改進版本。與其他異常檢測演算法通過距離,密度等量化指標來刻畫樣本間的疏離程度不同,孤立森林演算法通過對樣本點的孤立來檢測異常值。具體來說,該演算法利用一種名為孤立樹 的二叉搜索樹結構來孤立樣本。由於異常值的數量較少且與大部分樣本的疏離性,因此,異常值會被更早的孤立出來,也即異常值會距離 的根節點更近,而正常值則會距離根節點有更遠的距離。此外,相較於LOF,K-means等傳統演算法,孤立森林演算法對高緯數據有較好的魯棒性。

我們先給出孤立樹(Isolation Tree)和樣本點 在孤立樹中的路徑長度 的定義

孤立樹 :若 為孤立樹的一個節點, 存在兩種情況:沒有子節點的外部節點,有兩個子節點 和一個test的內部節點。在 的test由一個屬性 和一個分割點 組成, 的點屬於 ,反之屬於 。

樣本點 在孤立樹中的路徑長度 :樣本點 從 的根節點到葉子節點經過的邊的數量

從下圖我們可以直觀的看到,相對更異常的 只需要4次切割就從整體中被分離出來,而更加正常的 點經過了11次分割才從整體中分離出來。這也體現了孤立森林演算法的基本思想。(ps:圖片來自原論文)

下面,我們來詳細介紹孤立森林演算法。該演算法大致可以分為兩個階段,第一個階段我們需要訓練出 顆孤立樹,組成孤立森林。隨後我們將每個樣本點帶入森林中的每棵孤立樹,計算平均高度,之後再計算每個樣本點的異常值分數。

Step1: 為給定數據集, ,從 中隨機抽取 個樣本點構成 的子集 放入根節點。
Step2:從 個維度中隨機指定一個維度 ,在當前數據中隨機產生一個切割點 , 。
Step3:此切割點 生成了一個超平面,將當前數據空間劃分為兩個子空間:指定維度小於p的樣本點放入左子節點,大於或等於p的放入右子節點。
Step4:遞歸Step2和Step3,直至所有的葉子節點都只有一個樣本點或者孤立樹 已經達到指定的高度。
Step5:循環Step1至Step4,直至生成 個孤立樹

第二階段:
Step1: 對於每一個數據點 ,令其遍歷每一顆孤立樹 ,計算點 在森林中的平均高度 ,對所有點的平均高度做歸一化處理。異常值分數的計算公式如下所示:

其中,

參考: https://dl.acm.org/citation.cfm?doid=2133360.2133363

C. c語言數據結構求森林的深度的遞歸演算法

d1代表,如果不是這個第一個左孩子不是空樹,它就會一直找下去,直到找到最後,記下左孩子的深度
d2代表,如果不是這個第一個右孩子不是空樹,它就會一直找下去,直到找到最後,記下右孩子的深度
當然每次都會返回的左右深度的最大值,因為你要找的是森林的深度。
如果你不明白的話,你可以看一個比較簡單的,就是求樹的深度,再簡單的就是求二叉樹的深度,當這些深度你都會求了,森林的自然而然就會了。呵呵呵
不知道對你有沒有幫助啊

閱讀全文

與求森林的高度遞歸演算法相關的資料

熱點內容
pdf轉cad格式轉換器 瀏覽:363
華碩電腦磁碟加密怎麼解決 瀏覽:266
python隨機種子狀態釋放 瀏覽:11
51單片機做計數器 瀏覽:901
picc編譯器過期 瀏覽:735
在抖音收藏怎麼設置加密 瀏覽:394
外地雲伺服器如何注冊 瀏覽:860
遮瑕膏解壓 瀏覽:188
近的python少兒編程課 瀏覽:489
php當天時間戳 瀏覽:201
手機地圖app哪個好用 瀏覽:316
51單片機蓄電池三段式充電 瀏覽:281
rsa演算法java實現 瀏覽:38
java中讀取資料庫中數據 瀏覽:245
程序員買基金准則 瀏覽:257
伺服器連接到雲服務 瀏覽:297
程序員大笑的原因 瀏覽:79
騰訊雲伺服器充值費入什麼科目 瀏覽:764
如何解決我的世界國際版伺服器卡頓問題 瀏覽:425
27x25x40簡便計演算法 瀏覽:267