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;...