[数据结构] 树哈希(待补)

Posted 鱼竿钓鱼干

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[数据结构] 树哈希(待补)相关的知识,希望对你有一定的参考价值。

树哈希

参考:
树哈希(Tree Hash)
哔哩哔哩koko

无权树

哈希函数设计

设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]];

有权树

以上是关于[数据结构] 树哈希(待补)的主要内容,如果未能解决你的问题,请参考以下文章

BobHuang的待补题目

2022牛客寒假算法基础集训营3题解 BCEFGHIJK

HashMap原理:哈希函数的设计

下文中的哈希片段指的是啥?

哈希表 Map Golang实现,使用红黑树和AVL树-性能爆表-非递归版本

哈希表 Map Golang实现,使用红黑树和AVL树-性能爆表-非递归版本