JSFiddle - React, Tailwind, and code Playground

Binary Compression Baseline Offset Test - Success

by skibulk

JavaScript

console.clear();

var data = [];
data.bits = 0;

for (var i = 0; i < 30; i++) {

  current = Math.floor(Math.random() * 10000);
  data.push(current);
  data.bits += msb32(current);
}

tryFrameOfReference(data)
console.log(data);

// Try 2 frames of reference?
function tryFrameOfReference(data){
  var offset;
  var bits;
  var bestOffset = 0;
  // Minimum target - Account for header and +/- sign bits
  var bestBits = data.bits - 6 - data.length;
  
  tryOffset: for (var i = 0; i < data.length; i++) {
  
    offset = data[i];

		// skip duplicates
    if (data.indexOf(offset) < i) continue;

    bits = 0;

    for (var j = 0; j < data.length; j++) {

      current = data[j] - offset;
      bits += msb32(current);
      
      // It's fine if we break even, the data will likely be more compressible.
      if(bits > bestBits) continue tryOffset;
    }

    bestOffset = offset;
    bestBits = bits;
  }
  
  // add header and +/- signs bits
  bestBits += 5 + msb32(bestOffset) + data.length;
  
  if(bestBits < data.bits){
  
		for (var i = 0; i < data.length; i++) {
			data[i] -= bestOffset;
    }
    
    /*
    if(!data.offset){
	    data.offset = bestOffset;
			tryFrameOfReference(data);
    } else {
    	data.offset2 = bestOffset;
    }
    */
    data.offset = bestOffset;
    data.bits = bestBits;
    return true;
  }
  
  // data.offset = false;
  return false;
}

function noSubNoConSize(arr){

}

function noSubNoConSize(arr){

}


var results1 = [];
var results2 = [];

function test() {
  var current = 0;
  var min = Infinity;
  var max = 0;
  var data = [];
  var beforeBits = 0;

  for (var i = 0; i < 30; i++) {
    current = Math.floor(Math.random() * 10000);
    if (current < min) min = current;
    if (current > max) max = current;
    data.push(current);
    beforeBits += msb32(current);
  }

  var offset;
  var afterBits;
  var bestBits = Infinity;
  var bestOffset = 0;
	
  /*
	// Brute Force All offsets
  nextOffset: for (var offset = min; offset <= max;...