导航:首页 > 源码编译 > 求森林的高度递归算法

求森林的高度递归算法

发布时间: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代表,如果不是这个第一个右孩子不是空树,它就会一直找下去,直到找到最后,记下右孩子的深度
当然每次都会返回的左右深度的最大值,因为你要找的是森林的深度。
如果你不明白的话,你可以看一个比较简单的,就是求树的深度,再简单的就是求二叉树的深度,当这些深度你都会求了,森林的自然而然就会了。呵呵呵
不知道对你有没有帮助啊

阅读全文

与求森林的高度递归算法相关的资料

热点内容
未来番禺程序员待遇 浏览:207
安卓安智部落冲突密码怎么改 浏览:646
http协议单片机 浏览:71
pdfdocument 浏览:556
gcc编译vi文件 浏览:63
安卓连airpods怎么找耳机 浏览:927
加密货币转账教程 浏览:229
程序员小灰hashmap 浏览:838
国语pdf版 浏览:184
少儿编程作品美丽的小房子 浏览:974
服务器卡在网页上怎么办 浏览:54
用python自制编译器 浏览:951
android分享新浪微博客户端 浏览:26
系统中服务器在哪里下载地址 浏览:1001
新a4安卓手机怎么投屏 浏览:173
pdftoemf 浏览:886
java接口可以实现接口吗 浏览:59
vb编程10个随机函数 浏览:22
程序员个人简介100 浏览:772
土木工程师算法工程师 浏览:92