.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;
 })
示例#2
0
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);
    }

}