首页 > 其他分享 >树哈希 学习笔记

树哈希 学习笔记

时间:2022-08-28 10:34:24浏览次数:86  
标签:同构 哈希 res mid 笔记 son 学习 ull

1.做法(from peehs_moorhsum)

设 \(h(u)\) 表示一个点的哈希值,\(f\) 为一随机函数。

\(h(u)=1+\sum\limits_{v\in son_{u}}f(h(v))\)

首先 \(f\) 的选择大概率是随机的,只要尽量不选多项式即可。(微调一下)。

ull d(ull x){
    return x*x*x*19260817+20220827;
}
ull f(ull x){
    ull cal=d(x & ((1<<31)-1)) + d(x>>31);
    return cal;
}

板子题:树哈希

2.例题

Luogu P5043

因为是无根树,所以我们要选一个根来方便比较。选择树的重心来做是比较好的,但是一棵树最多可以有两个重心。所以判断是都同构有很多条件。

两棵无根树是否同构首先要看重心数量是否相同,然后判断是否两棵树中至少有一对重心的哈希值是相同的。

代码:Link

HDU 6647

首先这道题非常恶心,我的代码必须开了 \(\rm Ofast\) 才能通过。

我们首先考虑如果根确定的话,怎么统计答案。

我们考虑遍历整颗树,对于每一个节点统计以当前节点为根的子树内部答案为多少,设其为 \(res_u\) 。当考虑到一个点的时候,我们在不考虑重复的情况下,其所有儿子的括号序的合并的总数为:\(\mid son_u\mid \times \prod_{v\in son_u} res_v\) 。然后我们把所有重复的删去,我们发现当两棵树同构是他们的先后位置不会改变序列的形态,所以我们要把所有的同构的子树全部找出来,设 \(cnt_{u,v}\) 表示 \(u\) 子树中哈希值为 \(v\) 的数量,那么最后的结果就是:\(res_u=\mid son_u\mid \times \prod_{v\in son_u} res_v \times \prod_{k}\frac{1}{cnt_{u,k}}\) 。

那么一遍 \(DFS\) 就可以求出来以特定点为根的所有答案。

对于所有点,其实只要再换个根就可以了,但是换根的难易程度依赖树哈希的写法,使用上面介绍的做法,可以比较轻松的实现换根,写起来比较容易。

代码:Link

Luogu P4323

无根树哈希板子题。

因为 \(B\) 中多出来的点一定为叶子节点,那么以这个点为根时,这个点有唯一的儿子,且删去这个点后,新树和 \(A\) 树同构。

所以我们可以 \(O(n)\) 的算出来以 \(A\) 中任何一个点为根的有根树哈希值和以 \(B\) 中任何一个点为根的有根树哈希值。

然后检查 \(B\) 中每一个度数为 \(1\) 的点,看他的儿子的哈希值是否在 \(A\) 树计算出来的哈希值中。这样找到最小值即可。

代码:Link

标签:同构,哈希,res,mid,笔记,son,学习,ull
From: https://www.cnblogs.com/Vitheon/p/16632331.html

相关文章

  • 高并发系统设计思考笔记
    一、性能度量的指标如何衡量系统接口的响应时间?平均值平均值是把统计时间段内所有请求的响应时间数据相加,再除以总请求数。平均值的敏感度差最大值统计时间段内所......
  • js无限debugger学习总结
    静态js代码debugger1.几千个含有debugger的script标签<script>debugger;</script><script>debugger;</script><script>debugger;</script>.........
  • 加密算法学习之SM4
    pom引入:<!--SM国密加密--><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.56</version></dependen......
  • vue3项目-小兔鲜儿笔记-02-首页模块01
    1.less自动化导入安装一个vue-cli插件,自动导入less文件vueaddstyle-resources-loader2.头部分类导航组件渲染实现头部一级分类和二级分类的渲染基本步骤:定......
  • ML第21周学习小结
    本周收获总结一下本周学习内容:1、《机器学习》第14章:概率图模型14.1隐马尔可夫模型14.2马尔科夫随机场14.3条件随机场14.4学习与推断14.5近似推断14.6话......
  • 深度学习:卷积神经网络(下)【一些经典的神经网络模型】
    1、深度卷积神经网络(AlexNet)......
  • 【Java学习Day08】数据类型、变量及字节
    数据类型强类型语言要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用弱类型语言要求变量的使用要符合规定,所有变量都必须先定义后才能使用Java......
  • 机器学习:概率图模型
    1、基本概念概率图模型(probabilisticgraphicalmodel)是一类用图结构来表达各属性之间相关关系的概率模型,一般而言:图中的一个结点表示一个或一组随机变量,结点之间的边则......
  • Linux应急响应学习
    Linux应急响应-系统日志排查-溯源溯源找到攻击者。系统日志分析攻击者的ip 攻击者可能留下了一些代码样本网上的信息很大程度上是不可信的。方法:蜜罐 高交互的蜜......
  • Makefile笔记 韦东山通用Makefile解析
    目录Makefile基础Makefile规则与示例简单的Makefile文件2个重要的函数一步步完善Makefile通用Makefile零星知识点设计思想通用Makefile源码解析目录结构通用Makefile源码参......