散列表,散列函数,碰撞处理解决:线性探测法

散列表,散列函数,碰撞处理解决:线性探测法
函数,碰撞处理解决:线性探测法 * 原理:散列表位置碰撞时,检查散列表下一个位置是否为空,为空就存入数据;不为空,继续检测下一个位置。 * 直到找到一个空的位置为止。 * 当数组的大小是要存储的数据两倍以上时,线性探测法比开链法好 * * .table = Array(137.values =.betterHash =.showdistro =distro; .put =.get =<span style="color: #008000;">//<span style="color: #008000;"> put for linear probing
<span style="color: #0000ff;">function
<span style="color: #000000;"> put(key,data) {
<span style="color: #0000ff;">var
pos = <span style="color: #0000ff;">this
<span style="color: #000000;">.betterHash(key);
<span style="color: #0000ff;">if
(<span style="color: #0000ff;">this
.table[pos] ==<span style="color: #000000;"> undefined) {
<span style="color: #0000ff;">this
.table[pos] =<span style="color: #000000;"> key;
<span style="color: #0000ff;">this
.values[pos] =<span style="color: #000000;"> data;
}
<span style="color: #0000ff;">else
<span style="color: #000000;">{
<span style="color: #0000ff;">while (<span style="color: #0000ff;">this.table[pos] !=<span style="color: #000000;"> undefined) {
pos++<span style="color: #000000;">;
}
<span style="color: #0000ff;">this.table[pos] =<span style="color: #000000;"> key;
<span style="color: #0000ff;">this.values[pos] =<span style="color: #000000;"> data;
}
}

<span style="color: #0000ff;">function<span style="color: #000000;"> betterHash(string) {
const H = 37<span style="color: #000000;">;
<span style="color: #0000ff;">var total = 0<span style="color: #000000;">;
<span style="color: #0000ff;">for (<span style="color: #0000ff;">var i = 0; i < string.length; ++<span style="color: #000000;">i) {
total += H * total +<span style="color: #000000;"> string.charCodeAt(i);
}
total = total % <span style="color: #0000ff;">this<span style="color: #000000;">.table.length;
<span style="color: #0000ff;">if (total < 0<span style="color: #000000;">) {
total += <span style="color: #0000ff;">this.table.length-1<span style="color: #000000;">;
}
<span style="color: #0000ff;">return<span style="color: #000000;"> parseInt(total);
}

<span style="color: #0000ff;">function<span style="color: #000000;"> showdistro() {
<span style="color: #0000ff;">for (<span style="color: #0000ff;">var i = 0; i < <span style="color: #0000ff;">this.table.length; ++<span style="color: #000000;">i) {
<span style="color: #0000ff;">if (<span style="color: #0000ff;">this.table[i] !=<span style="color: #000000;"> undefined) {
console.log(<span style="color: #0000ff;">this.table[i] + ": " + <span style="color: #0000ff;">this<span style="color: #000000;">.values[i]);
}
}
}

<span style="color: #008000;">//<span style="color: #008000;"> get for linear probing
<span style="color: #0000ff;">function<span style="color: #000000;"> get(key) {
<span style="color: #0000ff;">var hash = <span style="color: #0000ff;">this<span style="color: #000000;">.betterHash(key);

</span><span style="color: #0000ff;"&gt;for</span> (<span style="color: #0000ff;"&gt;var</span> i = hash; <span style="color: #0000ff;"&gt;this</span>.table[hash] != undefined; i++<span style="color: #000000;"&gt;) {
    </span><span style="color: #0000ff;"&gt;if</span> (<span style="color: #0000ff;"&gt;this</span>.table[hash] ==<span style="color: #000000;"&gt; key) {
        console.log(</span>"查找到的键值为: "+<span style="color: #0000ff;"&gt;this</span><span style="color: #000000;"&gt;.values[hash]);
        </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #0000ff;"&gt;this</span><span style="color: #000000;"&gt;.values[hash];
    }
}

console.log(</span>"无该键值!"<span style="color: #000000;"&gt;);
</span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; undefined;

}

<span style="color: #008000;">/<span style="color: #008000;">测试线性探测法<span style="color: #008000;">/
<span style="color: #0000ff;">var someNames = ["David","Jennifer","Donnie","Raymond"<span style="color: #000000;">,"Cynthia","Mike","Clayton","Danny","Jonathan"<span style="color: #000000;">];
<span style="color: #0000ff;">var hTable = <span style="color: #0000ff;">new<span style="color: #000000;"> HashTable();
<span style="color: #0000ff;">for (<span style="color: #0000ff;">var i = 0; i < someNames.length; ++<span style="color: #000000;">i) {
hTable.put(someNames[i],someNames[i]);
}
hTable.showdistro();
hTable.get("Jennifer");

 

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...