Точки на плоскости образуют несколько кластеров, в файле Б есть аномалии. Нужно разбить точки на кластеры, найти центр каждого и посчитать по центрам требуемые величины. К каждому варианту — файлы А и Б.
План решения
Построить точечную диаграмму и увидеть кластеры и аномалии.
Разбить точки на кластеры: по расстоянию до приблизительного центра или по прямым-разделителям.
В каждом кластере найти точку с наименьшей суммой расстояний.
Посчитать нужные числа и взять целую часть от ×10 000.
Python
from math import dist — расстояние между точками.
min(cl, key=lambda p: sum(dist(p, q) for q in cl)) — центр кластера.
int(abs(x) * 10000) — целая часть модуля.
Типичные ошибки
Взять среднее арифметическое точек вместо точки кластера.
Оставить аномалии в кластере.
Перепутать порядок чисел в строках ответа.
Разобранные варианты
Сначала реши сам, потом открой разбор. В разборе — программа и шаги с промежуточными значениями.
Вариант 1
А: минимумы · Б: Q1, Q2
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где H = 6 и W = 5 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.
В файле Б хранятся координаты точек трёх кластеров, где H = 5, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.
Для файла А определите координаты центра каждого кластера, затем найдите два числа: Px — минимальную из абсцисс центров кластеров и Py — минимальную из ординат центров кластеров. Для файла Б определите координаты центра каждого кластера, затем найдите два числа: Q1 — расстояние между центрами кластеров с минимальным и максимальным количеством точек и Q2 — максимальное расстояние от центра кластера до точки этого же кластера среди всех кластеров. Гарантируется, что во всех кластерах количество точек различно.
В ответе запишите четыре числа: в первой строке — сначала целую часть абсолютной величины произведения Px × 10 000, затем целую часть абсолютной величины произведения Py × 10 000; во второй строке — сначала целую часть абсолютной величины Q1 × 10 000, затем Q2 × 10 000.
Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (10; -14), (11; 12); в файле Б: (-2; -2), (-17; 17), (9; -9). В файле Б три одиночные точки далеко от облаков — аномалии.
Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.
Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (9.684368; -14.300019), (11.082319; 12.254768). Файл Б: (-1.95178; -2.064085), (-16.962641; 17.000128), (8.94468; -8.988383) (кластеры из 2489, 2126, 2072 точек).
Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.
from math import dist
def read(name):
return [tuple(map(float, line.split())) for line in open(name) if line.strip()]
def split(points, centers, r=5.5):
"""Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
clusters = [[] for _ in centers]
for p in points:
for i, c in enumerate(centers):
if dist(p, c) <= r:
clusters[i].append(p)
break # аномалии не попадают ни в один кластер
return clusters
def center(cl): # точка с наименьшей суммой расстояний до остальных
return min(cl, key=lambda p: sum(dist(p, q) for q in cl))
# файл А
A = split(read('Ege27_v1_A.txt'), [(10, -14), (11, 12)])
cA = [center(cl) for cl in A]
px = min(c[0] for c in cA)
py = min(c[1] for c in cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v1_B.txt'), [(-2, -2), (-17, 17), (9, -9)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))
Вариант 2
А: средние · Б: Q1, Q2
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где H = 4 и W = 3 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата 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.
Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (-6; 19), (2; 4); в файле Б: (19; 5), (-7; 19), (3; -14). В файле Б три одиночные точки далеко от облаков — аномалии.
Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.
Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (-6.007522; 19.134121), (2.186423; 4.032598). Файл Б: (18.948054; 4.882227), (-6.962797; 18.971783), (2.994917; -14.125646) (кластеры из 1431, 2228, 2547 точек).
Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.
from math import dist
def read(name):
return [tuple(map(float, line.split())) for line in open(name) if line.strip()]
def split(points, centers, r=5.5):
"""Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
clusters = [[] for _ in centers]
for p in points:
for i, c in enumerate(centers):
if dist(p, c) <= r:
clusters[i].append(p)
break # аномалии не попадают ни в один кластер
return clusters
def center(cl): # точка с наименьшей суммой расстояний до остальных
return min(cl, key=lambda p: sum(dist(p, q) for q in cl))
# файл А
A = split(read('Ege27_v2_A.txt'), [(-6, 19), (2, 4)])
cA = [center(cl) for cl in A]
px = sum(c[0] for c in cA) / len(cA)
py = sum(c[1] for c in cA) / len(cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v2_B.txt'), [(19, 5), (-7, 19), (3, -14)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))
Вариант 3
А: минимумы · Б: максимумы
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где H = 6 и W = 4,5 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.
В файле Б хранятся координаты точек трёх кластеров, где H = 6, W = 4 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.
Для файла А определите координаты центра каждого кластера, затем найдите два числа: Px — минимальную из абсцисс центров кластеров и Py — минимальную из ординат центров кластеров. Для файла Б определите координаты центра каждого кластера, затем найдите два числа: Q1 — максимальную из абсцисс центров кластеров и Q2 — максимальную из ординат центров кластеров.
В ответе запишите четыре числа: в первой строке — сначала целую часть абсолютной величины произведения Px × 10 000, затем целую часть абсолютной величины произведения Py × 10 000; во второй строке — сначала целую часть абсолютной величины Q1 × 10 000, затем Q2 × 10 000.
Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (4; 3), (-15; 19); в файле Б: (6; -12), (-5; 4), (-20; 14). В файле Б три одиночные точки далеко от облаков — аномалии.
Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.
Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (4.119769; 3.02272), (-14.973682; 18.882438). Файл Б: (6.006369; -12.068254), (-4.983151; 3.915273), (-20.013704; 14.012447) (кластеры из 1761, 1814, 2224 точек).
Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.
from math import dist
def read(name):
return [tuple(map(float, line.split())) for line in open(name) if line.strip()]
def split(points, centers, r=5.5):
"""Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
clusters = [[] for _ in centers]
for p in points:
for i, c in enumerate(centers):
if dist(p, c) <= r:
clusters[i].append(p)
break # аномалии не попадают ни в один кластер
return clusters
def center(cl): # точка с наименьшей суммой расстояний до остальных
return min(cl, key=lambda p: sum(dist(p, q) for q in cl))
# файл А
A = split(read('Ege27_v3_A.txt'), [(4, 3), (-15, 19)])
cA = [center(cl) for cl in A]
px = min(c[0] for c in cA)
py = min(c[1] for c in cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v3_B.txt'), [(6, -12), (-5, 4), (-20, 14)])
cB = [center(cl) for cl in B]
q1 = max(c[0] for c in cB)
q2 = max(c[1] for c in cB)
print(int(abs(q1) * 10000), int(abs(q2) * 10000))
Вариант 4
А: минимумы · Б: Q1, Q2
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где H = 4 и W = 3 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.
В файле Б хранятся координаты точек трёх кластеров, где H = 5, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.
Для файла А определите координаты центра каждого кластера, затем найдите два числа: Px — минимальную из абсцисс центров кластеров и Py — минимальную из ординат центров кластеров. Для файла Б определите координаты центра каждого кластера, затем найдите два числа: Q1 — расстояние между центрами кластеров с минимальным и максимальным количеством точек и Q2 — максимальное расстояние от центра кластера до точки этого же кластера среди всех кластеров. Гарантируется, что во всех кластерах количество точек различно.
В ответе запишите четыре числа: в первой строке — сначала целую часть абсолютной величины произведения Px × 10 000, затем целую часть абсолютной величины произведения Py × 10 000; во второй строке — сначала целую часть абсолютной величины Q1 × 10 000, затем Q2 × 10 000.
Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (-2; -7), (-12; 11); в файле Б: (-7; -3), (20; -14), (16; 19). В файле Б три одиночные точки далеко от облаков — аномалии.
Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.
Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (-2.05727; -6.953932), (-11.944401; 10.959684). Файл Б: (-7.047355; -3.044533), (19.952414; -14.010139), (16.027984; 19.110465) (кластеры из 1622, 1424, 1286 точек).
Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.
from math import dist
def read(name):
return [tuple(map(float, line.split())) for line in open(name) if line.strip()]
def split(points, centers, r=5.5):
"""Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
clusters = [[] for _ in centers]
for p in points:
for i, c in enumerate(centers):
if dist(p, c) <= r:
clusters[i].append(p)
break # аномалии не попадают ни в один кластер
return clusters
def center(cl): # точка с наименьшей суммой расстояний до остальных
return min(cl, key=lambda p: sum(dist(p, q) for q in cl))
# файл А
A = split(read('Ege27_v4_A.txt'), [(-2, -7), (-12, 11)])
cA = [center(cl) for cl in A]
px = min(c[0] for c in cA)
py = min(c[1] for c in cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v4_B.txt'), [(-7, -3), (20, -14), (16, 19)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))
Вариант 5
А: средние · Б: максимумы
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где 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.
Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (-14; 8), (9; -4); в файле Б: (13; 6), (2; 13), (-14; 9). В файле Б три одиночные точки далеко от облаков — аномалии.
Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.
Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (-14.120538; 7.993808), (9.10443; -3.875835). Файл Б: (13.04104; 6.220061), (2.03562; 12.996111), (-13.968673; 8.967821) (кластеры из 1664, 1292, 2433 точек).
Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.
from math import dist
def read(name):
return [tuple(map(float, line.split())) for line in open(name) if line.strip()]
def split(points, centers, r=5.5):
"""Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
clusters = [[] for _ in centers]
for p in points:
for i, c in enumerate(centers):
if dist(p, c) <= r:
clusters[i].append(p)
break # аномалии не попадают ни в один кластер
return clusters
def center(cl): # точка с наименьшей суммой расстояний до остальных
return min(cl, key=lambda p: sum(dist(p, q) for q in cl))
# файл А
A = split(read('Ege27_v5_A.txt'), [(-14, 8), (9, -4)])
cA = [center(cl) for cl in A]
px = sum(c[0] for c in cA) / len(cA)
py = sum(c[1] for c in cA) / len(cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v5_B.txt'), [(13, 6), (2, 13), (-14, 9)])
cB = [center(cl) for cl in B]
q1 = max(c[0] for c in cB)
q2 = max(c[1] for c in cB)
print(int(abs(q1) * 10000), int(abs(q2) * 10000))
Вариант 6
А: минимумы · Б: Q1, Q2
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где H = 6 и W = 4,5 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.
В файле Б хранятся координаты точек трёх кластеров, где H = 5, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.
Для файла А определите координаты центра каждого кластера, затем найдите два числа: Px — минимальную из абсцисс центров кластеров и Py — минимальную из ординат центров кластеров. Для файла Б определите координаты центра каждого кластера, затем найдите два числа: Q1 — расстояние между центрами кластеров с минимальным и максимальным количеством точек и Q2 — максимальное расстояние от центра кластера до точки этого же кластера среди всех кластеров. Гарантируется, что во всех кластерах количество точек различно.
В ответе запишите четыре числа: в первой строке — сначала целую часть абсолютной величины произведения Px × 10 000, затем целую часть абсолютной величины произведения Py × 10 000; во второй строке — сначала целую часть абсолютной величины Q1 × 10 000, затем Q2 × 10 000.
Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (-2; -1), (13; -20); в файле Б: (18; 5), (-7; -17), (-17; -3). В файле Б три одиночные точки далеко от облаков — аномалии.
Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.
Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (-1.86106; -0.971589), (13.053349; -19.939509). Файл Б: (17.917567; 5.016471), (-6.98507; -16.961458), (-17.058833; -3.052549) (кластеры из 2517, 2429, 1723 точек).
Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.
from math import dist
def read(name):
return [tuple(map(float, line.split())) for line in open(name) if line.strip()]
def split(points, centers, r=5.5):
"""Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
clusters = [[] for _ in centers]
for p in points:
for i, c in enumerate(centers):
if dist(p, c) <= r:
clusters[i].append(p)
break # аномалии не попадают ни в один кластер
return clusters
def center(cl): # точка с наименьшей суммой расстояний до остальных
return min(cl, key=lambda p: sum(dist(p, q) for q in cl))
# файл А
A = split(read('Ege27_v6_A.txt'), [(-2, -1), (13, -20)])
cA = [center(cl) for cl in A]
px = min(c[0] for c in cA)
py = min(c[1] for c in cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v6_B.txt'), [(18, 5), (-7, -17), (-17, -3)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))
Вариант 7
А: средние · Б: Q1, Q2
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где 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.
Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (3; 12), (8; -11); в файле Б: (7; -8), (-6; -8), (-5; 19). В файле Б три одиночные точки далеко от облаков — аномалии.
Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.
Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (3.093344; 11.938573), (7.780346; -10.993515). Файл Б: (7.020828; -8.076731), (-6.123744; -8.127798), (-5.014989; 19.082448) (кластеры из 1585, 1755, 1797 точек).
Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.
from math import dist
def read(name):
return [tuple(map(float, line.split())) for line in open(name) if line.strip()]
def split(points, centers, r=5.5):
"""Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
clusters = [[] for _ in centers]
for p in points:
for i, c in enumerate(centers):
if dist(p, c) <= r:
clusters[i].append(p)
break # аномалии не попадают ни в один кластер
return clusters
def center(cl): # точка с наименьшей суммой расстояний до остальных
return min(cl, key=lambda p: sum(dist(p, q) for q in cl))
# файл А
A = split(read('Ege27_v7_A.txt'), [(3, 12), (8, -11)])
cA = [center(cl) for cl in A]
px = sum(c[0] for c in cA) / len(cA)
py = sum(c[1] for c in cA) / len(cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v7_B.txt'), [(7, -8), (-6, -8), (-5, 19)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))
Вариант 8
А: минимумы · Б: Q1, Q2
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где H = 5 и W = 4 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.
В файле Б хранятся координаты точек трёх кластеров, где H = 7, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.
Для файла А определите координаты центра каждого кластера, затем найдите два числа: Px — минимальную из абсцисс центров кластеров и Py — минимальную из ординат центров кластеров. Для файла Б определите координаты центра каждого кластера, затем найдите два числа: Q1 — расстояние между центрами кластеров с минимальным и максимальным количеством точек и Q2 — максимальное расстояние от центра кластера до точки этого же кластера среди всех кластеров. Гарантируется, что во всех кластерах количество точек различно.
В ответе запишите четыре числа: в первой строке — сначала целую часть абсолютной величины произведения Px × 10 000, затем целую часть абсолютной величины произведения Py × 10 000; во второй строке — сначала целую часть абсолютной величины Q1 × 10 000, затем Q2 × 10 000.
Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (3; 9), (8; -17); в файле Б: (0; 12), (-1; -10), (8; 0). В файле Б три одиночные точки далеко от облаков — аномалии.
Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.
Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (3.000182; 8.943695), (7.891356; -16.903019). Файл Б: (-0.085996; 12.004882), (-0.9393; -9.946848), (8.104071; 0.028452) (кластеры из 1436, 2387, 2570 точек).
Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.
from math import dist
def read(name):
return [tuple(map(float, line.split())) for line in open(name) if line.strip()]
def split(points, centers, r=5.5):
"""Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
clusters = [[] for _ in centers]
for p in points:
for i, c in enumerate(centers):
if dist(p, c) <= r:
clusters[i].append(p)
break # аномалии не попадают ни в один кластер
return clusters
def center(cl): # точка с наименьшей суммой расстояний до остальных
return min(cl, key=lambda p: sum(dist(p, q) for q in cl))
# файл А
A = split(read('Ege27_v8_A.txt'), [(3, 9), (8, -17)])
cA = [center(cl) for cl in A]
px = min(c[0] for c in cA)
py = min(c[1] for c in cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v8_B.txt'), [(0, 12), (-1, -10), (8, 0)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))
Вариант 9
А: средние · Б: максимумы
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где H = 4 и W = 3 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.
В файле Б хранятся координаты точек трёх кластеров, где H = 7, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.
Для файла А определите координаты центра каждого кластера, затем найдите два числа: Px — среднее арифметическое абсцисс центров кластеров и Py — среднее арифметическое ординат центров кластеров. Для файла Б определите координаты центра каждого кластера, затем найдите два числа: Q1 — максимальную из абсцисс центров кластеров и Q2 — максимальную из ординат центров кластеров.
В ответе запишите четыре числа: в первой строке — сначала целую часть абсолютной величины произведения Px × 10 000, затем целую часть абсолютной величины произведения Py × 10 000; во второй строке — сначала целую часть абсолютной величины Q1 × 10 000, затем Q2 × 10 000.
Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (11; 15), (5; -7); в файле Б: (-13; 12), (-4; -14), (6; -3). В файле Б три одиночные точки далеко от облаков — аномалии.
Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.
Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (10.825708; 14.842694), (4.957194; -7.109739). Файл Б: (-12.852089; 12.052654), (-4.009311; -13.931792), (6.070871; -3.067135) (кластеры из 2299, 1682, 2237 точек).
Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.
from math import dist
def read(name):
return [tuple(map(float, line.split())) for line in open(name) if line.strip()]
def split(points, centers, r=5.5):
"""Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
clusters = [[] for _ in centers]
for p in points:
for i, c in enumerate(centers):
if dist(p, c) <= r:
clusters[i].append(p)
break # аномалии не попадают ни в один кластер
return clusters
def center(cl): # точка с наименьшей суммой расстояний до остальных
return min(cl, key=lambda p: sum(dist(p, q) for q in cl))
# файл А
A = split(read('Ege27_v9_A.txt'), [(11, 15), (5, -7)])
cA = [center(cl) for cl in A]
px = sum(c[0] for c in cA) / len(cA)
py = sum(c[1] for c in cA) / len(cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v9_B.txt'), [(-13, 12), (-4, -14), (6, -3)])
cB = [center(cl) for cl in B]
q1 = max(c[0] for c in cB)
q2 = max(c[1] for c in cB)
print(int(abs(q1) * 10000), int(abs(q2) * 10000))
Вариант 10
А: минимумы · Б: Q1, Q2
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где H = 6 и W = 5 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.
В файле Б хранятся координаты точек трёх кластеров, где H = 7, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.
Для файла А определите координаты центра каждого кластера, затем найдите два числа: Px — минимальную из абсцисс центров кластеров и Py — минимальную из ординат центров кластеров. Для файла Б определите координаты центра каждого кластера, затем найдите два числа: Q1 — расстояние между центрами кластеров с минимальным и максимальным количеством точек и Q2 — максимальное расстояние от центра кластера до точки этого же кластера среди всех кластеров. Гарантируется, что во всех кластерах количество точек различно.
В ответе запишите четыре числа: в первой строке — сначала целую часть абсолютной величины произведения Px × 10 000, затем целую часть абсолютной величины произведения Py × 10 000; во второй строке — сначала целую часть абсолютной величины Q1 × 10 000, затем Q2 × 10 000.
Шаг 1. Смотрим на точки. На графике (Excel: точечная диаграмма; или matplotlib) хорошо видны отдельные «облака». Приблизительные центры облаков в файле А: (20; 18), (-4; 0); в файле Б: (8; -13), (20; 3), (-7; 1). В файле Б три одиночные точки далеко от облаков — аномалии.
Шаг 2. Разбиваем на кластеры. Точка относится к облаку, если она ближе 5,5 к его приблизительному центру: половина диагонали прямоугольника меньше 4,5 (с учётом округления центра — меньше 5,5), а облака отстоят друг от друга больше чем на 13. Аномалии ни к одному облаку не попадают.
Шаг 3. Центры. Для каждой точки кластера считаем сумму расстояний до остальных и берём точку с наименьшей суммой. Файл А: (19.80319; 17.99417), (-3.733269; 0.132441). Файл Б: (8.044138; -12.886093), (20.023149; 2.960538), (-7.00188; 0.880771) (кластеры из 1557, 1310, 2256 точек).
Решение на Python. Положите оба файла рядом с программой. Центр большого кластера ищется перебором всех пар точек — на файле Б программа работает до минуты.
from math import dist
def read(name):
return [tuple(map(float, line.split())) for line in open(name) if line.strip()]
def split(points, centers, r=5.5):
"""Точка относится к кластеру, если она ближе r к его приблизительному центру (центры видны на графике)."""
clusters = [[] for _ in centers]
for p in points:
for i, c in enumerate(centers):
if dist(p, c) <= r:
clusters[i].append(p)
break # аномалии не попадают ни в один кластер
return clusters
def center(cl): # точка с наименьшей суммой расстояний до остальных
return min(cl, key=lambda p: sum(dist(p, q) for q in cl))
# файл А
A = split(read('Ege27_v10_A.txt'), [(20, 18), (-4, 0)])
cA = [center(cl) for cl in A]
px = min(c[0] for c in cA)
py = min(c[1] for c in cA)
print(int(abs(px) * 10000), int(abs(py) * 10000))
# файл Б
B = split(read('Ege27_v10_B.txt'), [(8, -13), (20, 3), (-7, 1)])
cB = [center(cl) for cl in B]
small = min(range(len(B)), key=lambda i: len(B[i]))
large = max(range(len(B)), key=lambda i: len(B[i]))
q1 = dist(cB[small], cB[large])
q2 = max(dist(cB[i], p) for i in range(len(B)) for p in B[i])
print(int(q1 * 10000), int(q2 * 10000))
Для самостоятельного решения
Варианты 11–15 без разборов. Ответ можно проверить кнопкой.
Вариант 11
А: минимумы · Б: Q1, Q2
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где H = 6 и W = 5 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.
В файле Б хранятся координаты точек трёх кластеров, где H = 5, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.
Для файла А определите координаты центра каждого кластера, затем найдите два числа: Px — минимальную из абсцисс центров кластеров и Py — минимальную из ординат центров кластеров. Для файла Б определите координаты центра каждого кластера, затем найдите два числа: Q1 — расстояние между центрами кластеров с минимальным и максимальным количеством точек и Q2 — максимальное расстояние от центра кластера до точки этого же кластера среди всех кластеров. Гарантируется, что во всех кластерах количество точек различно.
В ответе запишите четыре числа: в первой строке — сначала целую часть абсолютной величины произведения Px × 10 000, затем целую часть абсолютной величины произведения Py × 10 000; во второй строке — сначала целую часть абсолютной величины Q1 × 10 000, затем Q2 × 10 000.
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где H = 5 и W = 4 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата 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.
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где H = 5 и W = 4 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.
В файле Б хранятся координаты точек трёх кластеров, где H = 7, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.
Для файла А определите координаты центра каждого кластера, затем найдите два числа: Px — минимальную из абсцисс центров кластеров и Py — минимальную из ординат центров кластеров. Для файла Б определите координаты центра каждого кластера, затем найдите два числа: Q1 — максимальную из абсцисс центров кластеров и Q2 — максимальную из ординат центров кластеров.
В ответе запишите четыре числа: в первой строке — сначала целую часть абсолютной величины произведения Px × 10 000, затем целую часть абсолютной величины произведения Py × 10 000; во второй строке — сначала целую часть абсолютной величины Q1 × 10 000, затем Q2 × 10 000.
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где H = 5 и W = 4 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.
В файле Б хранятся координаты точек трёх кластеров, где H = 7, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.
Для файла А определите координаты центра каждого кластера, затем найдите два числа: Px — среднее арифметическое абсцисс центров кластеров и Py — среднее арифметическое ординат центров кластеров. Для файла Б определите координаты центра каждого кластера, затем найдите два числа: Q1 — расстояние между центрами кластеров с минимальным и максимальным количеством точек и Q2 — максимальное расстояние от центра кластера до точки этого же кластера среди всех кластеров. Гарантируется, что во всех кластерах количество точек различно.
В ответе запишите четыре числа: в первой строке — сначала целую часть абсолютной величины произведения Px × 10 000, затем целую часть абсолютной величины произведения Py × 10 000; во второй строке — сначала целую часть абсолютной величины Q1 × 10 000, затем Q2 × 10 000.
Фрагмент звёздного неба спроецирован на плоскость с декартовой системой координат. Учёный решил провести кластеризацию полученных точек, являющихся изображениями звёзд, то есть разбить их множество на N непересекающихся непустых подмножеств (кластеров), таких, что точки каждого подмножества лежат внутри прямоугольника со сторонами длиной H и W, причём эти прямоугольники между собой не пересекаются. Стороны прямоугольников не обязательно параллельны координатным осям. Гарантируется, что такое разбиение существует и единственно для заданных размеров прямоугольников.
Будем называть центром кластера точку этого кластера, сумма расстояний от которой до всех остальных его точек минимальна. Для каждого кластера гарантируется единственность его центра. Расстояние между точками A(x1, y1) и B(x2, y2) вычисляется по формуле d(A, B) = √((x2 − x1)² + (y2 − y1)²).
В файле А хранятся координаты точек двух кластеров, где H = 6 и W = 5 для каждого кластера. В каждой строке записана информация о расположении на карте одной звезды: сначала координата x, затем координата y (через пробел, дробная часть отделена точкой). Количество точек не превышает 1000.
В файле Б хранятся координаты точек трёх кластеров, где H = 5, W = 5 для каждого кластера. Количество точек не превышает 10 000. Структура хранения информации в файле Б аналогична файлу А. Известно, что в файле Б имеются координаты ровно трёх «лишних» точек, представляющих аномалии, которые возникли в результате помех при передаче данных. Эти три точки не относятся ни к одному из кластеров, их учитывать не нужно.
Для файла А определите координаты центра каждого кластера, затем найдите два числа: Px — минимальную из абсцисс центров кластеров и Py — минимальную из ординат центров кластеров. Для файла Б определите координаты центра каждого кластера, затем найдите два числа: Q1 — расстояние между центрами кластеров с минимальным и максимальным количеством точек и Q2 — максимальное расстояние от центра кластера до точки этого же кластера среди всех кластеров. Гарантируется, что во всех кластерах количество точек различно.
В ответе запишите четыре числа: в первой строке — сначала целую часть абсолютной величины произведения Px × 10 000, затем целую часть абсолютной величины произведения Py × 10 000; во второй строке — сначала целую часть абсолютной величины Q1 × 10 000, затем Q2 × 10 000.