SOURCE

function HashTable(){
    this.table = new Array(137);
    this.simpleHash = simpleHash;
    this.betterHash = betterHash;
    this.showDistro = showDistro;
    this.put = put;
    
}

function simpleHash(data){//每个字符的ASCII码相加,得到散列值,有碰撞风险
    var total = 0;
    for(var i = 0;i < data.length;i++){
        total += data.charCodeAt(i);
    }
    console.log('Hash value:' + data + '->' + total)
    return total % this.table.length;
}

function betterHash(string){//霍纳算法 求和时乘一个质数
    const H =37;
    var total = 0;
    for(var i = 0;i < string.length;i++){
        total += H * total + string.charCodeAt(i);
    }
    total = total % this.table.length;
    if(total < 0){
        total += this.table.length - 1;
    }
    return parseInt(total);
}

function put(data){
    var pos = this.betterHash(data);
    this.table[pos] = data;
}

function showDistro(){
    var n = 0;
     for(var i = 0;i < this.table.length;i++){
         if(this.table[i] != undefined){
             console.log(i + ':' + this.table[i])
         }
     }
}

function getRandomInt(min,max){
    return Math.floor(Math.random()*(max - min + 1)) +min;
}

function genStuData(arr){
     for(var i = 0;i < arr.length;i++){
         var num = '';
         for(var j = 1;j <= 9;j++){
             num += Math.floor(Math.random()*10);
         }
         num += getRandomInt(50,100);
         arr[i] = num;
     }
}


// var someNames = ['David','jenny','ray','danny','cynthia','mike','caty'];
// var hTable = new HashTable();
// for(var i = 0;i < someNames.length;i++){
//     hTable.put(someNames[i]);
// }
// hTable.showDistro();

var numStudent = 10;
var arrSize = 97;
var idLen = 9;
var students = new Array(numStudent);
genStuData(students);
console.log('student data:\n');
for(var i = 0;i<students.length;i++){
console.log(students[i].substring(0,8) + '  ' + students[i].substring(9));
}

console.log('data distribute:\n');
var hTable = new HashTable();
for(var i = 0;i<students.length;i++){
    hTable.put(students[i]);
}
hTable.showDistro();
console 命令行工具 X clear

                    
>
console