powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Точечно-ковровые бомбардировки
25 сообщений из 48, страница 1 из 2
Точечно-ковровые бомбардировки
    #39164355
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Название, конечно - шутка, но задача в чем-то похожа.
Имеется плоская область (обычно прямоугольная).
На плоскости имеется некоторое количество точек, характерный диапазон 10-20, но может отличаться.
Необходимо накрыть все точки кругами заданного диаметра так, чтобы количество кругов было наименьшим.
Дополнительное условие - круги не должны выходить за пределы области, но перекрываться могут.

Есть идеи, в какую сторону копать?
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164358
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

А нужно гарантированно оптимальное решение или хорошего приближения достаточно?
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164364
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,
Достаточно хорошего.
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164373
hclubmk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисЕсть идеи, в какую сторону копать? Вероятно, в сторону кластеризации точек.
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164392
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hclubmkВероятно, в сторону кластеризации точек. Кластеризовать точки я даже умею, только это не решает проблему. Что делать когда размер кластера становиться больше круга?
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164422
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисhclubmkВероятно, в сторону кластеризации точек. Кластеризовать точки я даже умею, только это не решает проблему. Что делать когда размер кластера становиться больше круга?
Исключаешь из поискового множества те точки которые уже накрыты
и еще раз повторяешь кластеризацию.
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164437
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, не понял идею.
Кластеризация оперирует всем множеством сразу. Допустим, получили мы в результате, что все точки в одном кластере. И что с этим делать?
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164508
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисНеобходимо накрыть все точки кругами заданного диаметра так, чтобы количество кругов было наименьшим.
Дополнительное условие - круги не должны выходить за пределы области , но перекрываться могут.
В общем случае задача не решается - точка в самом углу не достаётся.
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164595
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борисmayton, не понял идею.
Кластеризация оперирует всем множеством сразу. Допустим, получили мы в результате, что все точки в одном кластере. И что с этим делать?
Кластеризация и круг заданного диаметра - это разные понятия которые
мы пытаемся за уши притянуть одно к другому и решить задачу ковровых бомбометаний.

У меня не хватит терпенья описывать все варианты. Проще наверное нарисовать
2-3 рисунка из которых станет ясно что я имел в виду.
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164603
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку я не помню как работает простой алгоритм двумерной кластеризации.
Но предположу что у него есть настроечные параметры:
- Количество искомых кластеров
- Формула которая описывает скорость сходимости
виртуальных центров кластеров к точкам в том
случае когда количество искомых кластеров
мы не знаем.

Рискну также предположить что центр кластера вовсе не обязан
совпадать с центром окружности описанной вокруг множества
точек. Это как раз слабое место в нашем алгоритме.
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164609
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНавскидку я не помню как работает простой алгоритм двумерной кластеризации.
Но предположу что у него есть настроечные параметры:

Там нет параметров, только признак связности для пары. Определять его можно по-разному, но в данном случае кроме евклидова расстояния трудно что-то придумать.
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164620
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ОК.

Я взял картинку с Вики. Можете нарисовать ваше видение бобмардировки ?

(диаметр - на ваш выбор)
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164677
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Есть идеи, в какую сторону копать?

Карты Кохонена погляди и попробуй. может подойдет.
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164678
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaСоколинский БорисНеобходимо накрыть все точки кругами заданного диаметра так, чтобы количество кругов было наименьшим.
Дополнительное условие - круги не должны выходить за пределы области , но перекрываться могут.
В общем случае задача не решается - точка в самом углу не достаётся.

так можно еще один круг для нее взять, количество не ограничено.
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164798
yugl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис, формулировка требует уточнения.
Точки достаточно близкие к углам никак не накроешь кругами "заданного диаметра", если есть условие "круги не должны выходить за пределы области".
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164833
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК, забиваем на угловые точки. Можно даже убрать условие выхода за границы, потом чего-нибудь придумаю.
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164852
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис,

делим прямоугольник на квадраты -> рассматриваем вписанные и описанные окружности
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39164862
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из скоростных оптимизаций. Можно взять Quad-Tree
и положить в него все точки.

Добавить в каждый узел (QNode) поле которое ведет
учет количества точек в узле и подузлах.

Далее поиском в ширину найти квадраты (или квадранты)
которые покрываются кругом.

Делать итерации до тех пор пока все точки не покроем.
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39165251
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какое характерное соотношение диаметра круга к ширине квадрата? Для некоторых соотношений и распределений точек наверное можно совсем тупо сделать - накидать случайных кругов, выбрать покрывающий максимум точек, подвигать чтобы накрыть побольше. (повторять на оставшемся множестве непокрытых точек).
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39165290
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir Baskakov, +1

тут наверное нет спора по поводу правильности алгоритма КМК
Борису уже было предложено несколько алгоритмов.

Теперь выбор за самым красивым o(n) либо за простой реализацией.

В простейшем случае можно было-бы накидать центров кругов
по центрам точек а потом исключить круги, которые не оказывают
влияния на покрытие.
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39165517
yugl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ограничений нет, я бы действовал примерно так:
- отбираем все пары точек, которые отстоят друг от друга на расстояние меньшее диаметра окружности;
- точки, не вошедшие в список, отделяем, формируя окружности с центром в каждой такой точке;
- список точек сортируем по увеличению числа соседей, а внутри равного числа - по увеличению среднего расстояния между ними;
- берем первую точку из списка и ближайшую к ней;
- ищем наиболее отдаленную от них третью точку, которая бы попадала бы в окружность;
- если такая находится, ищем наиболее удаленную четвертую, и т.д.;
- по завершении процесса (когда больше ничего покрыть не удается) отделяем покрытые окружностью точки;
- для оставшихся точек повторяем процесс заново
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39165531
yugl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вместо шага:
- ищем наиболее отдаленную от них третью точку, которая бы попадала бы в окружность;
можно попробовать
- ищем наименее отдаленную от них третью точку, которая бы попадала бы в окружность;

Интересно было бы сравнить статистику.
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39165540
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yuglЕсли ограничений нет, я бы действовал примерно так:
- отбираем все пары точек, которые отстоят друг от друга на расстояние меньшее диаметра окружности;
Здесь я-бы был против. Отбор пар - это типичная комбинаторная задача.
Попробуй посчитать количество операций для 1000, 10 000, 100 000 точек.

При условии что ты не построил никаких структур индексирующих пространство
(QuadTree, R-Tree).
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39165650
yugl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonyuglЕсли ограничений нет, я бы действовал примерно так:
- отбираем все пары точек, которые отстоят друг от друга на расстояние меньшее диаметра окружности;
Здесь я-бы был против. Отбор пар - это типичная комбинаторная задача.
Попробуй посчитать количество операций для 1000, 10 000, 100 000 точек.

При условии что ты не построил никаких структур индексирующих пространство
(QuadTree, R-Tree).
Я исходил из условий, заданных ТС, там проблем быть не должно.
Для большого числа точек, очевидно, нужно начинать со сбора статистики, чтобы вырожденные случаи не мешали.
А для случая, когда точки более-менее рассеяны, пар "соседей" (близких друг к другу точек) будет не так уж много. Кстати, для отбора таких пар необязательно применять комбинаторику. :)
...
Рейтинг: 0 / 0
Точечно-ковровые бомбардировки
    #39166191
yugl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я исходил из случая, когда точек существенно меньше, чем окружностей, покрывающих область.
Для большого числа точек (точек существенно больше, чем окружностей) можно действовать примерно так же, как в предыдущем алгоритме, но в обратнои направлении:

Предобработка:
- строим покрытие области окружностями по принципу "сот" (по аналогии с покрытием правильными шестиугольниками);
- собираем статистику, сколько точек (и какие) попало в каждую окружность;
- пустые окружности выбрасываем;

Алгоритм:
- сортируем окружности по возрастанию числа точек в них;
- берем окружность с наименьшим числом точек и пытаемся "натянуть" ее на еще одну точку из соседних окружностей, не потеряв своих;
- если получается, повторяем, пока это возможно;
- по завершении процесса (когда больше ничего покрыть не удается) отделяем покрытые окружностью точки (и выбрасываем их из статистики оставшихся окружностей);
- для оставшихся точек и окружностей повторяем те же действия.
...
Рейтинг: 0 / 0
25 сообщений из 48, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Точечно-ковровые бомбардировки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]