【数据结构】树哈希

目录

  • 一、树的同构
    • 1. 定义
    • 2. 具体理解
      • (1) 结点对应
      • (2) 孩子相同
      • (3) 递归性质
    • 3. 示例
  • 二、树哈希
    • 1.定义
    • 2.哈希过程
      • (1)叶节点哈希
      • (2)非叶节点哈希
      • (3)组合哈希值
    • 3.性质
    • 4.应用
    • 5.示例
      • (1)*first step*
      • (2)*second step*
      • (3)*third step*


一、树的同构

树的同构是一个重要的概念,以下是关于树的同构的详细定义:

1. 定义

给定两棵树 T 1 T1 T1 T 2 T2 T2,如果 T 1 T1 T1可以通过若干次左右孩子互换就变成 T 2 T2 T2,则称这两棵树是“同构”的。这意味着,两棵树中的每两个对应结点的孩子必须相同,但左右位置可以不一样。

2. 具体理解

(1) 结点对应

两棵树中的结点需要一一对应,即每一个结点都有一个与之对应的结点,且这些对应结点的需要相等。

(2) 孩子相同

对应结点的孩子(即子结点)必须相同,也就是说,对应结点左孩子和右孩子的数量和值都要相等,但它们的左右位置可以互换。

(3) 递归性质

由于树是递归定义的,因此树的同构也具有递归性质。即,如果两棵树的根结点对应,且它们的左子树和右子树(不考虑左右顺序)分别同构,则这两棵树就是同构的。

3. 示例

例如,有以下两棵树:

  • A A A:根结点为 1 1 1,左子结点为 2 2 2,右子结点为 3 3 3
  • B B B:根结点为 1 1 1,左子结点为 3 3 3,右子结点为 2 2 2

虽然树 A A A和树 B B B的左右子结点位置不同,但它们的根结点值相同,且左子结点和右子结点的值也相同(只是位置互换),因此可以认为这两棵树是同构的。

综上所述,树的同构是一个基于结点对应和孩子相同(左右位置可互换)的递归概念。

二、树哈希

树哈希(Tree Hash)是对树形数据结构进行哈希处理的一种方法。以下是对树哈希的详细解释:

1.定义

树哈希是一种哈希算法,它通过对树形数据结构中的每个节点进行哈希计算,并将这些哈希值组合起来,以生成整个树的唯一哈希值。这个哈希值可以作为树的“数字指纹”,用于快速比较两棵树是否相同或检测树的修改。

2.哈希过程

(1)叶节点哈希

首先,对树中的每个叶节点进行哈希计算,生成叶节点的哈希值。这些哈希值通常作为叶节点的标签或标识符。

(2)非叶节点哈希

对于非叶节点(包括中间节点和根节点),它们的哈希值是通过对其子节点的哈希值进行进一步哈希计算得到的。具体来说,可以将子节点的哈希值作为输入,应用哈希函数来生成非叶节点的哈希值。

(3)组合哈希值

在生成非叶节点的哈希值时,通常需要按照一定的顺序或规则来组合其子节点的哈希值。这可以确保哈希值的唯一性和一致性。

3.性质

(1) 唯一性 \red{\texttt{唯一性}} 唯一性

对于不同的树形数据结构,即使它们包含相同的节点和边,但只要结构不同(例如节点的排列顺序不同),它们的哈希值也将不同。

(2)快速比较

通过比较两棵树的哈希值,可以快速判断它们是否相同。如果哈希值相同,则两棵树在结构上必然相同;如果哈希值不同,则两棵树在结构上必然不同。

(3)检测修改

哈希值对树的修改非常敏感。即使对树中的某个节点进行微小的修改(例如更改节点的值或添加/删除节点),也会导致整个树的哈希值发生变化。

4.应用

例如算法优化,在算法设计中,树哈希可以用于优化某些算法的性能。例如,在字符串匹配算法中,可以使用树哈希来快速比较两个字符串的子串是否相同。

5.示例

假设有以下树形数据结构:

我们可以按照以下步骤计算整个树的哈希值:

(1)first step

计算叶节点 D D D E E E C C C的哈希值,分别记为 H ( D ) H(D) H(D) H ( E ) H(E) H(E) H ( C ) H(C) H(C)

(2)second step

计算非叶节点 B B B的哈希值,可以使用 H ( B ) = H a s h ( H ( D ) + H ( E ) ) H(B)=Hash(H(D) + H(E)) H(B)=Hash(H(D)+H(E))(这里的“ + + +”表示哈希值的组合方式,可以是拼接、异或等操作)。

(3)third step

计算根节点 A A A的哈希值,可以使用 H ( A ) = H a s h ( H ( B ) + H ( C ) ) H(A)=Hash(H(B) + H(C)) H(A)=Hash(H(B)+H(C))

最终,整个树的哈希值就是 H ( A ) H(A) H(A)

综上所述,树哈希是一种强大的工具,可以用于快速比较和检测树形数据结构的完整性和一致性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/965135.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

渗透测试之文件包含漏洞 超详细的文件包含漏洞文章

目录 说明 通常分为两种类型: 本地文件包含 典型的攻击方式1: 影响: 典型的攻击方式2: 包含路径解释: 日志包含漏洞: 操作原理 包含漏洞读取文件 文件包含漏洞远程代码执行漏洞: 远程文件包含…

Mysql:数据库

Mysql 一、数据库概念?二、MySQL架构三、SQL语句分类四、数据库操作4.1 数据库创建4.2 数据库字符集和校验规则4.3 数据库修改4.4 数据库删除4.4 数据库备份和恢复其他 五、表操作5.1 创建表5.2 修改表5.3 删除表 六、表的增删改查6.1 Create(创建):数据新增1&#…

ChatGPT怎么回事?

纯属发现,调侃一下~ 这段时间deepseek不是特别火吗,尤其是它的推理功能,突发奇想,想用deepseek回答一些问题,回答一个问题之后就回复服务器繁忙(估计还在被攻击吧~_~) 然后就转向了GPT&#xf…

Vue 中如何嵌入可浮动的第三方网页窗口(附Demo)

目录 前言1. 思路Demo2. 实战Demo 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 1. 思路Demo 以下Demo提供思路参考,需要结合实际自身应用代码 下述URL的链接使用百度替代! 方式 1…

【Linux】23.进程间通信(2)

文章目录 3. 进程间通信3.1 进程间通信介绍3.1.1 进程间通信目的3.1.2 进程间通信发展 3.2 什么是进程间通信3.3 管道3.4 匿名管道pipe()3.4.1 站在文件描述符角度-深度理解管道3.4.2 站在内核角度-管道本质3.4.3 用fork来共享管道原理3.4.5 管道相关知识3.4.6 代码一&#xff…

AI大模型开发原理篇-8:Transformer模型

近几年人工智能之所以能迅猛发展,主要是靠2个核心思想:注意力机制Attention Mechanism 和 Transformer模型。本次来浅谈下Transformer模型。 重要性 Transformer模型在自然语言处理领域具有极其重要的地位,为NLP带来了革命性的突破‌。可以…

html2canvas绘制页面并生成图像 下载

1. 简介 html2canvas是一个开源的JavaScript库,它允许开发者在用户的浏览器中直接将HTML元素渲染为画布(Canvas),并生成图像。以下是对html2canvas的详细介绍: 2. 主要功能 html2canvas的主要功能是将网页中的HTML元…

基于RK3588/RK3576+MCU STM32+AI的储能电站电池簇管理系统设计与实现

伴随近年来新型储能技术的高质量规模化发展,储能电站作为新能源领域的重要载体, 旨在配合逐步迈进智能电网时代,满足电力系统能源结构与分布的创新升级,给予相应规模 电池管理系统的设计与实现以新的挑战。同时,电子系…

机器学习-线性回归(参数估计之结构风险最小化)

前面我们已经了解过关于机器学习中的结构风险最小化准则,包括L1 正则化(Lasso)、L2 正则化(Ridge)、Elastic Net,现在我们结合线性回归的场景,来了解一下线性回归的结构风险最小化,通…

【数据分析】豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask)

豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask) 豆瓣电影Top250官网:https://movie.douban.com/top250写在前面 实验目的:实现豆瓣电影Top250详情的数据分析与Web网页可视化。电脑系统:Windows使用软件:PyCharm、NavicatPython版本:Python 3.…

备考蓝桥杯8——EEPROM读写

目录 看手册时间 关于IIC 附录 IIC代码 看手册时间 我们主要是搞编程,所以,我们一般会非常关心我们如何对EEPROM进行编程。特别的,EEPROM要做读写,首先是看它的IIC设备地址。 有趣的是——我们的EEPROM的IIC地址是根据地址进行…

深入浅出:旋转变位编码(RoPE)在现代大语言模型中的应用

在现代大语言模型(LLMs)中,位置编码是一个至关重要的组件。无论是 Meta 的 LLaMA 还是 Google 的 PaLM,这些模型都依赖于位置编码来捕捉序列中元素的顺序信息。而旋转变位编码(RoPE) 作为一种创新的位置编码…

“message“: “类型注释只能在 TypeScript 文件中使用

VScode中使用CtrlShiftP打开搜素框,输入Preferences: Open User Settings或Preferences: Open Workspace Settings。 找到settings.json文件 "typescript.validate.enable": false

VSCode中使用EmmyLua插件对Unity的tolua断点调试

一.VSCode中搜索安装EmmyLua插件 二.创建和编辑launch.json文件 初始的launch.json是这样的 手动编辑加上一段内容如下图所示: 三.启动调试模式,并选择附加的进程

SQL 秒变三线表 sql导出三线表

🎯SQL 秒变三线表,校园小助手超神啦 宝子们,搞数据分析、写论文的时候,从 SQL 里导出数据做成三线表是不是特别让人头疼😩 手动调整格式,不仅繁琐,还容易出错,分分钟把人逼疯&#…

学习threejs,pvr格式图片文件贴图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️PVR贴图1.2 ☘️THREE.Mesh…

力扣1022. 从根到叶的二进制数之和(二叉树的遍历思想解决)

Problem: 1022. 从根到叶的二进制数之和 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的先序遍历) 1.在先序遍历的过程中,用一个变量path记录并更新其经过的路径上的值,当遇到根节点时再将其加到结果值res上; 2.该题…

.NET 中实现生产者-消费者模型,BlockingCollection<T> 和 Channel<T>使用示例

一、方案对比&#xff1a;不同线程安全集合的适用场景 二、推荐方案及示例代码 方案 1&#xff1a;使用 BlockingCollection&#xff08;同步模型&#xff09; public class QueueDemo {private readonly BlockingCollection<int> _blockingCollection new BlockingCo…

C_位运算符及其在单片机寄存器的操作

C语言的位运算符用于直接操作二进制位&#xff0c;本篇简单结束各个位运算符的作业及其在操作寄存器的应用场景。 一、位运算符的简单说明 1、按位与运算符&#xff08;&&#xff09; 功能&#xff1a;按位与运算符对两个操作数的每一位执行与操作。如果两个对应的二进制…

Redis入门概述

1.1、Redis是什么 Redis&#xff1a;官网 高性能带有数据结构的Key-Value内存数据库 Remote Dictionary Server&#xff08;远程字典服务器&#xff09;是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;例如String、Hash、List、Set、SortedSet等等。数据…