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

ФИПИ · ЕГЭ · все форматы ответа · 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 Анализ данных. Основные задачи анализа данных: прогнозирование, классификация, кластеризация, анализ отклонений. Последовательность решения задач анализа данных: сбор первичных данных, очистка и оценка качества данных, выбор и/или построение модели, преобразование данных, визуализация данных, интерпретация результатов. Программные средства и интернет-сервисы для обработки и представления данных. Большие данные. Машинное обучение
Тип ответа:Краткий ответ
Номер: 76B8BD
НЕ РЕШЕНО Ответить

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

Ответ: 107002 323741 58778 151839

Решение.

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

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

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

ФайлКластерАбсциссаОрдинатаТочек
A11,5 < x < 65,5 < y < 11,5101
A25 < x < 9,521 < y < 27114
Б15 < x < 1023,5 < y < 29,5385
Б214,5 < x < 19,528,5 < y < 34,5143
Б320 < x < 2525,5 < y < 31,584

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

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

Номер точки без заголовкаxy
68-12,442025943,7692988
15339,367966648,7692988
271-2,21202590,0782193

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

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

ФайлКластерНомер точкиx центраy центраРазность сумм
A11433,6460858,2815270,167797
A22087,054185624,09260650,264083
Б12067,138819126,55574870,082508
Б219916,99370931,6365380,067586
Б316622,152978328,8203220,341912

Для файла A складываем, а не усредняем координаты двух центров:
Pₓ = 3,646085 + 7,0541856 = 10,7002706;
Pᵧ = 8,281527 + 24,0926065 = 32,3741335.

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

КластерыРасстояние, приближённоЦелая часть после умножения на 10 000
2, 35,87785099158778
1, 211,087527896110875
1, 315,183980661151839

Минимальное расстояние даёт пару 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], [5, 9.5, 21, 27]], [[5, 10, 23.5, 29.5], [14.5, 19.5, 28.5, 34.5], [20, 25, 25.5, 31.5]]]

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 дал те же центры и ответы. Две наименьшие суммы расстояний каждого кластера дополнительно пересчитаны с высокой десятичной точностью.

Первая строка ответа: 107002 323741.
Вторая строка ответа: 58778 151839.

Ответ: 107002 323741 58778 151839.

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

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

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

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

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

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

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