|
|
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Название, конечно - шутка, но задача в чем-то похожа. Имеется плоская область (обычно прямоугольная). На плоскости имеется некоторое количество точек, характерный диапазон 10-20, но может отличаться. Необходимо накрыть все точки кругами заданного диаметра так, чтобы количество кругов было наименьшим. Дополнительное условие - круги не должны выходить за пределы области, но перекрываться могут. Есть идеи, в какую сторону копать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 18:11 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, А нужно гарантированно оптимальное решение или хорошего приближения достаточно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 18:13 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
miksoft, Достаточно хорошего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 18:18 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисЕсть идеи, в какую сторону копать? Вероятно, в сторону кластеризации точек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 18:25 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
hclubmkВероятно, в сторону кластеризации точек. Кластеризовать точки я даже умею, только это не решает проблему. Что делать когда размер кластера становиться больше круга? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 18:38 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисhclubmkВероятно, в сторону кластеризации точек. Кластеризовать точки я даже умею, только это не решает проблему. Что делать когда размер кластера становиться больше круга? Исключаешь из поискового множества те точки которые уже накрыты и еще раз повторяешь кластеризацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 19:04 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
mayton, не понял идею. Кластеризация оперирует всем множеством сразу. Допустим, получили мы в результате, что все точки в одном кластере. И что с этим делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 19:24 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисНеобходимо накрыть все точки кругами заданного диаметра так, чтобы количество кругов было наименьшим. Дополнительное условие - круги не должны выходить за пределы области , но перекрываться могут. В общем случае задача не решается - точка в самом углу не достаётся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2016, 20:48 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Соколинский Борисmayton, не понял идею. Кластеризация оперирует всем множеством сразу. Допустим, получили мы в результате, что все точки в одном кластере. И что с этим делать? Кластеризация и круг заданного диаметра - это разные понятия которые мы пытаемся за уши притянуть одно к другому и решить задачу ковровых бомбометаний. У меня не хватит терпенья описывать все варианты. Проще наверное нарисовать 2-3 рисунка из которых станет ясно что я имел в виду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 00:01 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Навскидку я не помню как работает простой алгоритм двумерной кластеризации. Но предположу что у него есть настроечные параметры: - Количество искомых кластеров - Формула которая описывает скорость сходимости виртуальных центров кластеров к точкам в том случае когда количество искомых кластеров мы не знаем. Рискну также предположить что центр кластера вовсе не обязан совпадать с центром окружности описанной вокруг множества точек. Это как раз слабое место в нашем алгоритме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 00:15 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
maytonНавскидку я не помню как работает простой алгоритм двумерной кластеризации. Но предположу что у него есть настроечные параметры: Там нет параметров, только признак связности для пары. Определять его можно по-разному, но в данном случае кроме евклидова расстояния трудно что-то придумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 00:28 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Ну ОК. Я взял картинку с Вики. Можете нарисовать ваше видение бобмардировки ? (диаметр - на ваш выбор) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 00:42 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис Есть идеи, в какую сторону копать? Карты Кохонена погляди и попробуй. может подойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 08:28 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
AkinaСоколинский БорисНеобходимо накрыть все точки кругами заданного диаметра так, чтобы количество кругов было наименьшим. Дополнительное условие - круги не должны выходить за пределы области , но перекрываться могут. В общем случае задача не решается - точка в самом углу не достаётся. так можно еще один круг для нее взять, количество не ограничено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 08:31 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, формулировка требует уточнения. Точки достаточно близкие к углам никак не накроешь кругами "заданного диаметра", если есть условие "круги не должны выходить за пределы области". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 17:14 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
ОК, забиваем на угловые точки. Можно даже убрать условие выхода за границы, потом чего-нибудь придумаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 19:41 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, делим прямоугольник на квадраты -> рассматриваем вписанные и описанные окружности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 20:37 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Из скоростных оптимизаций. Можно взять Quad-Tree и положить в него все точки. Добавить в каждый узел (QNode) поле которое ведет учет количества точек в узле и подузлах. Далее поиском в ширину найти квадраты (или квадранты) которые покрываются кругом. Делать итерации до тех пор пока все точки не покроем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2016, 20:57 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
А какое характерное соотношение диаметра круга к ширине квадрата? Для некоторых соотношений и распределений точек наверное можно совсем тупо сделать - накидать случайных кругов, выбрать покрывающий максимум точек, подвигать чтобы накрыть побольше. (повторять на оставшемся множестве непокрытых точек). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 09:22 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Vladimir Baskakov, +1 тут наверное нет спора по поводу правильности алгоритма КМК Борису уже было предложено несколько алгоритмов. Теперь выбор за самым красивым o(n) либо за простой реализацией. В простейшем случае можно было-бы накидать центров кругов по центрам точек а потом исключить круги, которые не оказывают влияния на покрытие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 10:20 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Если ограничений нет, я бы действовал примерно так: - отбираем все пары точек, которые отстоят друг от друга на расстояние меньшее диаметра окружности; - точки, не вошедшие в список, отделяем, формируя окружности с центром в каждой такой точке; - список точек сортируем по увеличению числа соседей, а внутри равного числа - по увеличению среднего расстояния между ними; - берем первую точку из списка и ближайшую к ней; - ищем наиболее отдаленную от них третью точку, которая бы попадала бы в окружность; - если такая находится, ищем наиболее удаленную четвертую, и т.д.; - по завершении процесса (когда больше ничего покрыть не удается) отделяем покрытые окружностью точки; - для оставшихся точек повторяем процесс заново ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 13:49 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
вместо шага: - ищем наиболее отдаленную от них третью точку, которая бы попадала бы в окружность; можно попробовать - ищем наименее отдаленную от них третью точку, которая бы попадала бы в окружность; Интересно было бы сравнить статистику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 13:54 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
yuglЕсли ограничений нет, я бы действовал примерно так: - отбираем все пары точек, которые отстоят друг от друга на расстояние меньшее диаметра окружности; Здесь я-бы был против. Отбор пар - это типичная комбинаторная задача. Попробуй посчитать количество операций для 1000, 10 000, 100 000 точек. При условии что ты не построил никаких структур индексирующих пространство (QuadTree, R-Tree). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 14:03 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
maytonyuglЕсли ограничений нет, я бы действовал примерно так: - отбираем все пары точек, которые отстоят друг от друга на расстояние меньшее диаметра окружности; Здесь я-бы был против. Отбор пар - это типичная комбинаторная задача. Попробуй посчитать количество операций для 1000, 10 000, 100 000 точек. При условии что ты не построил никаких структур индексирующих пространство (QuadTree, R-Tree). Я исходил из условий, заданных ТС, там проблем быть не должно. Для большого числа точек, очевидно, нужно начинать со сбора статистики, чтобы вырожденные случаи не мешали. А для случая, когда точки более-менее рассеяны, пар "соседей" (близких друг к другу точек) будет не так уж много. Кстати, для отбора таких пар необязательно применять комбинаторику. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2016, 15:18 |
|
||
|
Точечно-ковровые бомбардировки
|
|||
|---|---|---|---|
|
#18+
Я исходил из случая, когда точек существенно меньше, чем окружностей, покрывающих область. Для большого числа точек (точек существенно больше, чем окружностей) можно действовать примерно так же, как в предыдущем алгоритме, но в обратнои направлении: Предобработка: - строим покрытие области окружностями по принципу "сот" (по аналогии с покрытием правильными шестиугольниками); - собираем статистику, сколько точек (и какие) попало в каждую окружность; - пустые окружности выбрасываем; Алгоритм: - сортируем окружности по возрастанию числа точек в них; - берем окружность с наименьшим числом точек и пытаемся "натянуть" ее на еще одну точку из соседних окружностей, не потеряв своих; - если получается, повторяем, пока это возможно; - по завершении процесса (когда больше ничего покрыть не удается) отделяем покрытые окружностью точки (и выбрасываем их из статистики оставшихся окружностей); - для оставшихся точек и окружностей повторяем те же действия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2016, 08:19 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39165650&tid=1340789]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 507ms |

| 0 / 0 |
