Я ищу эффективный способ выбора относительно большой части точек (двумерный евклидовый график), которые находятся дальше всего от центра. Это напоминает выпуклую оболочку, но будет включать (намного) больше точек. Дополнительные критерии:
Количество точек в выборке/наборе ("K") должно быть в пределах указанного диапазона. Скорее всего, он не будет очень узким, но лучше всего подходит для разных диапазонов (например, 0,01*N ‹ K ‹ 0,05*N, а также 0,1*N ‹ K ‹ 0,2*N).
Алгоритм должен уметь сбалансировать расстояние от центра и «локальную плотность». Если вблизи верхней части диапазона графика имеются плотные области, а вблизи нижней части — разреженные, то алгоритм должен обеспечить выбор некоторых точек из нижней части, даже если они находятся ближе к центру, чем точки в верхней части. область, край. (см. пример ниже)
Бонус: вместо простого расстояния от центра было бы идеально учитывать расстояние до конкретной точки (или до точки и до центра).
До сих пор мои попытки были сосредоточены на использовании «сортировки по голубям» (разделение графика на блоки CxR, назначение точек блокам на основе координат) и выборе «внешних» блоков до тех пор, пока у нас не будет достаточно точек в наборе. Однако мне не удалось ни сбалансировать выбор (плотные области чрезмерно выбраны из-за фиксированного размера поля), ни использовать выбранную точку в качестве ссылки вместо (только) центра.
Я (плохо) нарисовал Пример: красные точки — это точки, зеленая фигура — пример того, что я хочу (снаружи зеленый = выбрано). Для разреженных областей ограничивающая форма приближается к центру, чтобы найти подходящие точки (но не обязательно находит их, если они находятся слишком близко к центру). Желтая рамка — это пример того, что делают мои алгоритмы на основе Pigeon Holing. Даже при попытке приспособиться к более разреженным регионам это не срабатывает.
Приветствуются любые идеи!