- gf24240 的博客
《梦溪笔谈·科技》卷十三:组内离差平方和
- @ 2026-5-21 21:19:16
前言
我早该想到的。
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 5;
int n;
double a[N], s[N];
double xb;
double d2(int l, int r)
{
double xb = s[r] - s[l - 1], ret = 0;
xb /= (r - l + 1.0);
//cout << xb << "\n\n";//////
for (int i = l; i <= r; ++i)
{
ret += (1.0 * a[i] - xb) * (1.0 * a[i] - xb);
}
return ret;
}
int main()
{
cin >> n;
for (int i = 1; i <= n; ++i)
{
cin >> a[i];
}
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; ++i)
{
s[i] = s[i - 1] + a[i];
}
cout << "排序:";
for (int i = 1; i <= n; ++i)
cout << a[i] << ' ';
cout << '\n';
cout << " 分组 第一组d^2 第二组d^2 组内d^2\n";
for (int k = 1; k < n; ++k)
{
double l = d2(1, k), r = d2(k + 1, n);
cout << "第 " << k << " 个间隔 "
<< l << " "
<< r << " "
<< l + r << "\n";
}
return 0;
}
/*
10
8 12 8 10 13 7 12 11 10 9
*/