拉链法解决hashtable冲突问题
拉链法解决冲突。拉链法解决冲突的做法是将所有的相同Hash值的key放在一个链表中,比如key3和key14在hash之后都是0,那么在数组的键为0的地方存储这两个值,形式是链表。如果不能理解我的文字,请看下面的示例,看一下打印信息就明白了。拉链法是什么,就是链表。
class HashNode{
public $key;
public $value;
public $nextNode;
public function __construct($key, $value, $nextNode=Null){
$this->key = $key;
$this->value = $value;
$this->nextNode = $nextNode;
}
}
class HashTable{
private $arr;
private $size=10;
public function __construct(){
$this->arr = new SplFixedArray($this->size);
}
public function SimpleHash($key){
$ascTotal=0;
$strlen = strlen($key);
for($i=0;$i<$strlen;$i++){
$ascTotal+=ord($key[$i]);
}
return $ascTotal%$this->size;
}
//使用拉链法
//将最新的放在前面
public function set($key,$val){
$hash = $this->SimpleHash($key);
if(isset($this->arr[$hash])){
$newNode = new HashNode($key,$val,$this->arr[$hash]);
}else{
$newNode= new HashNode($key,$val,null);
}
$this->arr[$hash] = $newNode;
return true;
}
public function get($key){
$hash = $this->SimpleHash($key);
$current = $this->arr[$hash];
while(!empty($current)){
if($current->key == $key ){
return $current->value;
}
$current = $current->nextNode;
}
return NULL;
}
public function getList(){
return $this->arr;
}
}
$newArr = new HashTable();
for($i=0;$i<25;$i++){
$key = 'key'.$i;
$newArr->set($key,$i);
}
$arr = $newArr->getList();
print_r($arr);
拉链法解决hashtable冲突问题的更多相关文章
- 拉链法解决Hash节点冲突问题
<?php /* * hash::拉链法解决hash节点存储冲突问题 * ::2014-07-02 * ::Small_Kind */ class small_hash { private $s ...
- 【Java集合学习】HashMap源码之“拉链法”散列冲突的解决
1.HashMap的概念 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射. HashMap 继承于AbstractMap,实现了Map.Cloneable.java.io ...
- 链表法解决hash冲突
/* @链表法解决hash冲突 * 大单元数组,小单元链表 */ #pragma once #include <string> using namespace std; template& ...
- hash算法与拉链法解决冲突
<?php class HashNode { public $key; public $value; public $nextNode; public function __construct( ...
- poj 3349:Snowflake Snow Snowflakes(哈希查找,求和取余法+拉链法)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 30529 Accep ...
- HASH表的实现(拉链法)
本文的一些基本概念参考了一部分百度百科,当然只保留了最有价值的部分,代码部分完全是自己实现! 简介 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据 ...
- 扰动函数和拉链法模拟HashMap的存储结构
HashMap是Map接口下面的子孙,它对外是K,V结构存储的,而内部也着自己的存储结构,它的get操作是O(1)的时间复杂度,可以说是非常快的找到目录,而添加时,也是O(1),所以在键值存储里,它成 ...
- 解决hash冲突之分离链接法
解决hash冲突之分离链接法 分离链接法:其做法就是将散列到同一个值的所有元素保存到一个表中. 这样讲可能比较抽象,下面看一个图就会很清楚,图如下 相应的实现可以用分离链接散列表来实现(其实就是一个l ...
- 解决hash冲突的三个方法
通过构造性能良好的哈希函数,可以减少冲突,但一般不可能完全避免冲突,因此解决冲突是哈希法的另一个关键问题.创建哈希表和查找哈希表都会遇到冲突,两种情况下解决冲突的方法应该一致.下面以创建哈希表为例,说 ...
随机推荐
- Leetcode基础篇30天30题系列之数组:模拟计算法
作者:丁宋涛 数组:加一 题干: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整 ...
- 让图片img标签上下左右居中
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Django查询数据库返回字典dict数据
个人观点: 个人认为,在Django项目中, 开发团队为了让使用该框架的用户都使用自带的序列化功能,从而让框架中的SQL返回值很不直观,对于直接使用SQL语句的用户很犯难. 解决: from djan ...
- python-day1(学前了解)
Markdown基本语法 各级标题 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 加粗 **加粗文本** 斜体 *我斜了* 高亮 ==我高亮了== 上标 2 ...
- python基础预习小结
一.执行python程序的两种方式 1.1 交互式 在终端内输入python3,然后输入python代码 1.2 命令式 在终端内输入python3文本文件路径 二.执行python的两种IDE 2. ...
- vue.js的v-bind
v-bind v-bind 主要用于属性绑定, html中的标签内: <div class="control-group"> <label class=&quo ...
- 你知道dos和cmd之间的关系以及区别吗?
含义 dos 英文disk operation system,意思是磁盘操作系统是微软系列操作系统之一,dos是一个独立的操作系统,dos对操作人员的要求是比较高的,操作者需要记住很多的命令,并利用命 ...
- 定义一个外部类Father,有成员变量name并赋一个初值。
1.内部类的使用:(1)定义一个外部类Father,有成员变量name并赋一个初值.(2)定义一个内部类Child,并定义一个getValue()方法,在方法中调用外部类Father的name变量.( ...
- AIX中的/etc/inittab文件
1./etc/inittab文件 /etc/inittab文件从上到下逐行表述了某个服务或应用的启动需求.运行级别.应用脚本,格式如下: identifier:Runlevel: Action: ...
- js 判断确切判断Array和Object
js的数组其实是特殊的对象. 这就导致: typeof [1,2,3] === 'object' [1,2,3] instanceof Object 和 [1,2,3] instanceof Arr ...