哈希查找算法(php)

/**
* 定义数据元素类型
*/
class dataType
{

    public $value;

    public $hi;
}
/**
*定义哈希表
*/
class HashTable
{

    public $data;

    public $length;

    public $num;
}
//创建哈希表
function createHashTable(&$H, $m, $p, $hash, $n)
{
    $k=1;  
    $H->num = $n; // 初始哈希表的元素个数
    $H->length = $m; // 初始哈希表的长度
    for ($i = 0; $i < $m; $i ++) {
        $dataType = new dataType();
        $dataType->value = - 1;
        $dataType->hi = 0;
        $H->data[$i] = $dataType;
    }
    
    for ($i = 0; $i < $n; $i ++) {
        $sum = 0;
        $addr = $hash[$i] % $p;
        $di = $addr;
		
        if ($H->data[$addr]->value == -1) {
            $H->data[$addr]->value = $hash[$i];
            $H->data[$addr]->hi = 1;
		} else {
			 do {
                $di = ($di + $k) % $m;
                $sum +=1;
            } while ($H->data[$di] ->value != -1);
            $H->data[$di]->value = $hash[$i];
            $H->data[$di]->hi = $sum + 1;
        }
    }

}
//查找哈希表
function searchHash($H,$v)
{
    $m=$H->length;
	$d=$d1=$v%$m;
	while($H->data[$d]->value!=-1)
	{
		if($H->data[$d]->value==$v){
			return $d;
		}else{
			$d=($d+1)%$m;
		}
		if($d==$d1)
		{
			return -1;
		}	 
	}   
    return -1;
}

$hash = [78,90,66, 70,155,82,123,231];
$H = new HashTable();
$n = 8;
$m = 11;
$p = 11;
createHashTable($H, $m, $p, $hash, $n);
$point=searchHash($H,123);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值