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

求森林的高度遞歸演算法

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

閱讀全文

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

熱點內容
美圖秀在線壓縮圖片 瀏覽:182
蘋果自帶控制app是什麼 瀏覽:904
孩子學編程怎麼樣 瀏覽:586
網路編程經典書籍 瀏覽:612
曲靖創建網站java程序員 瀏覽:690
256位加密中是什麼意思 瀏覽:97
php多維數組去重 瀏覽:308
做程序員這一行儲備人才怎麼看 瀏覽:460
參加密逃文 瀏覽:327
蘋果編程語言ios 瀏覽:763
求解病態系統常用的演算法 瀏覽:993
駕校用的app叫什麼 瀏覽:219
數控編程線的纏繞方法 瀏覽:972
安卓線性布局怎麼設計計算器布局 瀏覽:24
拓本pdf 瀏覽:79
2017法碩指南pdf 瀏覽:295
linuxphp命令參數 瀏覽:425
可靠性預測和推薦演算法 瀏覽:855
程序員送女友的相冊 瀏覽:255
壓縮文件怎麼設置打開加密 瀏覽:768