Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Диаграмма Вороного, поиск ближайшей точки / 25 сообщений из 216, страница 1 из 9
26.05.2015, 10:51
    #38968413
Antipich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Добрый день.
Есть у меня такая задача:
Есть множество N точек на плоскости. Оно фиксированное.
Есть произвольная точка p.
Задача - найти из множества N точку, ближайшую к p.
Везде в интернете ссылаются на kd деревья или диаграмму Вороного.
Но я хоть убей не могу понять, как они применимы именно к этой задаче.

Вот взять диаграмму Вороного.
https://ru.wikipedia.org/wiki/Диаграмма_Вороного
http://neerc.ifmo.ru/wiki/index.php?title=Диаграмма_Вороного

Ну разбили мы на ячейки. А дальше что? Как понять, в какую ячейку попадает наша точка? Как пользоваться этими алгоритмами в данном случае?

Заранее благодарю за помощь.
...
Рейтинг: 0 / 0
26.05.2015, 11:40
    #38968475
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Если плоскость - дискретная то можно закрашивать каждый дискретный элемент цветом.
...
Рейтинг: 0 / 0
26.05.2015, 13:31
    #38968645
Antipich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Нет, не дискретная
...
Рейтинг: 0 / 0
26.05.2015, 13:38
    #38968652
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
AntipichНо я хоть убей не могу понять, как они применимы именно к этой задаче.

А с чего ты решил что твою задачу можно решить только Вороным? Ты это сам придумал?
...
Рейтинг: 0 / 0
26.05.2015, 13:41
    #38968657
Antipich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Я не говорил, что только.
Я же написал, что когда искал решение, то много где в интернете наталкивался на нее и kd-деревья.

Мне не важно, каким образом я решу задачу, главное, чтобы максимально быстро искалась ближайшая точка.
Множество точек N фиксированное и задается в начале. Поэтому время "подготовительной работы" не критично.
А вот потом пойдет неслабый поток случайных точек, которым надо найти ближайшую. И как раз этот процесс и надо оптимизировать.
Сейчас там стоит тупой перебор всех точек, что, понятное дело, не вариант...
...
Рейтинг: 0 / 0
26.05.2015, 13:54
    #38968667
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
AntipichСейчас там стоит тупой перебор всех точек, что, понятное дело, не вариант...

Наложи прямоугольную сетку (16x16 там или ... 256 на 256). И ищи по ячейкам которые ближе по "спирали".

Вариант?
...
Рейтинг: 0 / 0
26.05.2015, 14:24
    #38968721
Antipich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
mayton,

В смысле, по спирали?
О сетке думал, но есть ньюанс.
Разделили на ячейки, определили, в какую мы попали. Перебрали в ней точки и нашли ближайшую. Но суть в том, что ближайшая может быть не среди них, а в соседней клетке и т.д. Т.е. так вроде не катит.
...
Рейтинг: 0 / 0
26.05.2015, 14:32
    #38968746
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Antipichmayton,

В смысле, по спирали?
О сетке думал, но есть ньюанс.
Разделили на ячейки, определили, в какую мы попали. Перебрали в ней точки и нашли ближайшую. Но суть в том, что ближайшая может быть не среди них, а в соседней клетке и т.д. Т.е. так вроде не катит.
Всё прекрасно катит. Ты рисунок нарисуй. И сам посмотри.
...
Рейтинг: 0 / 0
26.05.2015, 15:11
    #38968816
Antipich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
mayton,

Пожалуйста, вот тебе рисунок.
Я в paint рисовал, не суди строго :)
На примере четырех квадратов. Зеленая точка - входная. Синие - начальный набор.
Как видишь, синяя точка с правого "квадрата" значительно ближе, чем точки в том же "квадрате", где и зеленая...
...
Рейтинг: 0 / 0
26.05.2015, 15:12
    #38968818
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
1 обход змейкой сделай-то.

Змейкой.

1 обход.
...
Рейтинг: 0 / 0
26.05.2015, 15:13
    #38968819
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Тьфу. Спиралькой.
...
Рейтинг: 0 / 0
26.05.2015, 15:23
    #38968841
Antipich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
mayton,

По какому алгоритму спиралькой? До какой степени обходить? Как понять, что обходить далее нужно или пора остановиться?
...
Рейтинг: 0 / 0
26.05.2015, 15:24
    #38968843
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Один круг. Если не нашёл точек - то еще один круг.
...
Рейтинг: 0 / 0
26.05.2015, 15:32
    #38968854
Antipich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Не прокатит.
Количество обходов спиралькой и т.д. зависит чисто от выбранного размера одного квадрата.
Рисовать еще одну картинку лень, если честно. Но она сразу приходит в голову :) Нет критерия остановки просмотра. Найденная точка на любой текущей итерации может быть дальше, чем точки на следующих.

Тут именно квадраты не катят. А вот в диаграмме Вороного как раз то, что надо. По ходу... Но куча других нюансов, с которыми хрен разберешься так, без тяжелой артиллерии и влезания в очень умные книги :) По ходу придется влезать и вспоминать студенческие годы и матан с дискреткой :) Внутренний голос подсказывает, что все же это - правильное направление.

Ладно, все равно спасибо за помощь :)
...
Рейтинг: 0 / 0
26.05.2015, 15:48
    #38968875
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Я бы так решал:
Если конечное множество фиксированное (в котором искать), то превратить его в два ассоциативных массива (или сортированных списка)
Mx[X] = Y и My[Y] = X
Например для точек (1,1), (5,3), (4,2)
Код: sql
1.
2.
3.
4.
5.
6.
Mx[1] = 1
Mx[4] = 2
Mx[5] = 3
My[1] = 1
My[2] = 4
My[3] = 5


для поиска ближайшей от (x,y) сначала проходим по массиву Mx, затем My. в обе стороны каждый. Затем из 4х выбрать ближайшую.
Например для точки (3,3) идем вверх. Следующая точка (4,2), расстояние до нее 1.4, поэтому следующую проверять не надо, т.к. (5,3) дальше.

Тут надо еще подумать как от корней избавится при расчете длины. Заменить на квадраты, т.к. умножение гораздо быстрее. И немного соптимизировать, добавить проверку для Mx => |x - xi| > |y - yi| чтобы не обсчитывать заведомо далекие точки.
...
Рейтинг: 0 / 0
26.05.2015, 15:48
    #38968878
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Извини конечно но из твоего месседжа
AntipichНо я хоть убей не могу понять, как они применимы именно к этой задаче.
как-бе напрашивается вывод об уровне знаний. Диаграммы Вороного потребуют от тебя мат-аппарата
в несколько раз большего чем простое деление пространства на прямоугольники, квадраты, Quad-Tree,
R-Tree, и прочие способы кластеризации метрического пространства.

Я тебе "сходу" предложил простой вариант индексирования пространства на уровне "лабы 1-го курса"
но ты почему-то решил что он - не рабочий. Что-ж удачи тебе в твоём нелёгком изучении трудов Вороного.

Надеюсь он тебе будет полезен. Кстати генерация разбиения Вороного вовсе не отменяет необходимость
создания "индекса" для этого разбиения.

Еще раз удачи.
...
Рейтинг: 0 / 0
26.05.2015, 15:56
    #38968891
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
maytonСпиралькой.
по сути ты укрупнил точку до квадрата, т.е. ищем не ближайшую точку, а ближайший квадрат, а в нем точку. Оно сработает если точки боле-мене равномерно распределены и правильно выбрать размер квадрата. А если точки неравномерно, например закусочные на карте, куча пустых квадратов и в некоторых куча точек, то из тайги долго по спиральке идти придется, а в центре крупного города долго точки в квадрате перебирать.
...
Рейтинг: 0 / 0
26.05.2015, 15:58
    #38968896
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Dima T, это основная проблема пространственного поиска. Неравномерность данных.
...
Рейтинг: 0 / 0
26.05.2015, 16:00
    #38968902
Antipich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
mayton,

Уровень знаний у меня неплохой, можешь поверить :) И матан для меня не является каким-то ужасным словом :)
И с Вороновым как раз вопрос у меня основной в его грамотной индексации и построении k размерности, а не обычный вариант.
Мне не нужна была лаба. И согласись, что твой вариант запросто допускает ошибки, т.е. работает неверно.
Если у тебя такие отличные знания, то что же ты про Вороного не объяснил, как к нему подойти, до чего я уже сам допер, а упирался, что твой вариант абсолютно рабочий?
...
Рейтинг: 0 / 0
26.05.2015, 16:05
    #38968919
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Dima Tпревратить его в два ассоциативных массива (или сортированных списка)
Массивы тут не пройдут, т.к. будут повторы индекса. Сортированные списки (один по X, второй по Y). В остальном должно заработать.
...
Рейтинг: 0 / 0
26.05.2015, 16:14
    #38968931
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Можно еще соптимизировать, сначала найти минимальный квадрат поисков, т.е. просто пройтись по спискам вверх/вниз, найти МИН(|x-xi|, |y - yi|), тут корней никаких не надо, только вычитания, модуль и сравнения, затем останется обсчитать точки в квадрате (x - MIN, y - MIN):(x + MIN, y + MIN).
...
Рейтинг: 0 / 0
26.05.2015, 16:14
    #38968932
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
Antipichmayton,

Уровень знаний у меня неплохой, можешь поверить :) И матан для меня не является каким-то ужасным словом :)
И с Вороновым как раз вопрос у меня основной в его грамотной индексации и построении k размерности, а не обычный вариант.
Мне не нужна была лаба. И согласись, что твой вариант запросто допускает ошибки, т.е. работает неверно.
Если у тебя такие отличные знания, то что же ты про Вороного не объяснил, как к нему подойти, до чего я уже сам допер, а упирался, что твой вариант абсолютно рабочий?

Извини я еще раз верну тебя к цитате.
Ну разбили мы на ячейки. А дальше что? Как понять, в какую ячейку попадает наша точка? Как пользоваться этими алгоритмами в данном случае?
Вот ты говоришь что уровень знаний не плохой. Но где-то какая-то неувязочка.
Что является выходом диаграммы Вороного? Рискну предположить что набор полигонов.
Тоесть твоя задача заключается в том чтобы найти полигон в который попадает твоя искомая точка.

Вот с этого момента я жду очень и очень конкретных вопросов.

Что именно непонятно?
...
Рейтинг: 0 / 0
26.05.2015, 22:33
    #38969271
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
AntipichДобрый день.
Есть у меня такая задача:
Есть множество N точек на плоскости. Оно фиксированное.
Есть произвольная точка p.
Задача - найти из множества N точку, ближайшую к p.
Везде в интернете ссылаются на kd деревья или диаграмму Вороного.
Но я хоть убей не могу понять, как они применимы именно к этой задаче.

Вот взять диаграмму Вороного.
https://ru.wikipedia.org/wiki/Диаграмма_Вороного
http://neerc.ifmo.ru/wiki/index.php?title=Диаграмма_Вороного

Ну разбили мы на ячейки. А дальше что? Как понять, в какую ячейку попадает наша точка? Как пользоваться этими алгоритмами в данном случае?

Заранее благодарю за помощь.
Лучше равнозначным понятием воспользоваться - триангуляцией Делоне ( недавно делал перевод на fpc , в оригинальной библиотеке используется индексный поиск)
найдёшь вмещающий треугольник, а дальше останется проверить 3 его вершины

PS: треугольник может быть неполный
...
Рейтинг: 0 / 0
27.05.2015, 10:48
    #38969496
Valer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
чем не устраивает простой перебор по массиву точек?
...
Рейтинг: 0 / 0
27.05.2015, 12:56
    #38969693
Valer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Диаграмма Вороного, поиск ближайшей точки
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Диаграмма Вороного, поиск ближайшей точки / 25 сообщений из 216, страница 1 из 9
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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