Last active
December 25, 2017 16:09
-
-
Save trafficinc/189b0d47f7a0e09cb76a36c50e33aa54 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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