快速学习-梅克尔-帕特里夏树
梅克尔-帕特里夏树 Merkel-Patricia Tree(MPT)
MPT是什么
- Merkel Patricia Tree (MPT),翻译为梅克尔-帕特里夏树
- MPT 提供了一个基于密码学验证的底层数据结构,用来存储键值对(key-value)关系
- MPT 是完全确定性的,这是指在一颗 MPT 上一组键值对是唯一确定的,相同内容的键可以保证找到同样的值,并且有同样的根哈希(root hash)
- MPT 的插入、查找、删除操作的时间复杂度都是O(log(n)),相对于其它基于复杂比较的树结构(比如红黑树),MPT 更容易理解,也更易于编码实现
从字典树(Trie)说起
- 字典树(Trie)也称前缀树(prefix tree),属于搜索树,是一种有序的树数据结构
- 字典树用于存储动态的集合或映射,其中的键通常是字符串
基数树(Radix Tree)
基数树又叫压缩前缀树(compact prefix tree),是一种空间优化后的字典树,其中如果一个节点只有唯一的子节点,那么这个子节点就会与父节点合并存储
基数树节点
在一个标准的基数树里,每个节点存储的数据如下:[i0, i1, … in, value]
- 这里的 i0,i1,…,in 表示定义好的字母表中的字符,字母表中一共有n+1个字符,这颗树的基数(radix)就是 n+1
- value 表示这个节点中最终存储的值
- 每一个 i0 到 in 的“槽位”,存储的或者是null,或者是指向另一节点的指针
- 用节点的访问路径表示 key,用节点的最末位置存储value,这就实现了一个基本的键值对存储
示例
- 我们有一个键值对{ “dog”: “puppy” },现在希望通过键 dog 访问它的值;我们采用16进制的 Hex 字符作为字符集
- 首先我们将 “dog” 转换成 ASCII 码,这样就得到了字符集中的表示 64 6f 67,这就是树结构中对应的键
- 按照键的字母序,即 6->4->6->f->6->7,构建树中的访问路径
- 从树的根节点(root)出发,首先读取索引值(index)为 6 的插槽中存储的值,以它为键访问到对应的子节点
- 然后取出子节点索引值为 4 的插槽中的值,以它为键访问下一层节点,直到访问完所需要的路径
- 最终访问到的叶子节点,就存储了我们想要查找的值,即“puppy”
基数树的问题
数据校验
- 基数树节点之间的连接方式是指针,一般是用32位或64位的内存地址作为指针的值,比如C语言就是这么做的。但这种直接存地址的方式无法提供对数据内容的校验,而这在区块链这样的分布式系统中非常重要。
访问效率
- 基数树的另一个问题是低效。如果我们只想存一个 bytes32 类型的键值对,访问路径长度就是64(在以太坊定义的 Hex 字符
集下);每一级访问的节点都至少需要存储 16 个字节,这样就需要至少 1k 字节的额外空间,而且每次查找和删除都必须完整
地执行 64 次下探访问。
梅克尔树(Merkel Tree)
也被称作哈希树(Hash Tree),以数据块的 hash 值作为叶子节点存储值。梅克尔树的非叶子节点存储其子节点内容串联拼接后的 hash 值。
快速学习-梅克尔-帕特里夏树相关推荐
- 区块链入门系列之梅克尔帕特里夏树
区块链入门系列文章 区块链基本概念和名词解释 P2P 共识算法 梅克尔-帕特里夏树 从零开始搭建区块链 这里写自定义目录标题 区块链入门系列文章 前言 Merkle树 MPT 总结 前言 在讲基本概念 ...
- 区块链100讲:梅克尔树保障区块链数据不可篡改,想换根就要砍树!
2019独角兽企业重金招聘Python工程师标准>>> 区块链100讲上期我们讲了哈希算法和公开密钥算法,说到哈希算法提到了一个名词"Merkle tree",梅 ...
- Merkle Tree(梅克尔树)算法解析
Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶 ...
- Merkle Patricia Tree 梅克尔帕特里夏树(MPT)规范
Merkle Patricia Tree 梅克尔帕特里夏树(MPT)规范 2017/4/15 posted in Solidity深入浅出系列 Merkle Patricia Tree1,梅克尔帕特 ...
- Merkle Patricia Tree 梅克尔帕特里夏树(MPT)详细介绍
Merkle Patricia Tree [1],梅克尔帕特里夏树,提供了一个基于加密学的,自校验防篡改的数据结构,用来存储键值对关系.后文中将简称为MPT.尽管在本规范范围内,我们限定键值的类型只能 ...
- Merkle Patricia Tree 梅克尔帕特里夏树(MPT)规范(笔记)
Merkle Patricia Tree1,梅克尔帕特里夏树,提供了一个基于加密学的,自校验防篡改的数据结构,用来存储键值对关系.后文中将简称为MPT.尽管在本规范范围内,我们限定键值的类型只能是字符 ...
- 快速学习-帕特里夏树
帕特里夏树(Patricia Tree) 如果一个基数树的"基数"(radix)为2或2的整数次幂,就被称为"帕特里夏树",有时也直接认为帕特里夏树就是基数树 ...
- 梅克尔树Merkle trees
世人皆知区块链,却不知梅克尔树呀 最近,研究中本聪大神的论文,他提到了梅克尔树让我很好奇, 打算研究一下,谁知道网上各种乱天飞的文章几乎都定义成: 梅克尔树(Merkle trees)是区块链的基本组 ...
- java merkle树,梅克尔树Merkle trees
世人皆知区块链,却不知梅克尔树呀 最近,研究中本聪大神的论文,他提到了梅克尔树让我很好奇, 打算研究一下,谁知道网上各种乱天飞的文章几乎都定义成:梅克尔树(Merkle trees)是区块链的基本组成 ...
最新文章
- Excution failed for task ':app:transformClassWithDexForDebug'
- 了解EF CodeFirst的Migrator功能与Migrator.Net对比
- zabbix 3.2安装部署(一)
- 九章算法 | 骑士的最短路线-BFS
- java treemap用法_JAVA作业,使用TreeMapK,V类
- 人工智能第二课:认知服务和机器人框架探秘
- 游戏桌面壁纸|英雄联盟,热爱游戏的朋友看这里
- string s=new string() 创建了几个对象_Java的String类5个常见面试题的解答过程和原理...
- 谈谈能带来高薪报酬的软件技术
- 10.一文了解JAVA反射超详尽知乎
- 压缩(minify)
- Java项目:JSP酒店客房管理系统
- 文档被administrator锁定怎么解除
- Qualcomm Ramdump debugging
- 个人邮箱怎么注册?手机怎么注册个人邮箱呢?
- 揭开Angular 7的神秘面纱
- 星号下三角形python答案_Python练习题:星号三角形
- 申请免费域名、配置域名以及https证书设置
- 翻译: 2.7. 如何利用帮助文档 深入神经网络 pytorch
- mysql学习记录之创建数据库指定编码