当前位置: 首页 > news >正文

哈希树讲解

       哈希树(HashTree)是哈希(Hash)算法的一种延续。传统数据结构中对如何避免哈希冲突都有一定的描述和解释,但是这些描述和解释都是泛泛而谈,并没有提出比较好的解决方案。这里所提到的哈希树(HashTree)算法就是要提供一种在理论上和实际应用中均能有效地处理冲突的方法。
        有关哈希树(HashTree)算法的理论解释以及与其他算法的评估可以参考文档《哈希树(HashTree)》。文中的理论和有关的数据操作描述还不见得完善,这里可以给出有关的源代码和相关编译后的可验证文件。点击这里下载源代码和可验证文件。整个代码使用Java编写,建议使用Eclipse、JBuilder或者NetBean等Java编译工具进行编译。
        本文中所提到的哈希树(HashTree)算法与其他哈希(Hash)算法相比有如下特点:
        (1)本文中解决哈希树(HashTree)冲突的算法是以“无限定”算法映射“无限定”范围的键值,因此解决冲突的方法永远有效。实际应用中会有一定限制,例如:最多4G个对象。
        (2)本文中哈希树(HashTree)算法对键值的长度和类型范围没有任何要求。可以是整数,也可以是字符串;不需要对键值压缩或者重新编码。实际应用中会对键值范围有一定限定,例如:键值最长为64字节。
        当然也可以调整程序全局设置,使其支持256字节甚至更长的键值。这种调整不会影响算法理论上的效率。算法理论上的效率仅和所需要分辨的对象个数有关,与键值长度无关。
        (3)“最小”哈希树(HashTree)在从4G个对象中找出所匹配的对象,比较次数不超过10次。也就是说:最多属于O(10)。在实际应用中,调整了质数的范围,使得比较次数一般不超过5次。也就是说:最多属于O(5)。因此可以根据自身需要在时间和空间上寻求一个平衡点。
        (4)本文中哈希树(HashTree)算法对哈希(Hash)算法对空间需求的无限膨胀提出了有效的解决方法。一般的哈希(Hash)算法都是O(1)的,而且基本是以空间换时间。这很容易导致对存储空间无限制的需求。
        本文中哈希树(HashTree)算法在实际操作中使用了一些技巧使得对空间的需求控制在一定范围内。即空间需求仅和所需要存储的对象个数有关,不会无限制地“膨胀”下去。
        (5)在一些索引算法中,如果遇到数据的反复增、删、改过程,很容易导致数据结构的退化。为了避免这种退化,就需要经常对数据结构作出“平衡”调整。
        本文中哈希树(HashTree)算法在数据的反复增、删、改过程中,无需对数据结构做出任何“平衡”操作。即使长期处于复杂的数据操作过程中,仍能很好地保持其基本性质。
        所提供的代码已经经过实际六年以上的运行检验,完全可以值得信赖。有关理论方面的了解还是请参考文档《哈希树(HashTree)》。这里主要介绍有关代码使用方面的问题。
        基于哈希树(HashTree)算法的文件存储模式核心代码文件就两个:HashFileNodeBuffer.java和HashFileContainer.java。这两个类均在目录“/source/com/simpleteam/container/hash”下。如果想使用数据包的功能,可以参考HashFileContain下面的main函数,里面有一个标准的例子。主要的步骤如下:
        步骤1.创建一个文件。

File file = new File("container.file");

        步骤2.创建一个类要求使用指定的文件,以及定义存储数据的空间。这个空间要求数据都能存储在里面,不能超过此空间大小要求。

HashFileContainer container = new HashFileContainer(file,pageSize);


步骤3.检查文件是否安全关闭。如果没有安全关闭可以选择重建所有数据。如果数据量很大,重建数据可能会需要很多时间。

if(!container.isSafelyClosed()) {……container = rebuild(container)……}

        步骤4.在以上操作完毕之后,可以进行以下相关操作:
        (1)检查容器中是否存在某键值。

if(container.exists(key)) {……}

        (2)获得键值所对应的数值。

Object value = container.get(key);

        (3)存储键值以及其所对应的数据。常见的Integer、Long、byte[]、String均可存储,可存储对象要求至少能Serializable。对于Expiration可以填写,也可以不填写。

container.put(key,value);container.put(key,value,expiration);

        (4)删除键值所对应的数据。如果提取到数据,那么原始数据将从数据文件中被删除。

Object value = container.remove(key);

        步骤5.安全关闭该容器。

container.close();

        以上所有操作均不是线程安全的。也就是说如果想将该容器类用于多线程操作,请单独进行安全操作封装。
        HashFileContainer.main函数的主要意图是建立了一个线性表用来验证哈希数(HashTree)操作的正确性和有效性。测试中要求对1000000数据进行反复的增、删操作。打印部分展示了有关哈希树(HashTree)的三个参数:数据量(size);当前1000个数据的平均操作时间;总的数据平均操作时间。一般来说随着数据量的增加,操作时间会逐渐增加。
        由于该程序使用Java编写,而且所有的操作基本基于磁盘操作,因此效率有限。如果使用C/C++根据原理改写相关的代码,效率至少在3~10倍以上

相关文章:

哈希树讲解

哈希树(HashTree)是哈希(Hash)算法的一种延续。传统数据结构中对如何避免哈希冲突都有一定的描述和解释,但是这些描述和解释都是泛泛而谈,并没有提出比较好的解决方案。这里所提到的哈希树(HashTree)算法就是要提供一种在理论上和实际应用中均能有效地处…...

vue 项目启动后一直不断的刷新停不下来

新建的vue 项目,配置了代理后项目一直刷新,停不下来,各种查找最后发现是vue.config.js 中的热更新配置项目开启的原因 const {defineConfig } require(vue/cli-service) const AutoImport require(unplugin-auto-import/webpack) const Co…...

makesense在线yolov5标注

文章目录 一、创建图片文件夹和label.txt二、在线标注数据 参考文章博主:风吹落叶花飘荡 一、创建图片文件夹和label.txt 创建一个放置图片的文件夹images,存放需要标注的图片(图片最好重命名为1,2,3…避免后面混淆) 创建label.t…...

python 之 矩阵相关操作

文章目录 1. **创建矩阵**:2. **矩阵加法**:3. **矩阵乘法**:4. **矩阵转置**:5. **元素级操作**:6. **汇总统计**:7. **逻辑操作**: 理解你的需求,我将为每个功能写一个单独的代码块…...

敢问路在何方

从2022年进入软件行业到现在,二十二年眨眼之间过去了,依然奋斗在编码第一线,挣扎在第一线,借此程序员佳节之际回顾一下这许多年的历程。 由于本人混得实在不好,工作过的地方都用某单位某公司来代替实际的,到…...

复习mysql中的事务

一个事务的开始和结尾必须是 start transaction | commit; rollback 事务特性 1.原子性:多个操作打包成一个整体,要么全部执行,要么一个都不执行。 不过这里的“一个都不执行”并不是真正的全不执行,只是看起来与没执行一样。…...

力扣刷题 day52:10-22

1.数组拆分 给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。 返回该 最大总和 。 方法一:排序 #方法一:排序 def arrayPai…...

ELK概述部署和Filebeat 分布式日志管理平台部署

ELK概述部署、Filebeat 分布式日志管理平台部署 一、ELK 简介二、ELK部署2.1、部署准备2.2、优化elasticsearch用户拥有的内存权限2.3、启动elasticsearch是否成功开启2.4、浏览器查看节点信息2.5、安装 Elasticsearch-head 插件2.6、ELK Logstash 部署(在 Apache 节…...

分享一下我家网络机柜,家庭网络设备推荐

家里网络机柜搞了几天终于搞好了,非专业的,走线有点乱,勿喷。 从上到下的设备分别是: 无线路由器(当ap用):TL-XDR6088 插排:德木pdu机柜插排 硬盘录像机:TL-NVR6108-L8P 第二排左边…...

uboot移植之mx6ull_alientek_nand.h文件详解三

一. 简介 mx6ull_alientek_nand.h文件是 开发板的 uboot的一个配置文件。每个开发板都有一个 .h的配置文件。 mx6ull_alientek_nand.h 文件其实是 之前针对正点原子ALPHA开发板移植的 Uboot配置文件。 本文继上一篇文章的学习,地址如下:uboot移植之m…...

[Docker]一.Docker 简介与安装

一、Docker简介与为什么要用 Docker 1.1、Docker 介绍 Docker 是一个跨平台的开源的 应用容器引擎 ,诞生于 2013 年初,基于 Go语言 并遵从 Apache2.0 协议开源, Docker 可以把它理解成虚拟机,但是 Docker 和传统虚拟化方式 有所不同 …...

计算机网络-计算机网络体系结构-传输层

目录 一、UDP 二、TCP 特点 首部格式 连接管理 可靠传输 流量控制(点对点) 拥塞控制(全局) 三、拥塞控制算法 慢开始&拥塞避免 快重传&快恢复 功能一:提供进程与进程之间的逻辑通信 功能二:复用和分用 功能三:对收到的报…...

buuctf[HCTF 2018]WarmUp 1

题目环境&#xff1a; 发现除了表情包&#xff0c;再无其他F12试试发现source.php文件访问这个文件&#xff0c;格式如下&#xff1a;url/source.php回显如下&#xff1a;PHP代码审计&#xff1a; <?php highlight_file(__FILE__); class emmm {public static function ch…...

开源博客项目Blog .NET Core源码学习(4:生成验证码)

开源博客项目Blog中的后台管理登录界面中支持输入验证码&#xff08;如下图所示&#xff09;&#xff0c;本文学习并记录项目中验证码的生成及调用方式。   博客项目中调用VerifyCode类生成验证码&#xff0c;该类位于App.Framwork项目中&#xff0c;命名空间为App.Framwork…...

gin框架39--重构 BasicAuth 中间件

gin框架39--重构 BasicAuth 中间件 介绍gin BasicAuth 解析自定义newAuth实现基础认证注意事项说明 介绍 每当我们打开一个网址的时候&#xff0c;会自动弹出一个认证界面&#xff0c;要求我们输入用户名和密码&#xff0c;这种BasicAuth是最基础、最常见的认证方式&#xff0…...

编译pycaffe过程中遇到的问题及解决

pycaffe是python调用caffe的方式&#xff0c;编译它就是要得到一个so库_pycaffe.so。 如题&#xff0c;在caffe的源码目录下&#xff0c;执行make pycaffe&#xff0c;跳出来一个错误: $ make pycaffe CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp /usr/bin/ld…...

自然语言处理---Transformer机制详解之Transformer优势

1 Transformer的并行计算 对于Transformer比传统序列模型RNN/LSTM具备优势的第一大原因就是强大的并行计算能力. 对于RNN来说&#xff0c;任意时刻t的输入是时刻t的输入x(t)和上一时刻的隐藏层输出h(t-1)&#xff0c;经过运算后得到当前时刻隐藏层的输出h(t)&#xff0c;这个…...

改进YOLO系列 | YOLOv5/v7 引入 Dynamic Snake Convolution | 动态蛇形卷积

准确分割拓扑管状结构,如血管和道路,在各个领域中至关重要,可以确保下游任务的准确性和效率。然而,许多因素使任务复杂化,包括细小的局部结构和可变的全局形态。在这项工作中,我们注意到管状结构的特殊性,并利用这一知识来引导我们的DSCNet,以在三个阶段同时增强感知:…...

postgresql14-表的管理(四)

表table 创建表 CREATE TABLE table_name --表名 (column_name data_type column_constraint, --字段名、字段类型、约束字段&#xff08;可选&#xff09;column_name data_type, --表级别约束字段...,table_constraint );CREATE TABLE emp1 --创建表 AS SELECT * FROM empl…...

Java--Object类

Java中Object类是所有类的父类&#xff0c;是Java中最高层的类。用户创建一个类时&#xff0c;除非指定继承了某个类&#xff0c;否则都是继承于Object类。 由于所有类都继承于Object类&#xff0c;所以所有类都可以重写Object类中的方法。但是Object类中被final修饰的getClass…...

如何高效封装蓝光视频?tsMuxer一站式无损格式转换方案

如何高效封装蓝光视频&#xff1f;tsMuxer一站式无损格式转换方案 【免费下载链接】tsMuxer tsMuxer is a transport stream muxer for remuxing/muxing elementary streams, EVO/VOB/MPG, MKV/MKA, MP4/MOV, TS, M2TS to TS to M2TS. Supported video codecs H.264/AVC, H.265…...

D3.js力导向图进阶教程:给知识图谱添加搜索和高亮功能

D3.js力导向图进阶实战&#xff1a;构建可搜索的知识图谱系统 知识图谱作为结构化知识的可视化载体&#xff0c;在知识管理、智能推荐和数据分析领域发挥着重要作用。本文将带您深入探索如何基于D3.js构建一个具备搜索和高亮功能的专业级知识图谱系统。不同于基础教程&#xff…...

E7Helper:第七史诗自动化助手,如何实现24小时无忧挂机?

E7Helper&#xff1a;第七史诗自动化助手&#xff0c;如何实现24小时无忧挂机&#xff1f; 【免费下载链接】e7Helper 【EPIC】第七史诗多功能覆盖脚本(刷书签&#x1f343;&#xff0c;挂讨伐、后记、祭坛✌️&#xff0c;挂JJC等&#x1f4db;&#xff0c;多服务器支持&#…...

**光场显示中的编程实践:基于Python与OpenCV的3D立体图像生成技术探索**在虚拟现实、增强现实和下一

光场显示中的编程实践&#xff1a;基于Python与OpenCv的3D立体图像生成技术探索 在虚拟现实、增强现实和下一代人机交互系统中&#xff0c;光场显示&#xff08;Light Field Display&#xff09; 正逐步从实验室走向产业化落地。它通过精确控制光线的方向和强度&#xff0c;在不…...

从精确到共识

从精确到共识 2026-04-14 一 数据库系统诞生至今的半个多世纪里&#xff0c;“精确”一直是它不可动摇的基石。关系代数、ACID事务、范式理论——所有这些核心概念都建立在一个共同的假设之上&#xff1a;查询的结果必须是确定的、可重复的、绝对正确的。当你询问“账户余额是多…...

Rocky Linux 9.2网络配置与本地yum源搭建实战指南

1. Rocky Linux 9.2网络配置实战 Rocky Linux作为RHEL的替代品&#xff0c;在企业级应用中越来越受欢迎。最近我在部署一套内部测试环境时&#xff0c;发现很多新手对Rocky Linux 9.2的网络配置存在困惑。下面我就把实际踩坑后验证过的最可靠配置方法分享给大家。 1.1 网卡配置…...

全球远程工作机会:开发者地理套利策略

远程革命下的测试职业新机遇随着云计算与协作工具的普及&#xff0c;软件测试行业正经历全球化重构。世界经济论坛预测&#xff0c;2030年全球完全远程岗位将达9.2亿个。对测试工程师而言&#xff0c;地理套利&#xff08;Geoarbitrage&#xff09;——通过为高薪地区雇主远程服…...

AI Agent Harness Engineering 的架构演进之路

AI Agent Harness Engineering 的架构演进之路 1. 标题 (Title) AI Agent Harness Engineering 的5代架构演进:从“单Agent试错”到“百万级Agent联邦协同” 从LangChain到自建百万级集群:AI Agent工程化(Harness)的全景架构史与未来 AI Agent的“操作系统”之路:Harness …...

LaTeX公式转换Word终极方案:3步实现高效学术写作

LaTeX公式转换Word终极方案&#xff1a;3步实现高效学术写作 【免费下载链接】LaTeX2Word-Equation Copy LaTeX Equations as Word Equations, a Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX2Word-Equation LaTeX2Word-Equation是一款专为学术…...

交换机安全隔离技术实战:MUX VLAN与端口隔离的协同部署方案

1. 企业网络隔离需求与挑战 现代企业网络环境中&#xff0c;不同部门、不同身份的用户往往需要差异化的访问权限。财务部门的数据需要严格保密&#xff0c;市场部门的素材需要内部共享&#xff0c;而外来访客则只能访问有限的资源。传统方案是通过划分多个VLAN来实现隔离&#…...