Skip to content

Instantly share code, notes, and snippets.

@trafficinc
Last active December 25, 2017 16:09
Show Gist options
  • Save trafficinc/189b0d47f7a0e09cb76a36c50e33aa54 to your computer and use it in GitHub Desktop.
Save trafficinc/189b0d47f7a0e09cb76a36c50e33aa54 to your computer and use it in GitHub Desktop.
//HashTable
function HashTable() {
this.table = new Array(137);
this.betterHash = betterHash;
this.showDistro = showDistro;
this.put = put;
//this.get = get;
}
function put(data) {
var pos = this.betterHash(data);
this.table[pos] = data;
}
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 showDistro() {
var n = 0;
for (var i = 0; i < this.table.length; ++i) {
if (this.table[i] != undefined) {
console.log(i + ": " + this.table[i]);
}
}
}
//work with integers as keys
function getRandomInt (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
//example student number generation
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", "Jennifer", "Donnie", "Raymond","Cynthia", "Mike", "Clayton", "Danny", "Jonathan"];
var hTable = new HashTable();
for (var i = 0; i < someNames.length; ++i) {
hTable.put(someNames[i]);
}
hTable.showDistro();
//int as keys
var numStudents = 10;
var arrSize = 97;
var idLen = 9;
var students = new Array(numStudents);
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("\n\nData distribution: \n");
var hTable = new HashTable();
for (var i = 0; i < students.length; ++i) {
hTable.put(students[i]);
}
hTable.showDistro();
/*
12: Jennifer
22: Raymond
55: Donnie
58: Clayton
80: Jonathan
82: Mike
103: Cynthia
110: Danny
Student data:
82705534 79
51823868 86
92811636 70
93132812 71
40559304 63
48970212 78
04353296 61
17565035 57
15321560 51
09013069 53
Data distribution:
24: 15321560551
26: 93132812371
33: 92811636770
36: 09013069053
39: 40559304863
48: 04353296461
63: 48970212278
82: 51823868886
115: 82705534079
121: 17565035057
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment