Статья Автор: Лебедев Дмитрий

Решение заданий модели m597

 
Доктор Браун допустил ошибку при выставлении даты на машине времени и Марти МайФлай оказался 2520 году.
Марти, для возвращения назад, должен по карте определить столицы двух больших районов Калифорнии.

  • Район (кластер) – это группа домов, координаты которых находятся внутри прямоугольника высотой H и шириной W.
    Каждый дом обязательно принадлежит только одному району.
  • Столица района (или центроид) – это такой дом, сумма манхэттенских расстояний от которого до всех других домов района (кластера) минимальна.
  • Манхэттенское расстояние между двумя точками A(x1,y1) и B(x2,y2) вычисляется по формуле: d(A,B)=∣x2−x1∣+∣y2−y1∣
В файле A хранятся данные о двух районах Хипл-Вэллии, а в файле Б данные о трех районах Лос-Анджелеса.
Структура файлов с данными одинаковая:
  • В каждой строке записана информация о расположении одной точки: сначала координата x, затем координата y (в условных единицах).
  • Известно, что количество точек не превышает 1000 для файла А и 10000 для файла Б
Для каждого файла определите
  • координаты столицы (центра) каждого района (кластера),
  • затем вычислите два числа: 
    • Px​ – среднее арифметическое абсцисс центров кластеров,
    • Py​ – среднее арифметическое ординат центров кластеров.
  • В ответе запишите четыре числа:
    • в первой строке сначала целую часть произведения Px×10000,
      затем целую часть произведения Py×10000 для файла А,
    • во второй строке – аналогичные данные для файла Б.



 


Действие 1 - Считываем точки и рисуем "точечную диаграмму" с помощью MATPLOTLIB
Для удобства, нужный файл  выбирается по номеру (по умолчанию выбирается файл А из демоварианта)
Введите номер файла и посмотрите на результат
 


Рисуем разноцветные кластеры


Построим решение задания. Будем придерживаться следующей схемы

  • Определяем "опроные точки" кластеров (с помощью MATPLOTLOB  или EXCEL  или TURTLES или ...
    записаны в dots_all визуальным поиском
  • Разбиваем точки на кластеры методом "поиска ближайшей опроной точки".
    Для храниния точек в кластере используем словарь, 
  • Выводим размеры кластеров. 
  • Для каждого кластера находим "среднюю точку" и сортируем по расстоянию до "средней точки"
  • Для каждого кластера находим "истинный центроид" методом перебора с отсевом по "порогу" 
  • Для полученных значений "истинных центроидов" находим отве

Обработку кластера выделим в отдельную процедуру



Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать