@AlexFox2019
Junior Java Developer

Как разделить список чисел на группы по заданному расстоянию между числами в группе?

Всем привет. Нужен совет как правильно (не правильно/не красиво и т.д. придумать могу) сделать следующее:
На вход подается список/массив/множество (без разницы) чисел (какие-либо данные)
25,0 27,04 27,04 26,4 27,08 27,04 27 27 26,95 26,91
И число Х - погрешность , как правильно назвать ее не знаю, сорри)))
На выходе нужно получить группы:
(27,04 27,04 27,08 27,04 27 27 26,95 26,91) (26,4) (25,0).
Есть идея: число Х задает погрешность куда попадает текущее число, т.е.
Берем число 25,0 (К) - группа будет К+Х и К-Х - если число Х = 5, то в группу попадают числа от 24,95 до 25,05.
Да вопрос связан с математикой (не силен в ней:)), похоже на какое-то разбиение, .
Прошу совета как это правильно сделать (правильный алгоритм)!! Параллельно думаю как это сделать.
Любую критику принимаю)!!
Задачка , так из так сказать pet-проекта на досуге))!
Заранее всем спасибо за потраченное время на мой вопрос!!
  • Вопрос задан
  • 754 просмотра
Решения вопроса 1
@dmshar
Никакой "математики" тут нет. Впрочем, как и кластерного анализа. Все тривиально просто. Если все именно так, как вы описали, то вы собственно уже сами и описали ваш алгоритм. Правда опустив первый его шаг - предварительную сортировку.
Итак:
1. Сортируем имеющиеся данные.
2. Начинаем просмотр (не важно с какого -верхнего или нижнего) крайнего члена последовательности и сравниваем следующий элемент последовательности с границей вашего интервала (кстати - в вопросе, наверное, ошибка, и Х у вас не 5, а 0.05). Соответственно, включаем его в первую группу, или "закрываем" первую группу и переходим к формированию второй. Повторяем это действие циклически перебирая последовательно все элементы нашего отсортированного набора.

Если попытаться обойтись без предварительной сортировки - что в принципе тоже не очень сложно - то надо аккуратно посмотреть, не увеличится-ли при этом вычислительная сложность (на вскидку я в этом не уверен).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Andy_U
Почитайте про кластерный анализ. Ну или возьмите готовый модуль: sklearn.cluster
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы