Hash算法小节
看了这么久的hash算法,也稍微有点了解了。所以,我想来谈谈自己对hash算法的看法。
说到hash算法,我们能想到的就是散列,这个是只要在百度上输入hash算法就能找到的。然后,我们同时也能够找到几种常见的hash算法,虽然大家很容易就能够找到,不过我还是给大家列出来方便一下吧。
几个比较常见的hash函数:
1. 除法散列法
2. 乘法散列法
3. 全域散列法
4. ……..
这几个都是能够在网上很容易查找到的几种函数,还有很多种函数。
上面提到的全部都是算法之类的,我们很简单的就能写出来,但是不管是什么样的算法结果都是得到一个值来确定最后我们存放信息的位置,也就是要得到一个code值。
Ok,现在我们得到了code值之后,我们要处理的就是hash里面的存放方式了。我们知道的是,如果两个信息通过一个hash算法得到相同的一个位置,就是同样的一个数组位置,显然,我们不能同时放在一起,否则,可能会出现一个信息被下一个信息取代掉的情况,怎么解决这样的情况呢,我们选择的方法是在数组后面挂上一个链表,这种方法就叫做挂链法。
现在我简单的说明一下这种方法的分析代码:
public class Hash {
/**
* 增加
* @param code
*/
public void put(int code,LinkList hash[],LinkList link){
if(hash[code-1]==null){
hash[code-1]=link;
}else{
LinkList nlist=hash[code-1].getNext();
while(nlist.getNext()!=null){
nlist=nlist.getNext();
}
nlist.setNext(link);
link.setLast(nlist);
}
}
/**
* 删除
* @param code
*/
@SuppressWarnings("unused")
public void delete(int code,LinkList hash[],String text){
if(hash[code-1]==null){
System.out.println("没有数据可以删除");
}else{
LinkList link =hash[code-1];
String ntext=link.getText();
while(ntext!=text){
link=link.getNext();
ntext=link.getText();
if(link==null){
System.out.println("数据不存在");
break;
}
}
link.getLast().setNext(link.getNext());
link.getNext().setLast(link.getLast());
link=null;
}
}
/**
* 修改
* @param code
*/
@SuppressWarnings("unused")
public void amend(int code,LinkList hash[],String text,String newtext){
if(hash[code-1]==null){
System.out.println("没有数据可以修改");
}else{
LinkList link =hash[code-1];
String ntext=link.getText();
while(ntext!=text){
link=link.getNext();
ntext=link.getText();
if(link==null){
System.out.println("数据不存在");
break;
}
link.setText(newtext);
}
}
}
/**
* 查找
* @param code
*/
@SuppressWarnings("unused")
public void find(int code,LinkList hash[],String text){
if(hash[code-1]==null){
System.out.println("没有数据可以修改");
}else{
LinkList link =hash[code-1];
String ntext=link.getText();
while(ntext!=text){
link=link.getNext();
ntext=link.getText();
if(link==null){
System.out.println("数据不存在");
break;
}
System.out.println("该数据为"+text+"在"+code+"个位置");
}
}
}
}
这个是我自己写的一个用链表法实现hash构造的一段代码。当然,也可以选择去看一下系统所给出的hashTable和hashMap的方法,这些也是典型的hash的实现。
纵观一遍,这段代码本身很简单的,我们所要实现的也只是在数组上面加上一个链表,在数组里面放入链表的构成了挂链法的hash构造。
但是,仅仅是有这些显然是不够的,当我们处理的数据过多,而我们的所定义的数组大小过小的话,那我们需要做的就是一件事。就是扩大我们原定数组的大小,这个过程就叫做rehash的过程,简单的说就是,扩大数组,定义hash函数。而在这里我们需要了解一个新的概念就叫做负载因子,负载因子的就是内容大小除以数组长度,一般这个大小是0.75,如果超过这个数字,那我们就需要重新定一个一个数组来存放这些内容,但是这个负载因子并不是确定的,所以我们可以自己去改变他。
分享到:
相关推荐
MurmurHash算法由Austin Appleby创建于2008年,现已应用到Hadoop、libstdc 、nginx、libmemcached,Redis,Memcached,Cassandra,HBase,Lucene等开源系统。2011年Appleby被Google雇佣,随后Google推出其变种的...
Hash函数集合,包含主流的hash函数: nginx_hash算法,OpenSSL_hash算法,RSHash,JSHash,PJWHash,ELFHash,BKDRHash,DJBHash,DEKHash,APHash等等!
在IT领域,Hash算法是一种广泛应用于数据验证、存储和比较的技术。它将任意长度的数据转换成固定长度的输出,通常称为Hash值或指纹。在这个压缩包中,我们重点关注的是图像的相似度Hash算法,特别是平均哈希算法(a...
在IT领域,哈希算法(Hash Algorithm)是一种用于将任意长度的数据转化为固定长度输出的算法。这个过程通常称为哈希或散列。哈希算法在信息安全、数据完整性验证、密码学等多个方面都有着广泛的应用。本项目是用...
在计算机科学中,哈希(Hash)算法是一种用于将任意长度的数据映射为固定长度输出的函数。这种输出通常称为哈希值或消息摘要。在Java编程语言中,实现哈希算法可以方便地用于数据验证、查找表以及密码存储等多种用途...
Java实现GeoHash算法是一种在IT领域中用于地理位置数据存储和检索的技术。GeoHash将经纬度坐标转换为字符串,使得地理位置可以被高效地索引和查询。这种算法利用了空间分割和编码策略,使得相邻的位置在编码后具有...
一个hash算法的工具类,里面包含了一些常用的hash算法
"Hash算法MD5实验报告材料" 本实验报告主要介绍了Hash算法MD5的实验报告,旨在通过实际编程来了解MD5算法的加密和解密过程,并加深对Hash算法的认识。 一、Hash算法的定义 Hash算法是一种将输入数据转换为固定...
GeoHash算法是一种基于地理坐标的分布式空间索引技术,它通过将地球表面的经纬度坐标转化为可比较的字符串,使得我们可以高效地进行地理位置的搜索、范围查询以及邻居查找等操作。这种算法尤其适用于大数据和分布式...
### Hash算法相关介绍 在计算机科学领域,哈希(Hash)是一种将任意长度的数据映射为固定长度数据的技术。哈希算法广泛应用于多种场景中,包括但不限于数据完整性验证、密码存储、快速查找等。本文主要介绍了几种...
Geohash算法实现,经纬度到geohash编码的实现
哈希(Hash)算法在计算机科学中扮演着重要的角色,特别是在数据存储、文件校验、信息安全等领域。本文将深入探讨哈希算法的原理,并提供一个简单的C语言实现示例。 哈希算法,又称为散列函数,是一种将任意长度的...
Hash 算法大全 在计算机科学中,Hash 算法是一种将任意长度的字符串转换为固定长度的字符串的算法。Hash 算法有很多种,包括加法 Hash、旋转 Hash、一次一个 Hash、Bernstein's Hash 等。在这里,我们将详细介绍...
在编程领域,哈希算法(Hash Algorithm)是用于将任意长度的数据映射为固定长度的输出,通常这个输出称为哈希值。哈希算法在很多场景下被广泛应用,如数据完整性校验、缓存查找、数据库索引等。Go语言标准库中提供了...
### Hash算法大全 #### 一、引言 Hash算法是一种将任意长度的数据转换为固定长度输出的方法,这种输出通常称为Hash值或Hash码。在计算机科学领域,Hash算法被广泛应用于数据查找、密码存储以及数据完整性校验等多...
### 经典Hash算法概述与实现 #### 一、引言 哈希算法在计算机科学领域扮演着极其重要的角色,特别是在数据检索、信息安全以及数据完整性校验等方面。它能够将任意长度的数据转换成一个固定长度的哈希值,这一过程在...
python版本的各种hash算法