Задача — вычислить асимметрию (скьюнесс) множества чисел {h_l, ..., h_r} по формуле, где обычно берут центральный момент III и нормировку на σ^3:
- μ = среднее арифметическое: μ = (1/n) Σ_{i=l}^r h_i
- σ^2 = (1/n) Σ_{i=l}^r (h_i − μ)^2
- σ = sqrt(σ^2)
- асимметрия (скьюнесс) A = γ1 = [(1/n) Σ_{i=l}^r (h_i − μ)^3] / σ^3
Замечание: если σ = 0 (все значения равны), асимметрия не может быть определена (задаётся как ноль или не определено в зависимости от условий задачи). В обычной практике используется именно population-variance (деление на n). Если же задача требует sample-variance (деление на n−1), формула для A изменится, и также может потребоваться поправка Броуна (но в большинстве школьных задач берут population-подход, как в примере μ = 3.8 и σ^2 = 6.16).
Пошаговый план решения
- Собери все значения h_l, h_{l+1}, ..., h_r. Пусть n = r − l + 1.
- Найди μ = (h_l + h_{l+1} + ... + h_r) / n.
- Найди σ^2 = (1/n) Σ (h_i − μ)^2 и σ = sqrt(σ^2).
- Найди m3 = (1/n) Σ (h_i − μ)^3.
- Найди A = m3 / (σ^3).
- Выведи A. Если σ = 0, скажи, что асимметрия не определена (или равна 0 по условию).
Пример (для иллюстрации, данные произвольные)
Пусть h = [2, 4, 3, 5, 3], т.е. n = 5.
- μ = (2+4+3+5+3)/5 = 17/5 = 3.4
- Σ (h_i − μ)^2 = 1.96 + 0.36 + 0.16 + 2.56 + 0.16 = 5.20
σ^2 = 5.20/5 = 1.04, σ ≈ 1.0199
- Σ (h_i − μ)^3 = (−1.4)^3 + (0.6)^3 + (−0.4)^3 + (1.6)^3 + (−0.4)^3
= −2.744 + 0.216 − 0.064 + 4.096 − 0.064 = 1.44
m3 = 1.44/5 = 0.288
- A = m3 / σ^3 ≈ 0.288 / (1.0199^3) ≈ 0.288 / 1.0617 ≈ 0.271
Таким образом,Skewness ≈ 0.27 (положительная асимметрия).
Как посчитать на практике
- Введите все значения h_l ... h_r, затем выполните вычисления по шагам выше.
- Если вы хотите, могу посчитать конкретную асимметрию по вашим данным — пришлите сами значения или диапазон индексов и сами числа.
Коды-цепочки (для удобства написания)
def skewness(arr):
n = len(arr)
if n == 0:
return None
mu = sum(arr) / n
var = sum((x - mu) ** 2 for x in arr) / n
if var == 0:
return 0.0 # или None, в зависимости от требований
s = var ** 0.5
m3 = sum((x - mu) ** 3 for x in arr) / n
return m3 / (s ** 3)
#include <bits/stdc++.h>
using namespace std;
double skewness(const vector& a) {
int n = (int)a.size();
if (n == 0) return 0.0;
double mu = 0;
for (double x : a) mu += x;
mu /= n;
double var = 0;
for (double x : a) var += (x - mu) * (x - mu);
var /= n;
if (var == 0) return 0.0;
double s = sqrt(var);
double m3 = 0;
for (double x : a) m3 += (x - mu) * (x - mu) * (x - mu);
m3 /= n;
return m3 / (s * s * s);
}
Основные моменты
- Формула приведена для стандартного определения skewness через центральные моменты.
- В примере в задаче дано μ и σ^2, но без самих значений h_i нельзя точно посчитать A — нужны сами данные или хотя бы сумма (h_i − μ)^3.
- Если хотите, пришлите числа h_l, h_{l+1}, ..., h_r (или просто диапазон и сами значения), и я посчитаю асимметрию для вашего набора.
Готов подобрать решение под ваши данные: пришлите числа h_l, ..., h_r или укажите l и r и сами значения высот домов.