С.И.Хашин
Совсем простой класс для работы с гистограммами.
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));