龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

PHP实现hash表

时间:2014-07-22 14:49来源: 作者: 点击:
分享到:
这里使用的是直接取余法 br / h3 span常用HASH函数/span /h3 h3 span style=font-family:arial, 宋体, sans-serif;font-size:14px;直接取余法:f(x):= x mod maxM ; maxM一般是不太接近 2^t 的一个质数。/span /h3 div cl
这里使用的是直接取余法

常用HASH函数

·直接取余法:f(x):= x mod maxM ; maxM一般是不太接近 2^t 的一个质数。

·乘法取整法:f(x):=trunc((x/maxX)*maxlongit) mod maxM,主要用于实数。
·平方取中法:f(x):=(x*x div 1000 ) mod 1000000); 平方后取中间的,每位包含信息比较多。

<?php
/*/PHP实现hash表,步骤
1,创建一个固定大小的数组用于存放数据
2,设计hash函数
3,通过hash函数把关键字映射到数组的某个位置

*/
class HashTable{
	private $buckets;
	private $size=10;

	public function __construct(){
		$this->buckets=array();//创建一个数组存放数据
	}
	private function hashFunc($key){
		$strlen=strlen($key);
		$hashval=0;
		for($i=0;$i<$strlen;$i++){
			$hashval+=ord($key{$i});//取得$key字符串第$i个字符的ASCII值,然后累加
		}
		return $hashval%$this->size;
	}
	//有了hash函数,就可以实现插入和查找,插入数据时先通过hash函数计算关键字所在hash表的位置
	//然后把数据保存在此位置即可
	public function insert($key,$value){
		$index=$this->hashFunc($key);
		$this->buckets[$index]=$value;

	}
	//查找数据方法与插入数据类似,先通过hash函数计算关键字所在hash表的位置
	//然后返回此位置的数据即可
	public function find($key){
		$index=$this->hashFunc($key);
		return $this->buckets[$index];	
	}
}
//至此,一个简单的hash表编写完成,下面测试
$ht=new HashTable();
$ht->insert('key1','value1');//插入key1=>value1
$ht->insert('key2','value2');//插入key2=>value2
echo $ht->find('key1'),"<br />";//查找key1对应的数据
echo $ht->find('key2');//查找key2对应的数据

?>
精彩图集

赞助商链接