区块链学习笔记(四)【Merkle树】

2023-11-14

一、字典树

字典树的三个基本特征:

1、根节点不包含字符,为空,除根节点外每一个节点只包含一个字符

2、从根节点到某一个节点,路径上经过的字符连接起来,就是该节点对应的字符串

3、每个节点包含的所有子节点的字符都不相同

优势:

相比较于哈希表,使用字典树在查询共有前缀key的数据时十分高效,当前缀为空时,字典树和哈希表都需要遍历整棵树,此时效率相同。并且,字典树不存在哈希表的哈希冲突问题。

缺点:

直接查找的效率低,字典树查找效率为O(m),m为查找节点的key长度,哈希表查找效率为O(1)。

当没有相同前缀的分支时,存储key内容很长的字符串会十分浪费空间。

下面是一个and、as、at、cn、com构造的字典树的例子


二、Patricia树

是一种更加节省空间的字典树,对于每一个节点,如果该节点只有一个子节点,将当前节点和子节点融合,例子如下


三、Merkle树

比特币使用的交易存储结构。也称为hash树,其叶子结点是数据块(文件/文件集合)的hash值,非叶子结点是其对应子节点串联字符串的hash值。

在了解Merkle树之前,我们先了解下Hash List。在点对点网络传输中,我们会从多个机器上下载数据,那么就会存在机器不稳定或者不可信的问题,为了校验数据文件的完整性,我们会将大的文件分割成小的数据块,这样做的好处不仅加快速度,而且如果小的数据块在传输过程中损坏,只需重新下载这一数据块即可。为了确定小的数据块有没有损坏,我们为每个数据块生成一个hash,然后将所有的hash值拼到一起,再对这个长字符串进行hash运算,这样就得到了一个root hash。在下载数据的时候,首先从可信的数据源得到正确的root hash,就可以用他来校验hash list了,然后通过具体的hash来校验数据块。


Merkle树可以看成是Hash List的泛化。不同点在于,Merkle树将相邻的两个hash合并成一个字符串,然后运算生成一个新的hash,从下至上,直到生成一个root hash,如果hash的总数的单数无法配对,那么最后一个单数hash值可以直接进行hash运算或者复制自身组成字符串在进行hash运算。


Merkle树和Hash List的主要区别在于,Merkle树可以直接下载并验证树的一个分支,而hash list必须下载整个列表才能验证。

优点:

当树的节点内容发生变化时,可以快速的对被修改节点进行hash重计算,从而生成一个新的根哈希来代表整棵树的状态

在比特币中,轻节点只需要存储区块头数据,即根哈希的值,而不需要存储整个交易列表,使得区块链可以运行在PC和手机等终端上。

缺点:

存储整个数据的空间开销很大。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区块链学习笔记(四)【Merkle树】 的相关文章

  • 输入pip命令时,报错Fatal error in launcher

    因为之前也有碰到过这样一个问题 当时了解到是升级pip导致的一些错误 后来通过百度找到了一个解决方案 python m pip 只要是需要用到pip的地方 全部加上python m 好了 解决了问题 这是当时的一个解决方法 问题是解决了 当
  • 用Java代码操作RabbitMQ(包括创建和绑定)

    生产者 package com sky rabbitmq all import com rabbitmq client Channel import com rabbitmq client Connection import com rab
  • AcdbTable 例子学习笔记

    Table 例子学习笔记 在这个例子中 ARX向我们展示了ACDBTABLE类的一些基本操作方法 ACDBTABLE类是ACAD2005及其以后的产品 应该是说ACDBDATATABLE的升级产品 AcDbDataCell AcDbData
  • 判断一个list里是否有其他list------集合list的contain方法

    判断一个list里是否有其他list 最近在做项目时需要判断一个list里是否有其他list 首当其冲就直接想到了contains方法 但总是出现Bug 后面找了好久才发现是这个原因 基础太不扎实 list的contains在比较包含对象时
  • 【HarmonyOS】实现从视频提取音频并保存到pcm文件功能(API6 Java)

    关键字 视频提取类Extractor 视频编解码 保存pcm文件 写在前面 在使用API6开发HarmonyOS应用时 通常会开发一些音视频媒体功能 这里介绍如何从视频中提取音频保存到pcm文件功能 生成pcm音频文件后 就可使用音频播放类
  • ES6知识点总结——学习网站及环境搭建

    1 ES6学习网站 ES6官网 https 262 ecma international org 6 0 阮一峰ES6学习电子书 https es6 ruanyifeng com docs let W3Cschool ES6中文教程 htt
  • html5导航栏文字间距,div字间距-div内文字之间间距设置方法

    本篇文章给大家带来的内容是关于div字间距 div内文字之间间距设置方法 有一定的参考价值 有需要的朋友可以参考一下 希望对你有所帮助 div内字与字间距是否可以用CSS代码实现 答案 可以使用css实现div字间距布局 CSS字间距的单词
  • nested exception is java.io.FileNotFoundException: class path resource [applicationContext.xml] cann...

    org apache ibatis exceptions PersistenceException Error building SqlSession The error may exist in pojo UserMapper xml C
  • React hooks + antd前台实现input搜索框实时搜索table表格

    阅读本文前提需掌握react hooks 中useState和useEffect基本用法 详见 可选链 语法糖 文章目录 实现效果 实现步骤 1 引入 2 初始化 3 筛选数据 4 输入和展示数据 实现效果 实现步骤 1 引入 Search
  • 基于单片机语音识别智能家居系统的设计与实现

    功能介绍 以STM32单片机作为主控系统 液晶显示当前环境温湿度 用电器开关状态 通过语音模块识别设定的语音 DHT11进行环境温湿度采集 通过语音播报模块报当前温湿度 智能回复 通过语音识别可以打开灯 窗帘 电视空调等设备 整个电路以5v
  • vue项目运行后如何自动在浏览器中打开

    方法一 配置open 在根目录webpack config js或vue config js中的module exports里面配置devServer open 将open属性值设置为true即可 devServer host localh
  • 总结-深度学习中的正则化方法(regularization)

    深度学习面临的非常严重的一个问题就是过拟合 overfitting 通过一些正则化的方法 可以消除过拟合 从而使我们的模型能够得到更好的效果 1 什么是正则化 这张图 我想接触过机器学习的朋友们应该都看了很多遍了吧 我们先从回归的角度来看待
  • Java编译运行命令

    javac 编译命令 javac是用来编译 java文件的 dos窗口直接输入javac可以看到大量提示信息 提示javac命令的用法 用法 javac
  • 电脑没有摄像头怎么办

    电脑没有摄像头怎么办 电脑没有摄像头但是需要用到摄像头怎么办 没有带数据线但是需要用到手机的摄像头怎么办 下面是采用软件的方式连接电脑作为电脑摄像头的方法 1 iVcam iVCam Use mobile phone as a PC web
  • 服务器简单的命令操作系统,服务器操作系统常用命令

    服务器操作系统常用命令 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 当您发现云服务器的运行速度变慢或云服务器突然出现网
  • 一、django错误集合

    1 django core exceptions ImproperlyConfigured WSGI application LARS wsgi application could not be loaded Error importing
  • 强迫自己学习Jquery三

    元素定位问题 offset 和 position必须要好好看一下 转载于 https www cnblogs com jamesldj p 3323707 html
  • 前端系列之jQuery(jQuery选择的艺术)

    一 jQuery是什么 是一款JavaScript库 方便地处理HTML 事件 动画等 html 处理HTML文档中的DOM节点 如添加 删除等 事件 通过jQuery对页面上的事件进行处理 动画 通过jQuery实现淡入 淡出 滑动等动画
  • node中文件的上传与下载

    一 node基于Express项目实现文件的上传 1 FormData对象 以对象的方式来表示页面中的表单 又称为表单对象 以key value的方式来保存数据 XMLHttpRequest对象可以轻松的表单对象发送的服务器端 1 使用构造
  • HJ9 提取不重复的整数

    描述 输入一个 int 型整数 按照从右向左的阅读顺序 返回一个不含重复数字的新的整数 保证输入的整数最后一位不是 0 数据范围 1 n 10 8 输入描述 输入一个int型整数 输出描述 按照从右向左的阅读顺序 返回一个不含重复数字的新的

随机推荐

  • 理解virt res shr之间的关系 - linux

    转自 https www orchome com 298 想必在linux上写过程序的同学都有分析进程占用多少内存的经历 或者被问到这样的问题 你的程序在运行时占用了多少内存 物理内存 通常我们可以通过top命令查看进程占用了多少内存 这里
  • Kafka权威指南

    第一章 初识Kafka kafka是一款发布订阅的消息系统 具体结构从大向下可以列举为 1个Kafka集群种有N个broker 一个broker有N个主题分区 broker指的是一个独立的Kafka服务器 主题指的是消息的分类 为什么要选用
  • SQLI-Labs(18-22关)请求头注入

    十八关 这里这个提示就是一些浏览器会记录我们的IP信息 那么记录了就会被存储到数据库中就有可能存在SQL注入 这里需要引入几个数据头信息 User agent 浏览器的身份识别字符串 简单来说就是根据这个字段来判断是通过PC端还是手机端访问
  • CentOS一键配置rsync服务器脚本

    1 保存下面的代码为一个文件 上传到服务器端 名称为rsync sh bin bash rsync Written by zhumaohai For more information please visit http www centos
  • JavaSE的复习:Java基本语法

    1 变量 变量的分类 按数据类型 对于每一种数据都定义了明确的具体数据类型 强类型语言 在内存中分配了不同大小的内存空间 弱类型语言则不用明确指明数据类型 例如js var 变量的分类 按声明的位置的不同 在方法体外 类体内声明的变量称为成
  • Oracle安装 在注册表中没有找到指定的主目录名 的解决方案

    在安装数据库的时候 报了个错 在注册表中没有找到指定的主目录名 解决方案就是 忽略 此错误并不影响Oracle的正常使用 亲测可行 也不排除不可用的情况 如果谁遇到了请告知 我将继续补充
  • vue-cli3配置proxy解决前后端域名/端口不一致引起的跨域问题

    错误代码 前端 import axios from axios import VueAxios from vue axios Vue use VueAxios axios this axios post http localhost 808
  • (一)JMeter性能测试,完整入门篇:性能测试操作步骤

    原文转自 https blog csdn net lovesoo article details 78579547 1 Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件 相比Loadrunn
  • sentinel

    文章目录 1 sentinel简介 1 1 sentinel解决的问题 1 2 服务保护技术对比 2 微服务整合sentinel 2 1 引入sentinel依赖 2 2 配置控制台地址 3 限流规则 3 1 流控模式 3 2 流控效果 4
  • 华为路由交换学习篇-ACL

    目录 ACL访问控制列表 基本ACL 高级ACL 实验一 ACL访问控制列表 ACL的分类 按照功能来分 可以分为基本ACL 高级ACL 基于接口的ACL 二层ACL 自定义的ACL 基于MPLS的ACL 基本ACL6 高级ACL6 基本A
  • 考研:研究生考试(十五天学完)之研究生学霸重点知识点总结之考研必知(考研时间/科目/必备物件)、【考研政治】/【考研英语】/【考研数学】经验总结(历年规律分析、技巧总结、经验分享)

    考研 研究生考试 十五天学完 之研究生学霸重点知识点总结之考研必知 考研时间 科目 必备物件 考研政治 考研英语 考研数学 经验总结 历年规律分析 技巧总结 经验分享 文章转自 考研 研究生考试 十五天学完 之研究生学霸重点知识点总结之考研
  • Guava学习笔记之Maps(1):Maps.uniqueIndex(Iterable, Function)

    Guava官方文档 https github com google guava wiki CollectionUtilitiesExplained 官方文档这样描述 Maps uniqueIndex Iterable Function ht
  • 【JavaWeb】四个Scope

    英文科普 scope 范围 域 1 page里的变量没法从index jsp传递到test jsp 只要页面跳转了 它们就不见了 以页面为单位 2 request里的变量可以跨越forward前后的两页 但是只要刷新页面 它们就重新计算了
  • Java中对象的比较

    目录 一 基本数据类型的比较 二 引用数据类型比较 1 equals 方法 1 实现Comparable接口 2 传比较器 一 基本数据类型的比较 我们在比较基本类型的数据时 通常用 来判断 也比较简单 int a 3 int b 5 Sy
  • 谈谈我对服务熔断、服务降级的理解

    伴随着微服务架构被宣传得如火如荼 一些概念也被推到了我们面前 管你接受不接受 其实大多数概念以前就有 但很少被提的这么频繁 现在好像不提及都不好意思交流了 想起有人总结的一句话 微服务架构的特点就是 一解释就懂 一问就不知 一讨论就吵架 其
  • 机器学习 数据的采集和清洗

    本人找到了一条路 不知道对错的路 采集训练的 数据和清理数据 第一步 采集 涉及到如何利用爬虫采集网页csv文件 数据是在UCI 上的 UCI官网如下http archive ics uci edu ml index php 就拿里面最热门
  • java字典树(前缀树) - Kaiqisan

    大家好 都吃晚饭了吗 我是Kaiqisan 是一个已经走出社恐的一般生徒 这一篇文章咱来讲讲字典树把 之前在给别人代答辩数据结构的时候初次了解到这个概念 今天在刷算法课的时候右看到了 所以就有了这个视频 首先还是明确一个概念 什么是字典树
  • 微软Hyper-V虚拟机复制实现双机备份过程

    这个方案是通过hyper v的虚拟机复制功能实现 该方案需要至少两台安装了hyper v功能的服务器 只需在其中一台安装虚拟机系统 另一台虚拟机服务器作为副本接收服务器 部署过程如下 1 比如有两台pc 下面称为pc1 pc2 pc1上面的
  • NodeJS的os模块

    附录 常用HTTP响应头和请求头信息对照表 Node简介 第一个node程序 module 模块系统 npm包管理器 模块系统优先级 认识http内置模块 url内置模块 path内置模块 fs内置模块 http模块服务端进阶 http报文
  • 区块链学习笔记(四)【Merkle树】

    一 字典树 字典树的三个基本特征 1 根节点不包含字符 为空 除根节点外每一个节点只包含一个字符 2 从根节点到某一个节点 路径上经过的字符连接起来 就是该节点对应的字符串 3 每个节点包含的所有子节点的字符都不相同 优势 相比较于哈希表