К оглавлению

Гистограммы

С.И.Хашин


histogram.h - заголовочный файл
histogram.cpp - реализация.

Совсем простой класс для работы с гистограммами.

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


К оглавлению


free counters