.add('FastPriorityQueue', function() { var b = new FastPriorityQueue(reverseddefaultcomparator); for (var i = 0; i < k; i++) { b.add(rand(i)); } for (i = k; i < streamsize; i++) { b.add(rand(i)); b.poll(); } var answer = b.array.slice(0, k).sort(function(a, b) { return a - b }); return answer; })
function generatePrefixMap(freqs) { var map = {}; var pq = new FastPriorityQueue(function(a, b) { return a[0] < b[0]; }); for (var byte in freqs) { pq.add( [freqs[byte], { byte: byte, frequency: freqs[byte], left: null, right: null, }] ); map[byte] = ""; } var data = null; while (!pq.isEmpty()) { data = pq.poll()[1]; if (pq.isEmpty()) { break; } var right = pq.poll()[1]; pq.add( [data.frequency + right.frequency, { byte: null, frequency: data.frequency + right.frequency, left: data, right: right, }] ); } generateNode(data, map); return map; }
.add('FastPriorityQueue-KWillets-replaceTop', function() { var b = new FastPriorityQueue(reverseddefaultcomparator); for (var i = 0; i < k; i++) { b.add(rand(i)); } for (i = k; i < streamsize; i++) { var x = rand(i); if (x < b.peek()) { b.replaceTop(x); } } var answer = b.array.slice(0, k).sort(function(a, b) { return a - b }); return answer; })
function check(streamsize, k) { var expectedanswer = new Array(); for (var i = 0; i < streamsize; i++) { expectedanswer.push(rand(i)); } expectedanswer.sort(function(a, b) { return a - b }) expectedanswer = expectedanswer.slice(0, k); { var b = new FastPriorityQueue(reverseddefaultcomparator); for (var i = 0; i < k; i++) { b.add(rand(i)); } for (i = k; i < streamsize; i++) { b.add(rand(i)); b.poll(); } var answer = b.array.slice(0, k).sort(function(a, b) { return a - b }); if (!compare(answer, expectedanswer)) console.log("bug FastPriorityQueue ", answer, expectedanswer); } { var b = new FastPriorityQueueGP(k, reverseddefaultcomparator); for (var i = 0; i < k; i++) { b.add(rand(i)); } for (i = k; i < streamsize; i++) { b.add(rand(i)); } var answer = b.array.slice(0, k).sort(function(a, b) { return a - b }); if (!compare(answer, expectedanswer)) console.log("bug FastPriorityQueueGP-add", answer, expectedanswer); } { var b = new FastPriorityQueueGP(k, reverseddefaultcomparator); for (var i = 0; i < k; i++) { b.add2(rand(i)); } for (i = k; i < streamsize; i++) { b.add2(rand(i)); } var answer = b.array.slice(0, k).sort(function(a, b) { return a - b }); if (!compare(answer, expectedanswer)) console.log("bug FastPriorityQueueGP-add2", answer, expectedanswer); } { var b = new FastPriorityQueue(reverseddefaultcomparator); for (var i = 0; i < k; i++) { b.add(rand(i)); } for (i = k; i < streamsize; i++) { var x = rand(i); if (x < b.peek()) { b.replaceTop(x); } } var answer = b.array.slice(0, k).sort(function(a, b) { return a - b }); if (!compare(answer, expectedanswer)) console.log("bug FastPriorityQueue-KWillets-replaceTop", answer, expectedanswer); } { var b = new FastPriorityQueue(reverseddefaultcomparator); for (var i = 0; i < k; i++) { b.add(rand(i)); } for (i = k; i < streamsize; i++) { var x = rand(i); if (x < b.peek()) { b.add(x); b.poll(); } } var answer = b.array.slice(0, k).sort(function(a, b) { return a - b }); if (!compare(answer, expectedanswer)) console.log("bug FastPriorityQueue-KWillets", answer, expectedanswer); } { var a = new Array(); for (var i = 0; i < streamsize; i++) { a.push(rand(i)); } a.sort(function(a, b) { return a - b }); var answer = a.slice(0, k); if (!compare(answer, expectedanswer)) console.log("bug sort"); } { var a = new Array(); for (var i = 0; i < streamsize; i++) { a.push(rand(i)); } var answer = QuickSelect(a, k, defaultcomparator).slice(0, k).sort(function(a, b) { return a - b }); if (!compare(answer, expectedanswer)) console.log("bug QuickSelect"); } { var a = new Array(); for (var i = 0; i < 2 * k; i++) { a.push(rand(i)); } QuickSelect(a, k, defaultcomparator); var eaten = 2 * k; while (eaten < streamsize) { // assume that k divides streamsize for (var i = 0; i < k; i++) { a[k + i] = rand(i + eaten); } QuickSelect(a, k, defaultcomparator); eaten += k; } var answer = a.slice(0, k).sort(function(a, b) { return a - b }); if (!compare(answer, expectedanswer)) console.log("bug naiveGoogleGuava"); } { var a = new Array(); var i = 0; for (; i < 2 * k; i++) { a.push(rand(i)); } QuickSelect(a, k, defaultcomparator); var pivotvalue = a[k]; var locationinbuffer = k; for (; i < streamsize; i += 1) { var newvalue = rand(i); if (newvalue < pivotvalue) { a[locationinbuffer++] = newvalue; } if (locationinbuffer == 2 * k) { QuickSelect(a, k, defaultcomparator); locationinbuffer = k; } } if (locationinbuffer != k) QuickSelect(a, k, defaultcomparator); var answer = a.slice(0, k).sort(function(a, b) { return a - b }); if (!compare(answer, expectedanswer)) console.log("bug naiveDavidEppstein", answer, expectedanswer); } }