Задание EGEINFB5FB72: Эффективная обработка данных и кластеры

ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий

Открыть решение ↓ Ошибка или пожелание

Тип задачи: Эффективная обработка данных и кластеры.

Учебные темы: Анализ данных. Основные задачи анализа данных: прогнозирование, классификация, кластеризация, анализ отклонений. Последовательность решения задач анализа данных: сбор первичных данных, очистка и оценка качества данных, выбор и/или построение модели, преобразование данных, визуализация данных, интерпретация результатов. Программные средства и интернет-сервисы для обработки и представления данных. Большие данные. Машинное обучение; Массивы и последовательности чисел. Вычисление обобщённых характеристик элементов массива или числовой последовательности (суммы, произведения, среднего арифметического, минимального и максимального элементов, количества элементов, удовлетворяющих заданному условию). Линейный поиск заданного значения в массиве. Алгоритмы работы с элементами массива с однократным просмотром массива. Сортировка одномерного массива. Простые методы сортировки (метод пузырька, метод выбора, сортировка вставками). Сортировка слиянием. Быстрая сортировка массива (алгоритм QuickSort). Двоичный поиск в отсортированном массиве.

Впишите правильный ответ.

Рисунок из условия ФИПИ

Задание выполняется с использованием прилагаемых
файлов.

 

Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.

Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных точек кластера минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между двумя точками на плоскости A(x1, y1)  
и B(x2, y2) вычисляется по формуле:

d(A, B)=(x2−x1)2+(y2−y1)2. 

В файле A хранятся координаты точек двух кластеров, где H = 6
и W = 4,5 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y. Известно, что количество точек не превышает 1000.

В файле Б хранятся координаты точек трёх кластеров, где H = 6,
W = 5 для каждого кластера. Известно, что количество точек
не превышает 10 000. Структура хранения информации в файле Б аналогична структуре в файле А.

Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, являющихся аномалиями, возникшими в результате помех при передаче данных. Эти три точки не относятся ни к одному
из кластеров, их учитывать не нужно.

Для файла А определите координаты центра каждого кластера, затем найдите два числа: Px – сумму абсцисс центров кластеров
и Py – сумму  ординат центров кластеров.

Для файла Б определите координаты центра каждого кластера, затем найдите два числа: Q1 – минимальное расстояние между центрами различных кластеров и Q2 – максимальное расстояние между центрами кластеров.

 

В ответе запишите четыре числа: в первой строке – сначала абсолютную величину целой части произведения Px × 10 000, затем абсолютную величину целой части произведения Py × 10 000;
во второй строке – сначала абсолютную величину целой части произведения Q1 × 10 000, затем абсолютную величину целой части произведения Q2 × 10 000.

Возможные данные одного из файлов проиллюстрированы графиком.


 

Внимание! График приведён в иллюстративных целях для произвольных значений, не имеющих отношения к заданию.
Для выполнения задания используйте данные из прилагаемого файла.

Рисунок из условия ФИПИ

 

 

Скачать файл задания (ZIP, ФИПИ)


i
СВОЙСТВА ЗАДАНИЯ
КЭС:
4.1 Анализ данных. Основные задачи анализа данных: прогнозирование, классификация, кластеризация, анализ отклонений. Последовательность решения задач анализа данных: сбор первичных данных, очистка и оценка качества данных, выбор и/или построение модели, преобразование данных, визуализация данных, интерпретация результатов. Программные средства и интернет-сервисы для обработки и представления данных. Большие данные. Машинное обучение
Тип ответа:Краткий ответ
Номер: B5FB72
НЕ РЕШЕНО Ответить

Решение задания EGEINFB5FB72

Ответ: 97488 335950 70853 143630

Решение.

В файле A записано 217 точек, в файле Б — 617. Строка X Y является заголовком. Координаты читаем с десятичной запятой; порядок строк не задаёт принадлежность кластеру. Иллюстративный график условия не используем вместо этих данных.

Центр по условию обязан быть одной из точек кластера. Среднее арифметическое координат вообще может не совпасть ни с одной точкой, поэтому оно не заменяет поиск центра. Для каждого кандидата p считаем S(p) — сумму евклидовых расстояний до всех точек того же кластера. Центром выбираем точку с наименьшим S(p).

Сначала выделим кластеры. Для этих конкретных файлов подходят следующие прямоугольники с границами, параллельными осям. Запись x₁ < x < x₂, y₁ < y < y₂ задаёт внутренность прямоугольника:

ФайлКластерАбсциссаОрдинатаТочек
A11,5 < x < 65,5 < y < 11,5110
A23,5 < x < 821,5 < y < 27,5107
Б13 < x < 821,5 < y < 27,5419
Б26 < x < 1131,5 < y < 37,5107
Б313 < x < 1832 < y < 3888

У каждого прямоугольника высота равна 6, ширина для A равна 4,5, для Б равна 5. Указанные прямоугольники попарно не пересекаются: для каждой пары разделены либо интервалы x, либо интервалы y. Проверяем все строки: каждая обычная точка попадает ровно в один прямоугольник; на границах точек нет. В условии гарантирована единственность допустимого разбиения, поэтому найденное разбиение и является искомым. Эти координатные границы относятся именно к приложенным файлам.

В файле A учтены все точки. В файле Б вне трёх прямоугольников остаются ровно три точки:

Номер точки без заголовкаxy
147-3,9850638-2,0876082
30333,552778851,9229029
376-14,215063846,9229029

Каждая из этих трёх точек удалена от любой другой точки больше чем на диагональ прямоугольника √6² + 5² = √61. Они изолированы от основных скоплений. Исключаем именно эти три аномалии; число оставшихся точек равно сумме размеров трёх кластеров в таблице.

Теперь сравниваем S(p) для всех точек каждого кластера. В таблице приведены найденные центры и разность между второй по величине снизу суммой и минимальной суммой. Положительная разность подтверждает единственность найденного минимума:

ФайлКластерНомер точкиx центраy центраРазность сумм
A11643,63191928,7827990,014241
A2736,116888924,81226460,849163
Б11015,531708924,56030280,082815
Б21038,422733834,38974270,245667
Б359315,488870434,91178140,458167

Для файла A складываем, а не усредняем координаты двух центров:
Pₓ = 3,6319192 + 6,1168889 = 9,7488081;
Pᵧ = 8,782799 + 24,8122646 = 33,5950636.

Для файла Б проверяем все три пары центров. Расстояние для пары i, j вычисляем как √(xᵢ − xⱼ)² + (yᵢ − yⱼ)²:

КластерыРасстояние, приближённоЦелая часть после умножения на 10 000
2, 37,08539419270853
1, 210,245775408102457
1, 314,363083734143630

Минимальное расстояние даёт пару 2, 3; максимальное — пару 1, 3. Для ответа берём целые части после умножения на 10 000, затем абсолютные величины. Предварительное округление координат центров не допускается.

Распакуем архив и сохраним соответствующие текстовые файлы как A.txt и B.txt рядом с программой. Программа выполняет весь перебор кандидатов:

from math import fsum, hypot, isqrt
from decimal import Decimal

BOXES = [[[1.5, 6, 5.5, 11.5], [3.5, 8, 21.5, 27.5]], [[3, 8, 21.5, 27.5], [6, 11, 31.5, 37.5], [13, 18, 32, 38]]]

def read_points(name):
    with open(name, encoding="utf-8-sig") as f:
        assert f.readline().split() == ["X", "Y"]
        rows = [s.replace(",", ".").split() for s in f if s.strip()]
    return [tuple(int(Decimal(v) * 10**7) for v in row) for row in rows]

def centers(points, boxes, expected_anomalies):
    groups = [[] for box in boxes]
    skipped = 0
    for p in points:
        x, y = p
        found = [i for i, (x1, x2, y1, y2) in enumerate(boxes)
                 if x1 * 10**7 < x < x2 * 10**7 and y1 * 10**7 < y < y2 * 10**7]
        assert len(found) <= 1
        if found:
            groups[found[0]].append(p)
        else:
            skipped += 1
    assert skipped == expected_anomalies
    assert all(groups)
    answer = []
    for group in groups:
        def score(p):
            return fsum(hypot(p[0] - q[0], p[1] - q[1]) for q in group)
        answer.append(min(group, key=score))
    return answer

a = centers(read_points("A.txt"), BOXES[0], 0)
b = centers(read_points("B.txt"), BOXES[1], 3)
print(*(divmod(abs(sum(p[k] for p in a)), 1000)[0] for k in (0, 1)))
squares = [(b[i][0] - b[j][0])**2 + (b[i][1] - b[j][1])**2
           for i in range(3) for j in range(i + 1, 3)]
print(divmod(isqrt(min(squares)), 1000)[0], divmod(isqrt(max(squares)), 1000)[0])

Координаты в программе умножены на 10⁷ и сохранены как целые числа. Это общий положительный масштаб, поэтому точка с минимальной суммой расстояний не меняется. Для ответа по A делим абсолютную сумму на 1000 с отбрасыванием остатка. По Б isqrt вычисляет целую часть квадратного корня точно, после чего целочисленное деление на 1000 даёт требуемые четыре знака без ошибки округления расстояния. Перебор центров занимает O(n₁² + n₂² + n₃²), где nᵢ — размеры кластеров; для файла A слагаемых два.

Проверка: выполненная программа дала указанные числа. Независимое разбиение по связности близких точек подтвердило все составы кластеров и три аномалии; отдельный расчёт по XLSX дал те же центры и ответы. Две наименьшие суммы расстояний каждого кластера дополнительно пересчитаны с высокой десятичной точностью.

Первая строка ответа: 97488 335950.
Вторая строка ответа: 70853 143630.

Ответ: 97488 335950 70853 143630.

Помочь улучшить сайт

Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINFB5FB72.

Сообщение увидит только команда сайта: на странице оно не публикуется.

Комментарии к решению

Комментарии видны всем посетителям сайта.

Комментариев пока нет. Будьте первым.

Чтобы оставить комментарий, войдите или зарегистрируйтесь.