Files
@ a4477a81d96d
Branch filter:
Location: AENC/switchchain/cpp/histogram.hpp - annotation
a4477a81d96d
1.2 KiB
text/x-c++hdr
Add datasets
ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 ca21806f0249 | #pragma once
#include "exports.hpp"
#include <algorithm>
#include <vector>
// Histogram over integers with binsize 1
class Histogram {
public:
Histogram() : xmin(0) {}
~Histogram() {}
void reset() {
frequencies.clear();
xmin = 0;
}
void add(int sample) {
if (frequencies.empty()) {
xmin = sample;
frequencies.push_back(1);
return;
}
if (sample < xmin) {
int extra = xmin - sample;
frequencies.insert(frequencies.begin(), extra, 0);
xmin = sample;
frequencies.front()++;
return;
}
if (sample - xmin >= (int)frequencies.size()) {
int extra = sample - xmin - frequencies.size() + 1;
frequencies.insert(frequencies.end(), extra, 0);
frequencies.back()++;
return;
}
frequencies[sample - xmin]++;
}
// For exports
std::vector<std::pair<int, int>> getHistogram() const {
std::vector<std::pair<int, int>> histogram;
int i = xmin;
for (auto f : frequencies)
histogram.push_back({i++, f});
return histogram;
}
std::vector<int> frequencies;
int xmin;
};
|