Статья Автор: Деникина Н.В., Деникин А.В.

Анализ строк числовой таблицы — Суммы и средние групп

Средние групп

Деление можно убрать

Когда группы разной длины, сравнивать только суммы нельзя. Но вычислять дроби тоже необязательно: достаточно умножить крест-накрест.

Микропаттерн: умножай крест-накрест. Так код остаётся целочисленным и буквально повторяет математическое условие.
Общая схема

Среднее A меньше среднего B

sum(A) * len(B)
<
sum(B) * len(A)

Почему работает
Умножаем на положительные длины
sum(A) / len(A) < sum(B) / len(B)
sum(A) * len(B) < sum(B) * len(A)

Знак неравенства не меняется, потому что длины списков положительны.

Тройка и одиночные
Повторяющееся значение известно

Если одно значение встречается три раза, его можно взять как triple[0].

sum(uniq) <= triple[0] * len(uniq)

Полный мини-пример

Среднее одиночных не больше повторяющегося

Сначала проверяем структуру: одна тройка и четыре одиночных значения. Только после этого обращаемся к triple[0] и сравниваем средние.

ABCDEFG
значения88824610
count3331111
группаповт.повт.повт.один.один.один.один.
Среднее одиночных сравнивается с повторяющимся числом без дробей: сумма ≤ значение × количество.


Результат: проходят 2 строки.

Решение в электронной таблице

Средние групп без деления

В I:O находятся частоты. P — повторяющееся число, Q и R — сумма и количество одиночных. S сравнивает средние без явного деления.

Исследуйте такие данные

Измени одно одиночное число и наблюдай, как меняются Q и S. Формула в S сравнивает средние умножением крест-накрест.

S2
fx
Выбери ячейку — её значение или формула появится в строке fx. Исходные числа можно менять прямо в таблице.
ABCDEFGHIJKLMNOPQRS
2133311118224ИСТИНА
3233311115264ЛОЖЬ
4333311119104ИСТИНА
Служебная ячейка: строка формул показывает, как получен результат.
Условие на структуру и среднее выполняется у двух строк.
Рабочая книга 09_averages.xlsx находится во вложениях. В ней можно продолжить исследование на большем наборе строк.

Для строки 8 8 8 2 4 6 10 чему равна правая часть 8 * len(uniq)?


Группы разной длины

Суммы сами по себе ничего не доказывают

Если повторяющихся позиций шесть, а одиночное число одно, средние сравниваются так:

sum(rep) * len(uniq) < sum(uniq) * len(rep)

Ловушки
Сравнили суммы вместо средних.
Перешли к дробям, хотя целочисленное сравнение короче.
Взяли triple[0] до проверки структуры.
Загрузка...
Чтобы оставить комментарий, необходимо авторизоваться
💬
Пока нет комментариев. Будьте первым!
Печать