9、开链法解决散列表碰撞问题

// 散列法(Hashing)或哈希法是一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来在数据库中建立索引并进行搜索,同时还用在各种解密算法中。
// 散列函数先计算字符串中各字符的ASCII码值,求和时每次要乘以一个质数后得到一个散列值,作为散列数组的索引。

// 如果数组的大小是待存储数据个数的1.5倍,则使用开链法。
// 开链法解决碰撞问题:在创建散列数组时,通过调用一个函数创建一个新的空数组,然后将该数组赋给散列数组的每一个元素,这样即使两个键散列后的值相同,依然被保存在同样的位置,只不过它们在第二个数组中的位置不一样,这样就解决了碰撞问题。

function HashTable(){
	this.table = new Array(137);
	this.hashFunc = hashFunc;
	this.showDistro = showDistro;
	this.buildChains = buildChains;
	this.put = put;
	this.get = get;
}

function put(data){
	var pos = this.hashFunc(data);
	var index = 0;
	if(this.table[pos][index] == null){
		this.table[pos][index] = data;
	}
	else{
		while(this.table[pos][index] != null){
			++index;
		}
		this.table[pos][index] = data;
	}
}

function get(data){
	var index = 0;
	var pos = this.hashFunc(data);
	if(this.table[pos][index] == data){
		return this.table[pos][index];
	}
	else{
		while(this.table[pos][index] != data){
			index += 1;
		}
		return this.table[pos][index];
	}
	return null;
}

function buildChains(){
	for(var i=0; i

9、开链法解决散列表碰撞问题_第1张图片
 
 

你可能感兴趣的:(javascript,数据结构与算法)