Задание 27 ЕГЭ по информатике 2027: кластеры и анализ данных
Задание 27 ЕГЭ по информатике — анализ данных из файла: записи разбивают на кластеры по условию, в каждом кластере находят центр и по ним считают величины из условия. С 2027 года ответ записывают одной строкой из двух чисел, за полностью верный ответ ставят 2 балла.
- Что проверяет: Умение выполнять последовательность решения задач анализа данных: сбор первичных данных, очистка и оценка качества данных, выбор и построение модели, преобразование данных, визуализация данных, интерпретация результатов.
- Баллы: 2 первичных балла
- Формат ответа: два целых числа в одной строке
- Программа: задание решают программой
- Уровень сложности: высокий
- Время: около 36 минут по спецификации
- Кодификатор: 4.1 — анализ данных: прогнозирование, классификация, кластеризация, анализ отклонений; последовательность решения задач анализа данных; 2.2 — понимать основные задачи анализа данных и последовательность их решения
Как решать
В демоверсии 2027 года задание 27 устроено так: в каждой строке файла — сведения об одном объекте (числа с десятичной запятой и признак), и объекты нужно разбить на K кластеров по одной величине, которую считают по формуле из условия. У любых двух объектов одного кластера эта величина отличается не больше чем на R, и условие гарантирует, что такое разбиение одно.
При кластеризации по одной величине посчитайте её для каждой строки, отсортируйте объекты по ней и разрежьте список там, где соседние значения отличаются больше чем на R: каждый кусок и есть кластер. Проверьте себя: кластеров должно получиться ровно K.
Центр кластера по условию — объект, у которого сумма модулей разностей величины с остальными объектами кластера минимальна. Его находят перебором: для каждого объекта считают сумму и берут минимум. При нечётном числе объектов с разными значениями это медиана кластера.
Числа в файле записаны с десятичной запятой, а разделителями могут быть несколько пробелов и табуляций. Замените запятые точками и разбейте строку методом split() без аргументов: он понимает любые пробельные разделители.
В ответ идут целые части величин, умноженных на 10 000: int(q * 10000), функция round здесь не подходит. С 2027 года оба числа записывают одной строкой. Если числа перепутаны местами или верно только одно число на своём месте, ставят 1 балл.
Примеры с решением
Пример 1
В файле — сведения о датчиках на плоскости: в каждой строке координаты x и y и тип датчика (буква A, B или C). Числа записаны с десятичной запятой, значения разделены пробелами или табуляциями. Датчики расположены на K = 3 кольцах вокруг начала координат: у любых двух датчиков одного кольца расстояния до начала координат различаются не больше чем на R = 1,0, и такое разбиение на кольца единственно. Центром кольца назовём датчик, у которого сумма модулей разностей расстояний до начала координат с остальными датчиками кольца минимальна; для каждого кольца центр единственный.
Найдите Q1 — наибольшее евклидово расстояние между двумя датчиками типа B одного кольца, и Q2 — наименьшее расстояние до начала координат среди центров колец. В ответе запишите два числа: сначала целую часть произведения Q1 × 10 000, затем целую часть произведения Q2 × 10 000.
Файл данных: 27_ex1.txt — 875 строк, 12,7 КБ. Первые строки файла:
2,44 -11,31 B 0,77 -2,50 B -1,00 -7,62 A -4,86 5,15 C -11,61 -2,99 C 1,16 -2,45 B -0,63 2,96 C 11,12 4,99 A
Решение на Python
from math import dist, hypot
R = 1.0
points = []
for line in open('27_ex1.txt'):
x, y, kind = line.replace(',', '.').split()
x, y = float(x), float(y)
points.append((hypot(x, y), x, y, kind)) # расстояние до начала координат — первым
# Кольца: сортируем по расстоянию и режем там, где соседние отличаются больше чем на R.
points.sort()
rings = [[points[0]]]
for p in points[1:]:
if p[0] - rings[-1][-1][0] > R:
rings.append([])
rings[-1].append(p)
q1 = 0
centers = []
for ring in rings:
center = min(ring, key=lambda p: sum(abs(p[0] - q[0]) for q in ring))
centers.append(center)
b = [p for p in ring if p[3] == 'B']
for i in range(len(b)):
for j in range(i + 1, len(b)):
q1 = max(q1, dist(b[i][1:3], b[j][1:3]))
q2 = min(c[0] for c in centers)
print(int(q1 * 10000), int(q2 * 10000))Ответ: 246879 30223
Величина для кластеризации — расстояние до начала координат, hypot(x, y). После сортировки по ней соседние датчики разных колец отличаются больше чем на 3, а внутри кольца — на сотые доли, поэтому список режется на три кольца. Для Q1 перебираются пары датчиков типа B внутри каждого кольца, Q2 — расстояние до начала координат у центра внутреннего кольца, около 3,02.
Пример 2
В файле — сведения о поездках такси: в каждой строке координаты точки посадки x1, y1, координаты точки высадки x2, y2 и класс машины (эконом, комфорт или бизнес). Числа записаны с десятичной запятой, значения разделены пробелами или табуляциями. Поездки разбиваются на K = 4 кластера по длине поездки — расстоянию между точками посадки и высадки: у любых двух поездок одного кластера длины различаются не больше чем на R = 1,0, и такое разбиение единственно. Центр кластера — поездка, у которой сумма модулей разностей длины с остальными поездками кластера минимальна; для каждого кластера центр единственный.
Найдите Q1 — среднее арифметическое длин поездок-центров и Q2 — наибольшую длину поездки класса «бизнес» в кластере, где больше всего поездок. В ответе запишите два числа: сначала целую часть произведения Q1 × 10 000, затем целую часть произведения Q2 × 10 000.
Файл данных: 27_ex2.txt — 864 строки, 34,6 КБ. Первые строки файла:
8,55 5,27 18,85 -1,42 комфорт 17,92 3,10 13,58 0,89 эконом 19,50 3,38 15,15 0,90 эконом 1,30 8,63 -0,94 16,57 эконом 6,95 -8,04 -4,36 -13,47 эконом 8,01 -14,68 1,12 -19,97 эконом -0,95 0,69 -1,16 -1,73 бизнес 9,60 -11,69 11,12 -13,46 комфорт
Решение на Python
from math import hypot
R = 1.0
trips = []
for line in open('27_ex2.txt', encoding='utf-8'):
*coords, car = line.replace(',', '.').split()
x1, y1, x2, y2 = map(float, coords)
trips.append((hypot(x2 - x1, y2 - y1), car))
trips.sort()
clusters = [[trips[0]]]
for t in trips[1:]:
if t[0] - clusters[-1][-1][0] > R:
clusters.append([])
clusters[-1].append(t)
centers = [min(c, key=lambda p: sum(abs(p[0] - q[0]) for q in c))[0] for c in clusters]
q1 = sum(centers) / len(centers)
biggest = max(clusters, key=len)
q2 = max(d for d, car in biggest if car == 'бизнес')
print(int(q1 * 10000), int(q2 * 10000))Ответ: 70448 25911
Длина поездки — расстояние между двумя точками, hypot(x2 - x1, y2 - y1). После сортировки по длине список режется на четыре кластера. Запись *coords, car = ...split() кладёт четыре числа строки в список coords, а последнее слово — класс машины — в переменную car. Файл открыт с кодировкой utf-8, потому что классы записаны по-русски.
Типичные ошибки
- Запятые в числах не заменили точками, и float() падает с ошибкой.
- Строку разбили методом split(' ') с одним пробелом: при двух пробелах или табуляции подряд появляются пустые элементы.
- Ответ округлили функцией round вместо целой части: из-за лишней единицы в последнем знаке ответ не засчитают.
- Центр кластера посчитали как среднее значение, хотя условие просит объект кластера с минимальной суммой разностей.
- Ответ записали в две строки, как до 2027 года; в 2027 году оба числа пишут одной строкой.
Потренироваться на тренажёре
Частые вопросы
Что изменилось в задании 27 ЕГЭ в 2027 году?
Ответ записывают одной строкой из двух чисел, а до 2027 года он занимал две строки по два числа. В демоверсии 2027 года объекты разбивают на кластеры по одной величине, которую считают по формуле из условия.
Как найти кластеры в задании 27?
Если кластеры задают по одной величине, отсортируйте объекты по ней и разрежьте список там, где соседние значения отличаются больше чем на R. Для точек на плоскости помогает точечная диаграмма в электронной таблице: на ней видно, где проходят границы между группами точек.
Сколько баллов дают за задание 27?
2 первичных балла за полностью верный ответ. Если числа перепутаны местами или верно только одно число на своём месте, ставят 1 балл.
Официальные материалы
- Демоверсия, спецификация и кодификатор ЕГЭ 2027 по информатике (архив, проект)
- Открытый банк заданий ЕГЭ
Другие задания
Все задания и структура экзамена — на странице ЕГЭ по информатике. Соседние разборы: задание 26.
Описание задания сверено 28 сентября 2026 года со спецификацией 2027 года (документы 2027 года). Примеры составлены нами по структуре демоверсии, каждое решение запущено, и напечатанный им ответ совпадает с ответом на странице. Кодолимп не связан с разработчиками экзамена. Заметили неточность — напишите нам.