in resources/perf.webkit.org/public/shared/statistics.js [621:652]
function findOptimalSegmentation(values, costMatrix, segmentCount) {
var cost = allocateCostUpperTriangularForSegmentation(values, segmentCount);
var previousNode = allocatePreviousNodeForSegmentation(values, segmentCount);
findOptimalSegmentationInternal(cost, previousNode, values, costMatrix, segmentCount);
if (Statistics.debuggingSegmentation) {
console.log('findOptimalSegmentation with', segmentCount, 'segments');
for (var end = 0; end < values.length; end++) {
for (var k = 0; k <= segmentCount; k++) {
var start = previousNode[end][k];
if (start === undefined)
continue;
console.log(`C(segment=[${start}, ${end + 1}], segmentCount=${k})=${cost[end][k]}`);
}
}
}
var segmentEnd = values.length - 1;
var segmentation = new Array(segmentCount + 1);
segmentation[segmentCount] = values.length;
for (var k = segmentCount; k > 0; k--) {
segmentEnd = previousNode[segmentEnd][k];
segmentation[k - 1] = segmentEnd;
}
var costOfOptimalSegmentation = cost[values.length - 1][segmentCount];
if (Statistics.debuggingSegmentation)
console.log('Optimal segmentation:', segmentation, 'with cost =', costOfOptimalSegmentation);
return {segmentation: segmentation, cost: costOfOptimalSegmentation};
}