首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

决策树算法原理及应用(详细版)

一旦建立好了决策树,对于一个未给定类标号的元组,跟踪一条有根节点到叶节点的路径,该叶节点就存放着该元组的预测。决策树的优势在于不需要任何领域知识或参数设置,适合于探测性的知识发现。 ?...d1,d2...dm; 再分别构造以下树: C4.5(R-{D},C,S1),C4.5(R-{D},C,S2)...C4.5(R-{D},C,Sm); End C4.5 我们可能有疑问...先剪枝有个缺点就是视野效果问题,也就是说在相同的标准下,也许当前扩展不能满足要求,但更进一步扩展又能满足要求。这样会过早停止决策树的生长。 后剪枝 它由完全成长的树剪去子树而形成。...对于完全决策树中的每一个非叶子节点的子树,我们尝试着把它替换成一个叶子节点,该叶子节点的类别我们用子树所覆盖训练样本中存在最多的那个类来代替,这样就产生了一个简化决策树,然后比较这两个决策树在测试数据集中的表现...悲观剪枝 第一种方法很直接,但是需要一个额外的测试数据集,能不能不要这个额外的数据集呢?为了解决这个问题,于是就提出了悲观剪枝。悲观剪枝就是递归得估算每个内部节点所覆盖样本节点的误判率。

2.4K11
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    二叉树子节点的最近父节点

    查找二叉树子节点的最近共同父节点 分析 实现 算法复杂度 其他算法 题目升级 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。...说明: 所有节点的值都是唯一的。 p、q 为不同节点且均存在于给定的二叉搜索树中。...分析 对于二叉树来讲,由于左右子树指针的存在,使得正常情况下的自上而下遍历显得比较简单,而下而上的查找并不那么容易,所以一种直观的思维就是从根节点开始遍历,直到找到节点p pp,记录路径数组为p a t...,二叉搜索树变成了一个类似于链表的结构,而p , q p,qp,q是在最底端的两个节点那么搜索p , q p,qp,q节点的时间复杂度都可以达到n nn(n nn为树中节点个数),时间复杂度为O ( n...题目升级 如果题目中的树只是一颗普通的二叉树,那么最近父节点该怎么查找?

    1.8K40

    二叉树两个节点的最低公共最先问题

    ,问题描述如下:         寻找二叉树,两个节点的最低公共祖先,最低公共祖先意思是从下往上两个节点遇到的第一个祖先。...解决这个问题的思路有两种: 1.从根节点往下寻找,如果发现两个节点分别在左右子树上那么就找到了最低公共祖先,这是一个思路,但是这种算法实现起来复杂度比较高,所以放弃,选择第二种思路 2.第二种思路是,两个节点...,分别找到,从根节点到这两个节点的路径,找到路径后问题就转变为求两个链表的交叉点,这样就好做多了,就是从根节点按照路径往下遍历,如果果首次发现两个链表的节点不是同一个节点了,那么两个链表上一个公共节点就是最低祖先...,首先得问题就是怎么找到路径,我解决这个问题的方法是回溯法,新建一个类,这个类的成员变量有二叉树的节点,两个布尔型变量,代表左右子树是否被遍历过,false为没有遍历,true为已经遍历过了,还有一个变量就存放着走向...,让栈顶元素出栈,如果找到元素,那么就返回,如果栈为空了,那么就证明没有找到,想要的节点。

    19720

    【算法】二叉树中找到一个节点的后继节点,前继节点

    题目 二叉树中找到一个节点的后继节点,前继节点 现在有一种新的二叉树节点类型如下: public static class Node { public Node left; public...假设有一 棵Node类型的节点组成的二叉树,树中每个节点的parent指针都正确地指向自己的父节点,头节点的parent指向null。...只给一个在二叉树中的某个节点 node,分别实现返回node的后继,前继节点的函数。 在二叉树的中序遍历的序列中,node的下一个节点叫作node的后继节点,node的上一个节点叫做前节点。...,直至parent的左节点==node节点,那么parent就是node的后继节点 算法实现 /// 找到node的后继节点 public static Node getSuccessorNode...1、若该节点有左子树,那么其前继节点必然是左子树中,最右的节点 2、若该节点node没有左子树,则沿着parent节点往上找,直至parent的右节点==node节点,那么parent就是node的前继节点

    1.7K10

    《重学数据结构》之什么是二叉树?

    基本概念 树,一种非线性表数据结构: 节点 “树”里面的每个元素 父子关系 连线相邻节点之间的关系 兄弟节点 节点的父节点是同一个节点 根节点 没有父节点的节点 叶(子)节点 没有子节点的节点...节点的高度 节点到叶节点的最长路径(边数) 树的高度 根节点的高度 节点的深度 根节点到该节点所经历的边的个数 节点的层数 节点的深度+1 二叉树(Binary Tree) 最常用的树结构...满二叉树 叶节点全在最底层,除叶节点外,每个节点都有左右两个子节点 完全二叉树 叶节点都在最底下两层,最后一层的叶节点都靠左排列,且除最后一层,其他层节点个数都达到最大 为啥就把最后一层的叶子节点靠左排列的叫完全二叉树...堆也是一种完全二叉树,所以其最常用的存储方式就是数组。 二叉树的遍历 经典遍历 前序遍历 对于树中的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树。...递归代码的关键就是递推公式,递推公式的关键就是,如果要解决问题A,就假设子问题B、C已经解决,然后再来看如何利用B、C来解决A。

    63420

    《重学数据结构》之什么是二叉树?

    基本概念 树,一种非线性表数据结构: 节点 “树”里面的每个元素 父子关系 连线相邻节点之间的关系 兄弟节点 节点的父节点是同一个节点 根节点 没有父节点的节点 叶(子)节点 没有子节点的节点...节点的高度 节点到叶节点的最长路径(边数) 树的高度 根节点的高度 节点的深度 根节点到该节点所经历的边的个数 节点的层数 节点的深度+1 二叉树(Binary Tree) 最常用的树结构。...满二叉树 叶节点全在最底层,除叶节点外,每个节点都有左右两个子节点 完全二叉树 叶节点都在最底下两层,最后一层的叶节点都靠左排列,且除最后一层,其他层节点个数都达到最大 为啥就把最后一层的叶子节点靠左排列的叫完全二叉树...堆也是一种完全二叉树,所以其最常用的存储方式就是数组。 二叉树的遍历 经典遍历 前序遍历 对于树中的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树。...递归代码的关键就是递推公式,递推公式的关键就是,如果要解决问题A,就假设子问题B、C已经解决,然后再来看如何利用B、C来解决A。

    34510

    数据结构【顺序结构二叉树:堆】(1)

    ⼤层次;如上图:树的⾼度为 4 结点的祖先:从根到该结点所经分⽀上的所有结点;如上图: A 是所有结点的祖先 路径:⼀条从树中任意节点出发,沿⽗节点-⼦节点连接,达到任意节点的序列;⽐如A到Q的路径为...也就是说,如果⼀ 个⼆叉树的层数为 K ,且结点总数是2 − ,则它就是满⼆叉树。 满二叉树就是每个节点都是满的 完全二叉树 完全⼆叉树是效率很⾼的数据结构,完全⼆叉树是由满⼆叉树⽽引出来的。...第二步:判断父节点大于当前节点,就交换数据,然后让size走到父亲节点,再找当前节点的父亲节点。...堆排序时间复杂度计算 TOP-K问题 TOP-K问题:即求数据结合中前K个最⼤的元素或者最⼩的元素,⼀般情况下数据量都⽐较⼤。 ⽐如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。...对于Top-K问题,能想到的最简单直接的⽅式就是排序,但是:如果数据量⾮常⼤,排序就不太可取了 (可能数据都不能⼀下⼦全部加载到内存中)。

    8010

    在二叉树中找到一个节点的后继节点

    【题目】现在有一种新的二叉树节点类型如下: public class Node { public int value; public Node left;...Node parent; public Node(int data) { this.value = data; } } 该结构比普通二叉树节点结构多了一个指向父节点的...假设有一棵该Node类型的节点组成的二叉树,树中每个节点的parent指针 都正确地指向自己的父节点,头节点的parent指向null。...只给一个在二叉树中的某个节点 node,请实现返回node的后继节点的函数。 在二叉树的中序遍历的序列中, node的下一个节点叫作node的后继节点。node的上一个节点叫作node的钱去节点....,如某树遍历结果是5 1 4 3 8 7 9,那么1的后继结点就是4,1的前驱结点是5 第一种方法 : 很简单,中序遍历整个树,把结果存起来,查一下要找的数后面的值即可.但是这种时间复杂度比较高,每次需要遍历整个树

    38730

    二叉树的堂兄弟节点

    题目: 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。...我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。 只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。...null,4,null,5], x = 5, y = 4 输出:true 示例 3: 输入:root = [1,2,3,null,4], x = 2, y = 3 输出:false 分析 这是一道标准的二叉树递归搜索问题...首先,根据题目定义好的TreeNode可以获取到当前节点的值,以及左子树和右子树。 我们初始化传入节点,父节点(root没有父节点,传自身),以及最大深度(初始为0)。...遍历过程中比较x,y的数值,并记录深度和父节点,当节点不存在返回即可。

    37420

    树——构造遍历二叉树

    #代表空节点):"); Create(T); //我是省略号// } 遍历二叉树 //二叉树的先序遍历// void travel_pre(TNode T) { if(T==NULL...这是一道OJ题,请移步HDU1710 因为还原二叉树是一个递归的问题,将复杂地问题简化为一个个小问题,所以就拿三个结点的二叉树举栗。...先序:ABC; 中序:BAC; 我们都知道先序遍历是根左右,而中序遍历是左根右,我们可以通过先序找到根节点,根据中序中根节点的位置,就可以找到根节点的左子树(左孩子),和右子树(右孩子);根据这个规则就可以还原一颗二叉树了...不难发现根节点是A,那么中序中的1k就为左子树,k尾就为右子树。同理,先序中pre+1pre+k为左子树,pre+k+1尾为右子树。其他以此类推。 ?...中序+后序构造二叉树和先序+中序构造二叉树类似,关键之处在于,找到每个二叉结点的根,左孩子,右孩子的位置,然后递归就可以了。

    57710

    .二叉树的堂兄弟节点

    题目: 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。...我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。 只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。...null,4,null,5], x = 5, y = 4 输出:true 示例 3: 输入:root = [1,2,3,null,4], x = 2, y = 3 输出:false 分析 这是一道标准的二叉树递归搜索问题...首先,根据题目定义好的TreeNode可以获取到当前节点的值,以及左子树和右子树。 我们初始化传入节点,父节点(root没有父节点,传自身),以及最大深度(初始为0)。...遍历过程中比较x,y的数值,并记录深度和父节点,当节点不存在返回即可。

    81065

    如何删除二叉搜索树中的节点?

    ,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。...返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点;如果找到了,删除它。说明:要求算法时间复杂度为 O(h),h 为树的高度。...第五种情况有点难以理解,看下面动画: 450.删除二叉搜索树中的节点 动画中颗二叉搜索树中,删除元素7, 那么删除节点(元素7)的左孩子就是5,删除节点(元素7)的右子树的最左面节点是元素8。...这里我在介绍一种通用的删除,普通二叉树的删除方式(没有使用搜索树的特性,遍历整棵树),用交换值的操作来删除目标节点。...因为二叉搜索树添加节点只需要在叶子上添加就可以的,不涉及到结构的调整,而删除节点操作涉及到结构的调整。 这里我们依然使用递归函数的返回值来完成把节点从二叉树中移除的操作。

    1.4K30

    寻找树中最左下方节点的值

    来源 lintcode-寻找树中最左下节点的值 描述 给定一棵二叉树,找到这棵树最中最后一行中最左边的值。...样例 输入:[2,1,3] 输出:1 输人:[1,2,3,4,5,6,#,#,7] 输出:7 解题思路 首先这道题一看就是层次遍历,这里帮大家回顾下二叉树的层次遍历.二叉树介绍及其前中后遍历实现....然后这里要求得最左边的值,那么怎么才能知道当前拿到的节点是不是最后一个节点呢? 再想一下,我们平时的层次遍历拿到的是什么样子的呢?...拿到的是从左到右的顺序,那么最后一个节点,就是最右下角的节点,那么,每一层从右向左遍历,最后一个就是最左的节点啦!...实现代码 /** * 寻找树中最左下角的值 * @param root * @return */ public int findBottomLeftValue(TreeNode root) {

    1.6K20

    rac节点频繁重启的问题分析

    环境:两台联想R680的物理机搭建一套2节点RAC,数据库版本为ORACLE 11.2.0.4 一、故障问题现象: 节点2频繁发生重启,从1月至2月发生多次重启,甚至一天内3次重启,让人头疼。 ?...2、数据库日志反应的问题 通过查ALERT日志,发现有节点驱逐 ? 又查CSSD日志发现 ? 显示有磁盘的心跳,但无网络的心跳。...此时判断:node 2 节点老是频繁重启,私网出问题的概率会较大,因此从网络处查。node 2 每次重启完以后,都能顺利加入rac集群,更不是时间同步的问题。 ...如果集群只包含2个节点,则会出现脑裂,结果是节点号小的节点存活下来,即使是节点号小的节点存在网络问题。...在节点发生重启时,数据库的日志里有中断的现象,那么会不会是CPU和内存的问题呢?检查下MCELOG日志就知道了。

    1.5K30
    领券