`
Mr.Zhong
  • 浏览: 11738 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

Hash的理解与应用(理论篇)

阅读更多

 

(1)    为什么要使用hash这种数据结构?

众所周知,在编写的程序中,对数据的查找和处理是司空见惯的,特别是对一大堆数据而言。而作为最基本的数据结构,数组和链表而言,它们各具优势与缺陷。数组由于其存储的地址连续性及长度固定性,在查找操作上极具优势,只需要一次换算就能找到相应位置的数据,但是在插入、删除等操作上,却需要重新构造一个新的数组,这在空间及时间上是及其浪费的;而链表这种数据结构刚好相反,由于物理地址空间是随机分布的,各个节点之间是用索引相互串联起来的,所以其查找效率低的可怕,为了查找一个数据就不得不全部遍历一遍,但是对于插入、删除等操作而言,链表就极具优越性,它只需要改变操作位的索引即可,不需要像数组那样重新构造,这样效率也就极大的提高了。

由上可见,数组和链表在不同的操作上各具其优势,那么,我们所需要的就是如何做到这两种优势的融合,诞生出一种新的数据结构,既在查找上具有数组的速度,在插入和删除上也具有链表的效率。Hash就是为了实现这种效果而产生的,它天生就是为了提高查找和其他操作等效率而存在的,那么Hash到底是以一种什么样的结构存在呢,它又是如何做到效率的提高呢?

 

(2)    什么是Hash

Hash这种算法的概念,可以理解为一种分组处理的方法,把大的数据分组成小的数据量,再在上面进行处理,以此来提高效率。它将任意输入的数据同过Hash()函数的运算得出该数据的hash值,也可理解为是该数据的标识,hash通过该数据的hash值对其进行处理。每个数据都通过这种方法进行映射处理,把不同的数据映射到一个用数组数据结构建立的表,这种表称为hash表或者散列,其地址空间是有限的。这种通过hash()函数的映射是一种压缩映射,也就是说hash表上的空间远远小于输入的数据的空间,不同的数据输入可能会映射成相同的hash值输出,因此,不可能从hash值来唯一确定输入的数据数值,这就是hash()函数所做的。

对于不同的数据,当其hash值一样时,就把它加入到该hash表中对应的位置,如果该位置尚且为空则大可直接放入,否则就在该hash表的位置上构建一个链表,把该数据用链表的方式加入到该位置上。

由此可见,hash是一种数组和链表的融合,在两者的优势上取的平衡,当然随着数据量的增加,这种平衡可能会被打破,这时我们就需要重新构造一个hash,这个过程叫做reHahs(),这个会在后面详细讲述。当你需要查找并处理一个数据是,你可以通过hash()函数映射到其所在的hash表上的位置,然后再在该位置上的链表结构上查找和处理该数据,查找的代价也就是在链表中,但由于这个链表比起原数据量少的多,几乎没有什么迭代的代价可言了,所以其操作速度也就大大提升。就这样达到了在数组与链表上取得平衡,提高了数据处理效率。

 

(3)    reHash()

在上面已经说过,虽然在hash结构建立后取得了平衡,但是由于数据量及其类型往往是动态的,所以当输入数据量过多时,这种平衡就必然会被打破,这样也必然使该hash的效率降低,性能递减,因此,我们必须设置一个阈值来作为这个平衡的容差标准。当超过这个阈值时,就不得不重新定义及构造一个新的hash,当然这样的情况不会很平凡,所以对效率的影响不至于很大。那么这个阈值要根据什么来定义呢?

我们知道,hash对于效率的提高是通过分组来实现的,在hash表上的快速定位后,在只有少量数据的链表上进行操作。也就是说,由于hash表的地址是有限的,输入数据不断增加时,链表的长度也会随之增加,当大部分的链表上的数据超过过一定的量后,就会使得该hash结构的效率降低。

为此,我们rehash()所要做的就是当超过阈值后,加长hash表的地址空间,改变hash()函数,重新分配数据,以此来解决链表过于冗余的现状。

当然,阈值的设置因使用情况和所需处理的数据而定,主要目的就是为了保持平衡,保持效率。

 

2
2
分享到:
评论
1 楼 南侠1999 2012-04-02  
少强牛逼啊

相关推荐

    3d.zip_3维hashin准则_Hashin 3D_hashin_失效准则_层合板 hashin

    6. **计算方法**:在实际应用中,3D Hashin准则通常与有限元分析结合,通过对材料的微结构进行模拟,计算每个单元的失效状态,并确定整个结构的整体失效。 7. **应用范围**:3D Hashin准则广泛应用于航空航天、汽车...

    hashin-strain-3d_hashin_三维hashin_三维hashin失效_失效准则_3D—Hashin_

    Hashin失效准则是一种广泛应用的多向复合材料失效理论,由Shlomo Hashin于1962年提出,主要用于评估多向受力条件下复合材料的破坏可能性。本篇将深入探讨三维Hashin失效准则及其在复合材料失效模拟中的应用。 首先...

    UMAT_Hashin3D_hashin

    Hashin破坏准则,由Shlomo Hashin于1962年提出,是一种广泛应用于复合材料的理论,它考虑了内部纤维断裂和基体开裂两种主要的破坏模式。这个准则基于能量原理,通过比较材料的内能与外加载荷导致的能量耗散来预测...

    hashin失效vumat,hashin失效准则介绍,Fortran

    在实际应用中,Hashin失效准则与VUMAT的结合可以帮助解决许多关键问题,比如评估飞机翼梁的耐久性、预测桥梁混凝土的开裂风险,或者研究复合材料在高温环境下的力学性能。通过精确模拟材料失效,工程师们可以提前...

    理解内存页面调度的机理,掌握几种理论调度算法实现,并通过实验比较各种调度算法的优劣。此外通过实验了解HASH表数据结构的使用。

    本实验旨在深入理解内存页面调度的原理,掌握并比较不同的调度算法,包括FIFO(先进先出)、LRU(最近最少使用)、NUR(最近未使用)以及OPT(最佳置换)算法,并通过实验了解和应用HASH表数据结构。 首先,FIFO...

    hashin失效vumat_hashin破坏准则_vumatfailure_vumathashin失效_hashin_vumat

    在IT行业中,尤其是在模拟仿真和材料科学领域,Hashin失效准则是一种广泛...理解并正确实施Hashin失效准则与VUMAT相结合,对于模拟复杂材料系统的性能至关重要,能为工程师提供关于材料耐久性和结构完整性的重要预测。

    vuamt and umat_hashin_UMAT_Hashin_umathashin_vumat_

    用户可能需要这些文件来理解和应用Hashin损伤模型到他们的有限元分析中。这些文件可能包含了实现Hashin模型的详细算法、参数设置指南,或者是示例输入和输出数据,帮助用户理解如何在实际工程问题中使用该模型。 ...

    vumat_hashin损伤实体_VUMAT-failure-model_hashin_vumat_abaqus子模型

    Hashin损伤理论是材料破坏分析中的一种重要方法,由Shlomo Hashin提出。该理论考虑了多轴应力状态下的材料损伤,包括拉伸、剪切和孔隙压力等。它通过引入多个内部变量来描述材料的损伤演化,这些变量随着应力状态的...

    基于应变和应力的Vumat子程序_hashin失效准则_动态应变_拉伸失效_hashin_vumat.zip

    这个压缩包文件“基于应变和应力的Vumat子程序_hashin失效准则_动态应变_拉伸失效_hashin_vumat.zip”显然包含了与使用Vumat子程序来模拟材料失效,特别是Hashin失效准则相关的资料,以及动态应变和拉伸失效的应用。...

    hashin失效vumat,hashin失效准则介绍,Fortran源码.zip

    为了正确理解和应用这些源代码,用户需要具备一定的Fortran编程基础,了解ABAQUS的VUMAT接口,以及对Hashin失效准则的理论理解。源码可能会包含计算单元应变、应力、模量和失效判据的函数,以及如何将这些结果反馈到...

    据三维Hashin失效准则和Chang-Chang退化准则.zip

    在“据三维Hashin失效准则和Chang-Chang退化准则.doc”这个文档中,可能详细阐述了这两个准则的理论基础、数学表达式、计算方法以及具体应用案例。文件名“1”可能是文档的补充部分,例如包含计算实例、图表或者参考...

    vumat_hashin损伤实体_VUMAT-failure-model_hashin_vumat_abaqus子模型.zip

    《VUMAT Hashin损伤实体:ABAQUS子模型详解》 ...对于深入理解和应用该理论的工程师来说,这是一个宝贵的资源,可以帮助他们更准确地模拟材料的损伤和破坏过程,从而优化设计并预测工程结构的耐久性。

    hash应用与实践 入门提高

    哈希(Hash)技术在计算机科学中...总的来说,哈希应用与实践涉及到哈希函数的设计、冲突处理以及在实际场景中的优化,如数据库索引、缓存系统和分布式计算等。理解和掌握哈希技术有助于提升数据处理效率和算法性能。

    基于应变和应力的Vumat子程序_hashin失效准则_动态应变_拉伸失效_hashin_vumat

    首先,Hashin失效准则是由Shlomo Hashin在1962年提出的,它是一种多准则失效理论,适用于评估复合材料的局部和整体失效。该准则考虑了纤维和基体在不同方向上的应力和应变状态,包括纤维拉伸、纤维压缩、基体拉伸和...

    HASH的安全性研究

    #### 一、HASH函数简介与应用场景 随着信息技术的发展,尤其是互联网时代的到来,网络安全成为了至关重要的研究领域。在这个背景下,HASH函数作为一种关键的技术手段,被广泛应用于保障数据完整性和消息认证。其...

    hash算法C代码实现

    此外,哈希算法还要求具有碰撞避免的特性,即不同的输入应产生不同的哈希值,尽管在有限的哈希值空间内完全避免碰撞是理论上不可能的,但好的哈希函数应尽量减少冲突。 在C语言中实现哈希算法,我们需要定义一个...

    内存Hash算法模块详细设计说明

    本文档旨在详细阐述内存Hash算法软件模块的设计原理及其实现细节,帮助开发人员更好地理解该模块的工作机制及其应用场景,进而有效地集成到相关项目中。 #### 术语、定义与缩略语 - **术语、定义**:本文档未引入...

    2016-VUMAT_hashin_UMAT_vumat_vumathashin_ABAQUS_

    标题 "2016-VUMAT_hashin_UMAT_vumat_vumathashin_ABAQUS_" 暗示了这是一个与ABAQUS软件相关的项目,特别涉及到VUMAT(用户定义的材料子程序)和Hashin准则的实现。ABAQUS是一款广泛使用的有限元分析软件,尤其在非...

    uniFiber_hashin_Puck准则_puckvumat_puck_复合材料损伤_

    Hashin准则基于能量耗散理论,通过比较材料的应变能密度与临界应变能密度来判断材料是否发生损伤。当应变能密度超过临界值时,材料的损伤程度会逐渐增加,直到最终破坏。 2. **Puck破坏准则**:Puck准则,由G.A. ...

Global site tag (gtag.js) - Google Analytics