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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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