Как математически выделить важные элементы в последовательности и показать их весомость
Что проверяют
Вопрос нарочно размыт: смотрят, уточните ли вы, что считать «важностью», прежде чем писать код. Дальше проверяют, умеете ли вы превратить критерий в формулу и аккуратно посчитать её на C#. Следом обычно просят найти топ-k важных элементов быстрее, чем полной сортировкой.
Как отвечать
Сначала спросите про критерий, затем предложите подходящую меру:
- доля в сумме: вес
w = x / Σx, веса складываются в единицу и сразу читаются как проценты. Годится для неотрицательных величин вроде выручки или времени; - частота: для повторяющихся значений считаете вхождения через
GroupByилиCountBy(появился в LINQ в .NET 9) и делите на длину последовательности; - отклонение от нормы: z-оценка
(x - mean) / sdвыделяет необычные элементы. Порог в 2 или 3 стандартных отклонения задаётся по задаче; - затухание по времени: во временном ряду свежие точки весомее, тут подходит экспоненциальное сглаживание с коэффициентом α;
- нормировка оценок: произвольные баллы softmax переводит в веса с суммой 1.
Для отбора топ-k не сортируйте всё за O(n log n): PriorityQueue<TElement, TPriority> (есть с .NET 6) в роли мин-кучи размера k даёт O(n log k). «Показать весомость» обычно значит вернуть пары из элемента и веса, отсортированные по убыванию, с долями в процентах. Проговорите сложность и граничные случаи: пустая последовательность, все элементы равны, отрицательные значения.
Где спотыкаются
Делят целое на целое. В C# 3 / 10 даёт 0, и все веса обнуляются. Хотя бы один операнд должен быть double или decimal.
Не проверяют деление на ноль: сумма равна нулю или стандартное отклонение нулевое, когда все элементы одинаковые. В double получается NaN, и он молча расползается по результату.
Считают z-оценку на данных с сильными выбросами. Выброс сдвигает и среднее, и отклонение и тем самым маскирует сам себя, устойчивее медиана и медианное абсолютное отклонение. С softmax похожая ловушка: Math.Exp от больших чисел переполняется, поэтому из всех оценок сначала вычитают максимум.