patternMatchVariance static method

double patternMatchVariance(
  1. Int32List counters,
  2. List<int> pattern,
  3. double maxIndividualVariance
)

Implementation

static double patternMatchVariance(Int32List counters, List<int> pattern, double maxIndividualVariance) {
  final int numCounters = counters.length;
  int total = 0;
  int patternLength = 0;
  for (int i = 0; i < numCounters; i++) {
    total += counters[i];
    patternLength += pattern[i];
  }
  if (total < patternLength) return double.infinity;

  final double unitBarWidth = total / patternLength;
  final double scaledIndividualVariance = maxIndividualVariance * unitBarWidth;
  double totalVariance = 0;
  for (int x = 0; x < numCounters; x++) {
    final int counter = counters[x];
    final double scaledPattern = pattern[x] * unitBarWidth;
    final double variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter;
    if (variance > scaledIndividualVariance) return double.infinity;
    totalVariance += variance;
  }
  return totalVariance / total;
}