С.И.Хашин
Совсем простой класс для работы с гистограммами.
class histogr{
private:
int min, size; // минимальное значение и размер массива
int *v; // данные
public:
// constructors/destructor
histogr();
~histogr();
//
void clear(); // обнулить
void add(int x); // добавить элемент
int get(int x); // количество элементов с данным x
int Min();
int Max();
int MaxCount(int &x);// Какое x встречалось чаще всего
long long Sum() { return sum; }
int quantil(double q);
// квантиль: наименьшее k такое, что сумма всех элементов <=k больше или равна q*sum
int quantilR(double q);
//квантиль: наибольшее k такое, что сумма всех элементов >=k больше или равна q*sum
};
Пример работы:
histogr h;
h.add(2);
h.add(4);
h.add(-3);
h.add(13);
h.add( 2);
for (int i = h.Min(); i <= h.Max(); i++)
printf( "%5d: %10d\n", i, h.get(i));
for (int y = 0; y < 100; y++)
for (int x = 0; x < 100; x++)
h.add(x*x - y*y);
printf("sum=%lld, min =%d, max=%d\n", h.Sum(), h.Min(), h.Max());
printf("q0 =%d, q1=%d", h.quantil(0.03), h.quantilR(0.03));