首页 > TAG信息列表 > 子树
统计学习方法学习笔记-05-决策树
首先介绍决策树的基本概念,然后通过\(ID3\)和\(C4.5\)介绍特征的选择、决策树的生成以及决策树的修剪,最后介绍\(CART\)算法 决策树模型与学习 分类决策树模型的树结构有两种结点,内部结点表示一个特征或属性,叶结点表示一个类; 决策树所有的从根节点到叶结点的路径构成if-else规则集,NOI2022 挑战 NPC Ⅱ(哈希-树,dfs)
NOI2022 挑战 NPC Ⅱ 给两棵树大小差 \(k \le 5\),问能不能通过删 \(k\) 个叶节点使两棵树同构。 CODE 先预处理两棵树所有子树哈希值(这里用的是 xorshift,也可以用括号,用质数会碰撞)直接 bool match(u, v) 表示匹配两棵树上的 \(u, v\) 两点。如果两点的子树哈希值归并排序后不能抵平衡二叉树(ALV树)旋转问题
初次学习数据结构和算法是几年前的事情了,当时遇到的困难没有记录下来。回过头来复习,记录下学习时遇到的问题。 平衡二叉树(二叉搜索树)(ALV树)可以保证查询效率。在此之前先学习二叉排序树(BST —— Binary Sort Tree)。 在高度为h的ALV树中,最小节点数 S(h) = S( h - 1 ) + S( hleetcode1373. 二叉搜索子树的最大键值和
原题链接:https://leetcode.cn/problems/maximum-sum-bst-in-binary-tree/ 给你一棵以 root 为根的 二叉树 ,请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下: 任意节点的左子树中的键值都 小于 此节点的键值。 任意节点的右子树中的键值都 大于 此节点的键LG3565 [POI2014]HOT-Hotels 题解
P3565 [POI2014]HOT-Hotels 给定一棵树,在树上选 \(3\) 个点,要求两两距离相等,求方案数。 原题数据范围 \(n\leq 5000\),可做到线性,空间 \(62.5\text{MB}\)。 sub1 \(n\leq 5000\) 不用多说,直接枚举每一个点作为中点,统计这个点不同的三颗子树中点的选取方案数。定义 \(f_i\) 为先前Solution - NOI 2022
游记 目前只有两个题题解(代码没有),啥时候数据出了我再来补剩下的。 众数 Solution 有个题叫「POI2014」Couriers,这个题启示我们实际上问题等价于询问哪个数出现次数最多,最后只需要判断是否超过一半即可。 考虑线段树,对于一个序列,开一棵线段树维护上面的权值,单个序列的查询可以在线NC15033 小G有一个大树
题目链接 题目 题目描述 小G想要把自己家院子里的橘子树搬到家门口(QAQ。。就当小G是大力水手吧) 可是小G是个平衡性灰常灰常差的人,他想找到一个这个橘子树的平衡点。 怎么描述这棵树呢。。。就把它看成由一个个节点构成的树吧。结点数就 代表树重。 输入描述 多组数据输入输出, 第一CodeForces-1671E Preorder
Preorder 树型 dp + 思维 \(dp[i]\) 表示以 \(i\) 为根的子树通过变换有多少种不同的先序遍历 状态转移方程: 当左右子树不同,两个子树交换位置之后,没有重复的出现:\(dp[x] = dp[lson] * dp[rson] * 2\) 当左右子树相同时,两个子树交换位置后,会有相同的出现:\(dp[x] = dp[lson] * d[NOIP2001 普及组] 求先序排列
试题分析:题目中提及了树的先序,中序,后序排列,所以我们需要先知道这三种排列是什么意思。 二叉树的3种(深度优先)排列: 先序排列,“根左右”。即对于二叉树的每一个子树,先访问其根,再分别遍历其左右儿子(子树)。 中序排列,“左根右”。即对于二叉树的每一个子树,先遍历其左儿子,再访问其根,然后Treap
因为说太多遍了,所以打算直接写下来。 OI 中常用的平衡树有很多,但是论码量,一般大家也只会选 splay 或者 treap,但是这两个平衡树经常被说常数很大。 splay 的常数主要在维护它的结构上,信息合并上的常数还不错,也没啥好说的,这里就不提了。 这里说说 treap。 很多人说非旋 treap 常数很浅谈树上启发式合并(DSU on tree)
先看例题 CF600E Lomsat gelral 链接 对于这道题,我们要对每一个子树进行查询。观察一下,很容易想到通过信息的合并让父节点继承子节点的信息。但是对于每个点都开一个桶会MLE sol1 线段树合并 对于每一个节点都开一个线段树,然后进行线段树合并即可。这样做虽然足以通过本题,但空间巨【考试总结】2022-08-04
大家 令一个没有被点亮的点为根,设 \(f_{x,0/1/2,0/1}\) 表示 \(x\) 为根的子树里面有路径的 \(0/1/2\) 个端点,此时得到的不完成的序列使得 \(x\) 的开灭状态为 \(0/1\) 的最小序列长度 值得指出的是,$f_{x,2,*} 的常规理解是 \(x\) 子树中的序列在最终序列中分成两截,\(x\) 在第一截K-D Tree
\(K-D\) \(Tree\) 简述 \(K-D\) \(Tree\)是一种以二叉搜索树为结构,可以高效处理\(k\)维空间信息的数据结构,在处理\(k\)维数点问题上,最差情况下复杂度是\(θ(n \times n^{1 − \frac{1}{k}})\) 拿二维数点为例 \(n\)个二维平面上的点,\(m\)次询问一个二维范围上有多少个点 \((n≤10^树分块小结
树分块 我们发现我们可以对序列分块,值域分块,时间分块,然后分块的本质就是把大小为 \(n\) 的一个集合划分为 \(O(\frac nB)\) 个大小为 \(O(B)\) 的块,所以我们可以对树也进行分块 转序列分块 一个非常 \(naive\) 的想法是我们求出树的 \(dfs\) 序,然后序列分块,这样可以保证: 1.一个点LOJ #2718. 「NOI2018」归程
题目叙述 给定 \(n\) 个点 \(m\) 条边的无向图,每条边有一个长度和一个高度,一个人坐车能走过所有高度 \(>p\) 的边,从 \(v\) 节点出发,要走到 \(1\) 号节点,坐车走不了的就得步行。求最小步行距离,多次询问。 题解 对 1 跑单源最短路。在Kruskal重构树上走能够经过的节点是一个子树。直重修 树的中心重心直径一些特殊的东西
中心 所有直径的中点。 所以中点可能是一条边。 重心 最大的子树最小的点。 (“子树”都是指无根树的子树,即包括“向上”的那棵子树,并且不包括整棵树自身。) 以树的重心为根时,所有子树的大小都不超过整棵树大小的一半。 树中所有点到某个点的距离和中,到重心的距离和是最小的树上分治
1. 点分治 现在有一棵大小为 \(n\) 的树,要求出路径长度小于 \(k\) 的路径。 每次可以通过选择重心的方式,将整棵树分为一堆不大于 \(\dfrac{n}{2}\) 的子树,所以将整棵树分为大小为 \(1\) 的子树需要 \(\log n\) 次。 对于现在求出重心的子树,显然有三种情况可以组成一条路径。 路径[LC814]二叉树剪枝
题目 题目地址 分析 这道题符合递归的性质,对于当前的节点node,当且仅当其左右孩子都为不包含1的子树,且node.val=1时,node所在的子树才符合“不包含1的子树”这一定义。那么很自然的,我们可以采取树的后序处理,递归的处理上述条件,具体代码如下。 代码 Golang代码 /* * @lc app=leetcdsu on tree
子树类查询问题 dsu on tree和长链剖分都是解决子树类静态查询问题的统计类算法。 这类问题首先要是“子树”查询,并且是“静态”不带修改的。 注意某些问题其实不太有必要上dsu on tree,比如子树元素和,子树元素最大值之类的。(可合并区间信息) 例如子树众数,子树元素种类数这些不可合【树】力扣110:平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例1: 输入:root = [1,2,2,3,3,null,null,4,4] 输出:false 示例2: 输入:root = [] 输出:true 这道题是 【力扣104. 二叉树的最大深树的dfs序
二叉树 对于一颗二叉树,它有三种遍历方式:前序、中序、后序 这三种顺序其实都有使用的场景(主要是在分治算法中考虑是递归前,递归进行中,递归后)的区别。 多叉树 在多叉树里面,常用的dfs序其实也有三种:dfs序、扩展dfs序、欧拉序 dfs序类似二叉树的先序遍历 扩展dfs序类似二叉树的先序+中点分治
int siz[Z], kid[Z], root, size;//kid[rt]:该点的最大子树的大小 bool vs[Z]; void getroot(int rt, int fa)//求树的重心 { siz[rt] = 1, kid[rt] = 0; for (re i = head[rt]; i; i = e[i].ne) { int son = e[i].v; if (vs[son] || son == fa) conti树的子结构(判断B是否为A的子树)
https://leetcode.cn/problems/shu-de-zi-jie-gou-lcof/ /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ //思路: //1、递归A树,找到比较B树的入口节点 //2、从入口节点开树的重心
一、树的重心的定义: 在一棵树中,如果我们选择某个结点为根,可以使得它的所有子树中最大的子树最小,那么这个结点就被称作这棵树的重心。 二、树重心的性质: 1.以重心为树根时,所有子树的大小不超过全树大小的一半。 2.如果树的所有边权都为1,那么树中所有点到某个点的距离和中,到重心的距离cf1695 D2. Tree Queries (Hard Version)
题意: 给定一棵边权为1的树,树中有一个特殊节点但不告诉你是哪个。你可以询问一个节点集 \(S\),然后知道特殊点到 \(S\) 中每个点的距离。输出能确定特殊点的 \(|S|\) 的最小值 \(n\le 2e5\) 思路: 题目转化为:对任意点 \(u\),怎样区分特殊点与 \(u\)? 再转化为:要能区分任意两点。即对任