|
|
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
White OwlСоколинский БорисЭто задача реального времени, на весь алгоритм дается 1-2 секунды, не больше. Поэтому варианты с O(N!) отбрасываются сразу.Ну тогда используй приближенное решение. Одно из самых оптимальных ты уже сам почти угадал в начале этого топика. 1) От старта найти ближайшую точку, сдвинуться, 2) Найти ближайшую не посещенную, сдвинуться 3) Если точки кончились выйти, иначе повторить шаг 2 Получишь O(n^2). Результат может быть конечно не самым оптимальным, но чтобы это доказать понадобиться перебрать все возможные пути - O(n!). Так что можешь смело посылать всех сомневающихся в оптимальности результата :) NP проблема это не шутки. Если на кажом шаге выбирать в качествеперовй точки , ту у которой расстоняние до цели кратчайшее , то можно очень хорошо с оптимизировать . Но для этого прежде чем идти нужно просматривать на 1 ход вперед, сортировать и идти по верхнему в сортировке. ТС , не туда вопрос задал , ему нужно было ити на сайт гейм-девов , там бы в первом ответе такой вариант предложили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 00:45 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
ДохтаРСоколинский Бориспропущено... Вообще все перебирать слишком долго. Можно, наверное, группировать точки на блоки близкорасположеных, потом оптимизировать обход блоков а затем расставлять внутри блока. Создать матрицу, заполнить нулями, отметить точки Соколинский Борис и стартовая точка значнием 1. Самый короткий маршрут ( по диагонали ) отметить значениями -1 . Найти самые близлежащие точки со значением 1 от почти линии отмеченной точками -1. ---------- мой блог А это решение оптимизируется в поиск перечечения значений в 2-х массивах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 00:52 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
ДохтаРА это решение оптимизируется в поиск перечечения значений в 2-х массивах. Непонятно, как это решение можно приспособить к условиям задачи, а именно - вещественным координатам и произвольным расположением стартовой точки. Если я правильно понял идею, от стартовой точки нужно строить лучи во всех направлениях и искать такой, где сумма расстояний от всех точек массива до линии будет минимальной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 11:21 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, если задача жизненая (т.е. все точки и пути заданы), то всегда есть дополнительная информация и задачу можно решить качественно если нет, то надо придумать алгоритм, который не вляпяеся лицом в грязь при граничных услвиях (обычно в ближайшей окрестности точки есть хотя бы одна нетиповая точка, которая убивает жадный алгоритм) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 13:24 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
OK, я обрисую задачу как она ставится: Имеется некоторая условно плоская "карта" (к ГИС никакого отношения не имеет). На карте сканируется некоторая область (обычно прямоугольная, но не всегда) на низком разрешении в поисках интересующих объектов. При нахождении объекта запоминаются его координаты. При обнаружении заданного числа объектов (порядка 100-1000) скан останавливается, точка остановки может быть в любом месте. Далее нужно сфотографировать найденные объекты уже на большом разрешении - т.е. переключить режим съемки и от точки остановки обойти все сохраненные. Задача должна выполняться в реальном времени, на весь алгоритм отводится не более 2 секунд. Собственно, интересуют алгоритмы с вычислительной сложностью не более O(N 3 ). Допустим можно взять метод ближайшего соседа как базовый и за O(N) итераций его улучшать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 14:25 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис , тебе уже подсказали - задача NP-полная, и в худшем случае сваливается в полный перебор. Так что можешь посмотреть задачи на нахождение гамильтонова цикла (в первую очередь), или задачку о ходе коня (только твой "конь" будет ходить не по шахматным правилам, а по твоим). Правда, конь ищет любой обход, а не "самый дешёвый". Любая оптимизация сводится к рассмотрению "самых хороших" вариантов "в первую очередь", и в "нерассмотрении" заведомо худших вариантов (если новый частичный путь "дороже-длиннее" уже просмотренного ранее, то его и всех "его потомков" можно сразу отбросить из рассмотрения при обходе дерева решения). Посмотри любую книжку по САОДу, в общем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 14:31 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, тогда тебе нужно смотреть задачу о почтальене (она же задача коммивояжера). Причём, эта постановка применима только после "как найдено нужное число интересных объектов". Т.к. поисх (без доп. критериев) в любом случае придёся вести "сквозь", т.е. за линейное время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 14:34 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Я прошу прощения, совсем не в теме, и подобными задачами никогда не занимался. Посоветуйте, пожалуйста, что-то более конкретное, где относительно простым языком задача описана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 14:36 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
BagaBagaтогда тебе нужно смотреть задачу о почтальене (она же задача коммивояжера). Это я уже понял, спасибо White Owl и Вам за наводку. Пока не могу хорошего решения найти (см. переписку выше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 14:39 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, то что ты описал ничего общего не имеет с твоей постановкой это скорее поиск кластеров (раковой опухоли, группировку войск, населенных пунктов и т.д.) долже быт быстрый скан для выявление очертаний кластеров выбор подозрительных кластеров анализ подозрительных для уточнения размеров по заданному критерию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 14:40 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
ViPRosСоколинский Борис, то что ты описал ничего общего не имеет с твоей постановкой это скорее поиск кластеров (раковой опухоли, группировку войск, населенных пунктов и т.д.) долже быт быстрый скан для выявление очертаний кластеров выбор подозрительных кластеров анализ подозрительных для уточнения размеров по заданному критерию Это все уже реализовано. Нужен именно повторный проход. Менять разрешение на лету очень накладно, сканировать сразу на большом - очень долго. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 14:44 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, прооходо много там и каждый проход решает свои задачи указанный тобой проекция модели в заданном проходе может быть некачественной задачу надо в комплексе (тарелочку с с голубой коемкой не забудь прилоить :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 14:48 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
первый вариант индексируем все множество точек (к мерное дерево kD-tree ) второй вариант триангуляцией получаем ближайшие точки и из них уже выбираем простым перебором ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2013, 17:06 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисViPRosСоколинский Борис, то что ты описал ничего общего не имеет с твоей постановкой это скорее поиск кластеров (раковой опухоли, группировку войск, населенных пунктов и т.д.) долже быт быстрый скан для выявление очертаний кластеров выбор подозрительных кластеров анализ подозрительных для уточнения размеров по заданному критерию Это все уже реализовано. Нужен именно повторный проход. Менять разрешение на лету очень накладно, сканировать сразу на большом - очень долго. Похоже на вашу задачу ? Попробуйте эти выкладки применить к созданию алгоритма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2013, 16:38 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Совсем не похоже. Насчет многомерной оптимизации я как-раз в теме... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2013, 18:01 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, без "стоимости сканирования" ничего более конкретного предложить нельзя. Можно только исходить из "общих соображений" и использовать какой-нибудь жадный алгоритм или эавристику (даст не гарантированно лучшее решение, но за "известное" время). Очевидно (использую это слово, т.к. разумно обосновать не могу), что самый неоптимальный алгоритм - шарахаться из конца в конец. Начинаем думать: если стоимость по одной "координате" серьёзно доминирует, то рассматривать при оптимизации нужно её (по аналогии с перемещением сканирующей головки, но я ведь не знаю "тип головки" и накладные расходы - поэтому беру "с потолка"). Тогда: набрав нужную "кучку для анализа" сортировал бы их по этой компоненте. Если объекты "по вертикали" не пересекаются, самым дешёвым будет их последовательное сканирование (предполагая, что "натуральным" для сканеря является последовательный непрерывный обход) с воответствии с отсортированным списком (алгоритм сортировки выбирайте сами - со сложностью от O(N) для цифровой сортировки до O(N^2) в старом-добром пузырьке. И не забывайте, что стоимость быстрой сортировке O(N^2) _в_худшем случае_ - просто любят её почему-то где не поподя). Итак, пусть - в общем случае - пересекаются. Тогда есть несколько решений: разделить на "непересекающиеся" линии и отсканировать отдельно: не мучаться с разбиением на "очереди" и сканировать в уже определённом порядке; объединить их в "один кусок с общими наибольшими границами" и потом вырезать из сканированного. Но сделать выбор ни один алгоритм не сможет, не зная "стоимости" позиционирования и "отката сканирующей головки назад" (может оказаться, что "вперёд" позиционирование происходит быстрее, чем "назад", и тогда выгоднее делать поменьше "ходов назад"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2013, 22:20 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисДжентльмены (и дамы, конечно), есть небольшая задачка: Имеется массив точек на плоскости и стартовая точка Задача с точками на плоскости имеет более явно выраженную пространственную когерентность нежели абстрактный граф. Могу предположить что для любого N порядка 100000 и более человек визуально решает эту задачу весьма эффективно. Отсюда как-бы вытекает идея оптимизации исходя из близости точек на плоскости. Для простоты плоскость можно побить на прямоугольники и решить коммивояжёр для каждого прямоугольника (это позволить понизить экспоненциальную сложность алгоритма) а потом все прямоугольники просто обойти в декартовом порядке "змейкой" или "кривой гилберта". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 02:03 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Ключевые слова Euclidean traveling salesman problem Готовый алгоритм по приближенному вычислению тут . Если я правильно понимаю, просмотрев статью по диагонали, то сложность алгоритма n^(2.2). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 10:19 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
maytonСоколинский БорисДжентльмены (и дамы, конечно), есть небольшая задачка: Имеется массив точек на плоскости и стартовая точка Задача с точками на плоскости имеет более явно выраженную пространственную когерентность нежели абстрактный граф. Могу предположить что для любого N порядка 100000 и более человек визуально решает эту задачу весьма эффективно. Отсюда как-бы вытекает идея оптимизации исходя из близости точек на плоскости. Для простоты плоскость можно побить на прямоугольники и решить коммивояжёр для каждого прямоугольника (это позволить понизить экспоненциальную сложность алгоритма) а потом все прямоугольники просто обойти в декартовом порядке "змейкой" или "кривой гилберта". За десятки, а может и сотни тысяч лет эволюции Человеческий мозг на уровне бессознательного микрокода( подсознательно) умеет это считать : http://ru.wikipedia.org/wiki/Конечные_разности Змейки и кривые гилберта - частные случаи . Соколинский БорисЕсли я правильно понял идею, от стартовой точки нужно строить лучи во всех направлениях и искать такой, где сумма расстояний от всех точек массива до линии будет минимальной? В общем абстрактном случае это выход на http://ru.wikipedia.org/wiki/Метод_конечных_разностей Насколько я понимаю, следующая задача которая будет стоять перед ТС Соколинский БорисДалее нужно сфотографировать найденные объекты уже на большом разрешении - т.е. переключить режим съемки и от точки остановки обойти все сохраненные. Задача должна выполняться в реальном времени, на весь алгоритм отводится не более 2 секунд. Вовремя обнаружить, что углубление в большее разрешение должно иметь свой предел по http://ru.wikipedia.org/wiki/Теория_приближений и http://ru.wikipedia.org/wiki/Модуль_непрерывности То есть нужно как то параметризовать время( производительность) <-> качество . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 12:29 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Inkelyad, спасибо, уже читаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 12:38 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
ДохтаР, док спасибо за ссылки. Добавлю в мемориз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 12:53 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисInkelyad, спасибо, уже читаю. да не читай ничего нифига там не написано, бла бла все это ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 13:00 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Я еще не вкурил эти методы разностей и прочее но думаю что если априори нам известны координаты кластеров и их границы то и обход точек мы также можем эффективно соптимизировать. Ну.. конечно если расчёт центров кластеров не будет сложнее чем основной метод . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 13:05 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
maytonЯ еще не вкурил эти методы разностей и прочее но думаю что если априори нам известны координаты кластеров и их границы то и обход точек мы также можем эффективно соптимизировать. Ну.. конечно если расчёт центров кластеров не будет сложнее чем основной метод . Отсюда можно начать достаточно (не) точные приближенные вычисления в некой системе координат что бы в пустую не ганять процессор и память , а перейти к оперированию элементарными геометрическими функциями и коэфициентами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 13:19 |
|
||
|
Алгоритм обхода точек на плоскости за минимальное время
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисInkelyad, спасибо, уже читаю. Да, вот вообще книжка по теме: Euclidean Shortest Paths: Exact or Approximate Algorithms Электронная версия довольно быстро гулится. Но в ней ~350 страниц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 13:29 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38338855&tid=1341703]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 439ms |

| 0 / 0 |
