🧠 Задача на C#: "Сбалансированное стандартное отклонение"
Условие
Дан список чисел
Нужно определить: существует ли такой индекс, при котором массив можно разделить на две части, и стандартные отклонения этих частей отличаются не более чем на `epsilon` (например, 0.1).
Пример:
Формат функции:
Решение:
Пример использования:
Что проверяет задача:
• знание статистики и работы со стандартным отклонением
• навыки эффективной работы с коллекциями
• аккуратность при вычислениях с
• понимание требований к длине выборки для корректной статистики
Хочешь — могу добавить LINQ-only версию, визуализацию через Plotly.NET или тесты через xUnit.
@csharp_1001_notes
Условие
Дан список чисел
List<double>
— это одномерное распределение значений. Нужно определить: существует ли такой индекс, при котором массив можно разделить на две части, и стандартные отклонения этих частей отличаются не более чем на `epsilon` (например, 0.1).
Пример:
var data = new List<double> { 1.0, 2.0, 3.0, 6.0, 9.0 };
// Разделение после 2 → [1.0, 2.0], [3.0, 6.0, 9.0]
// std_left ≈ 0.707, std_right ≈ 3.0 → ❌ слишком большая разница
Формат функции:
public static bool HasBalancedStdSplit(List<double> data, double epsilon = 0.1)
Решение:
using System;
using System.Collections.Generic;
using System.Linq;
public class StatUtils
{
public static bool HasBalancedStdSplit(List<double> data, double epsilon = 0.1)
{
int n = data.Count;
if (n < 4) return false;
for (int i = 2; i <= n - 2; i++)
{
var left = data.Take(i).ToList();
var right = data.Skip(i).ToList();
double stdLeft = StandardDeviation(left);
double stdRight = StandardDeviation(right);
if (Math.Abs(stdLeft - stdRight) <= epsilon)
return true;
}
return false;
}
private static double StandardDeviation(List<double> values)
{
double mean = values.Average();
double sumSquares = values.Sum(v => Math.Pow(v - mean, 2));
return Math.Sqrt(sumSquares / (values.Count - 1));
}
}
Пример использования:
class Program
{
static void Main()
{
var data = new List<double> { 2, 4, 4, 4, 5, 5, 7, 9 };
bool result = StatUtils.HasBalancedStdSplit(data, 0.5);
Console.WriteLine($"Можно ли сбалансировать: {result}");
}
}
Что проверяет задача:
• знание статистики и работы со стандартным отклонением
• навыки эффективной работы с коллекциями
• аккуратность при вычислениях с
double
• понимание требований к длине выборки для корректной статистики
Хочешь — могу добавить LINQ-only версию, визуализацию через Plotly.NET или тесты через xUnit.
@csharp_1001_notes