[数据结构] 树哈希(待补)
Posted 鱼竿钓鱼干
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[数据结构] 树哈希(待补)相关的知识,希望对你有一定的参考价值。
树哈希
无权树
哈希函数设计
设hs[x]表示以x为根的子树的哈希值
h s [ x ] = ∑ ( h s [ y ] ∗ p r i m e [ s i z e [ y ] ] ) hs[x]=\\sum(hs[y]*prime[size[y]]) hs[x]=∑(hs[y]∗prime[size[y]])
其中y是x的儿子, s i z [ y ] siz[y] siz[y]是以y为根的子树的大小,prime[i]是第i个质数
其实这个函数就跟子树大小有关,那么这样的hash函数有个好处是可以换根
dfs一遍之后,我们只能得到一个根上的哈希值(只有hs[1]代表的是整颗树的hash值)
但是经常有题目要计算每个点为根的hash值(特别是无根树)
换根hs[x]->hs[y],y是x的子节点
int vx=hs[x]-hs[y]*prime[siz[y]];
hs[y]+=vx*prime[n-siz[y]];
有权树
以上是关于[数据结构] 树哈希(待补)的主要内容,如果未能解决你的问题,请参考以下文章