powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Диаграмма Вороного, поиск ближайшей точки
25 сообщений из 216, страница 2 из 9
Диаграмма Вороного, поиск ближайшей точки
    #38970087
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопросы по поиску столкновений астероидов тут можно задавать?
Это правильная тема?
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #38971185
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторФормат входного файла

В первой строке задано число астероидов N (1 ≤ N ≤ 10).
В следующей строке указаны характеристики корабля: радиус R (1 ≤ R ≤ 1000), степень полинома C1 равная p1 (0 ≤ p1 ≤ 9) с последующим указанием (p1 + 1) коэффициентов многочлена (-1000 ≤ С1i ≤ 1000) начиная от младшего, степень полинома C2 с дальнейшим указанием коэффициентов и степень полинома C3 с дальнейшим указанием коэффициентов полинома (ограничения на размер и коэффициенты полиномов одинаковые).
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #38971331
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕсли плоскость - дискретная то можно закрашивать каждый дискретный элемент цветом.А если не дискретная, то дискретизировать, и закрашивать каждый дискретный элемент списком цветов, встречающихся в нём :)

Трудно что-то подсказывать без знания N, неравномерности данных, чисел поисков для каждого набора из N точек (всего поисков для одного набора, последовательных поисков с одним набором) и ожидаемых оптимальности результата и бюджета разработки.
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #38973761
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диаграмма Вороного или триангуляция Делоне нужны для более сложных задач, в этой ветке несколько лет назад White Owl решал задачу где триангуляция Делоне могла бы снизить трудоёмкость алгоритма с кубического до линейно-логарифмического. Если мне не изменяет память, трудоёмкость триангуляции Делоне методом Форчуна - N*ln(N). Поэтому как уже сказал Valer - тупым последовательным перебором вы гарантировано находите решение за N шагов.

Любая попытка оптимизировать алгоритм будет основана на неявном предположении что какой-то добрый дядя собрал для вас статистику о характере распределения этих ваших N точек (затратив при этом как минимум те же N операций), а потом абсолютно бескорыстно подарил её вам. Ну или исчо может быть вариант что вам каким-то образом доступна априорная информация о характере распределения точек. Если это ваш случай, то тогда есть смысл колупаться. Если же на вас одномоментно вываливается случайный набор N точек - полный перебор.
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #38973773
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_nЕсли же на вас одномоментно вываливается случайный набор N точек - полный перебор.
Вроде как набор не случайный, а очень даже известный, если я правильно понял ТЗ. Случайная точка одна, относительно которой искать.
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #38973819
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antipich,

я бы шла от этого макета решения(точки заменила на случайные)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Sub x150601()
Dim x1, x, y1, y, z1, z, j1, j1k, j2, dt1
z = 999999  'заведомо больщое число
dt1 = Timer
j1 = 0
j1k = 1000000  'количество циклов
j2 = 0
x = 600  'искомая точка
y = 100
Do While j1 < j1k
j1 = j1 + 1
x1 = Rnd(1) * 999 \ 1
y1 = Rnd(1) * 999 \ 1
z1 = (x1 - x) * (x1 - x) + (y1 - y) * (y1 - y)
If z1 < z Then
j2 = j2 + 1
Debug.Print j1, j2, x1, y1, z1
z = z1
End If
Loop
Debug.Print "время выполнения в сек="; (Timer - dt1)
'' цикл------------------x1----------y1---------расстояние в квадрате
'' 1             1             279           444           221377
'' 2             2             453           348           83113
'' 3             3             578           84            740
'' 314           4             607           117           338
'' 1607          5             598           90            104
'' 1616          6             600           99            1
''время выполнения в сек= 1,203125
End Sub
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #38974514
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_nЛюбая попытка оптимизировать алгоритм будет основана на неявном предположении что какой-то добрый дядя собрал для вас статистику о характере распределения этих ваших N точек (затратив при этом как минимум те же N операций), а потом абсолютно бескорыстно подарил её вам.Если карта набор этих точек повторяется миллион раз, только с другой случайной мухой-параметром, то амортизация сбора статистики в пересчёте на одну муху мало отличится от "абсолютно бескорыстно".
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39045325
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntipichДобрый день.
Есть у меня такая задача:
Есть множество N точек на плоскости. Оно фиксированное.
Есть произвольная точка p.
Задача - найти из множества N точку, ближайшую к p.
Везде в интернете ссылаются на kd деревья или диаграмму Вороного.
Но я хоть убей не могу понять, как они применимы именно к этой задаче.

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

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

Заранее благодарю за помощь.

Зачем усложнять.
Делаете массв точек и 2 массива указателей на точки
для осей координат.
Массивы указателей на точки сортируете по возрастанию координат

Берете на вход точку ищете точки в массиве указателей
между которыми
нужно вставить вашу новою точку.
Из 2-х соседних выбираете ту, которая ближе.
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39045326
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРAntipichДобрый день.
Есть у меня такая задача:
Есть множество N точек на плоскости. Оно фиксированное.
Есть произвольная точка p.
Задача - найти из множества N точку, ближайшую к p.
Везде в интернете ссылаются на kd деревья или диаграмму Вороного.
Но я хоть убей не могу понять, как они применимы именно к этой задаче.

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

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

Заранее благодарю за помощь.

Зачем усложнять.
Делаете массв точек и 2 массива указателей на точки
для осей координат.
Массивы указателей на точки сортируете по возрастанию координат

Берете на вход точку ищете точки в массиве указателей
между которыми
нужно вставить вашу новою точку.
Из 2-х соседних выбираете ту, которая ближе.

Можно обойтись и 2 массивам , массив с точками отсортировать
значению оси Х
а массив указателей на эти точки отсортировать по значению оси Y.
Делаете поиск методом половинного деления
типа для вставки координат новой точки.
Получаете координаты 2-х ближайших точек, из них выбираете
ту которая ближе к вашей точке.
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39045329
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРМассивы указателей на точки сортируете по возрастанию координат

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

По какому возрастанию координат?

Х и Y.

Первый массив
1 1,5
2 3.2
3 4.1
4 8.7
5 9.4

второй массив
3
2
5
1
4

на вход приходит точка с координатами 5.3
Ближайшие точки 4.1 , 8.7 , 3.2 , 9.4

Ошибся будет выбор из 4 точек.
Из них нужно выбрать самую близ лежащую.

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

Тоже самое если ты выбираешь обход слева направо + сверху вниз я могу
указать такие исходные данные при которых ты промахнёшся мимо нужной точки.
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39045341
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДохтаРМассивы указателей на точки сортируете по возрастанию координат

По какому возрастанию координат?

Массив точек сортируется по возрастанию координаты Х
Массив указателей на точку
сортируется по возрастанию значения координат Y точек на которые они
ссылаются .

Если точек очень много, то вместо массива нужно строить дерево блоков
и подбирать их размер под линейку кеша процессора, что бы
половинное деление не продувало кеши.
Но это уже следующий этап оптимизации.
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39045346
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДохтаР, я убеждён что корректность результата зависит от выбора направления
ранжирования точек. К примеру сверху-вниз + слева направо в силу дихотомии
пропускают важную точку которая лежит на 2 ячейки от искомой.

Тоже самое если ты выбираешь обход слева направо + сверху вниз я могу
указать такие исходные данные при которых ты промахнёшся мимо нужной точки.

ИМХО
Не промахнусь.
в одномерной системе координат задача оптимизируется
до 2 ближайших точек,
в двухмерной системе координат до 4
, в трех мерной до 9 .
итд....
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39045350
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРв одномерной системе координат задача оптимизируется
до 2 ближайших точек,
Док ты сильно ошибаешся. Я могу нарисовать тебе этот частный случай. Ну лучше ты сам
порисуй и найди неблагоприятный расклад.
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39045372
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДохтаРв одномерной системе координат задача оптимизируется
до 2 ближайших точек,
Док ты сильно ошибаешся. Я могу нарисовать тебе этот частный случай. Ну лучше ты сам
порисуй и найди неблагоприятный расклад.

Подумал ничего не придумал
в 2- мерной системе координат алгоритм
выходит 4 точки , из который нужно выбрать ближайшую
собрав в отдельный массив и отсортировав по длине гипотенуз
прямоугольные треугольники .
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39045373
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРПодумал ничего не придумал
в 2- мерной системе координат алгоритм
выходит 4 точки , из который нужно выбрать ближайшую
собрав в отдельный массив и отсортировав по длине гипотенуз
прямоугольные треугольники .
ОК. Возможно я не так понял твою сортировку.
Давай исходник. Можно на псевдо-языке.
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39124420
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДохтаРПодумал ничего не придумал
в 2- мерной системе координат алгоритм
выходит 4 точки , из который нужно выбрать ближайшую
собрав в отдельный массив и отсортировав по длине гипотенуз
прямоугольные треугольники .
ОК. Возможно я не так понял твою сортировку.
Давай исходник. Можно на псевдо-языке.


Извини что с большой задержкой , я было начал реализовывать идею в коде
и погряз в реализиции а потом отвлекся и забыл.
Приблизительный алгоритм сортировки описан тут для более простого случая:
18534524
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39124426
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРmaytonпропущено...

ОК. Возможно я не так понял твою сортировку.
Давай исходник. Можно на псевдо-языке.


Извини что с большой задержкой , я было начал реализовывать идею в коде
и погряз в реализиции а потом отвлекся и забыл.
Приблизительный алгоритм сортировки описан тут для более простого случая:
18534524


Суть идеи в том что сначала массив точек нужно отсорировать
отдельно по каждой координате.
Потом поиском в диапазоне по Х Y ищется ближайшая, через расчет
разности гипотинуз.
Реализация достаточно просто масштабирется
до пространства любой размерности, вплодь до дефайном или параметром.

У меня сначала было желание реализовать универсальный поисковик ,
для разумной многомерности пространства, но я не нашел ему практического
применения и бысро потерял мотивацию.
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39126350
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаР,
mayton тут прав, сортировкой можно только для одномерного случая
для двухмерного и больше применяются k-d деревья и их разновидности для нахождения 2^k соседних точек (к - размерность пространства) из которых можно выбрать ближайшую. Cтоимость поиска в готовом k-d дереве - O(k*ln(N))

самый быстрый алгоритм который я знаю по построению k-d дерева выполняется за O(N*ln(N)), скоро я надеюсь напишу о нём в блоге
PS: проблема самобалансировки k-d деревьев пока не решена даже для 2-х мерного случая
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39126365
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон, поиск ближайшей точки если верить википедии несколько хуже O(H*Ln(H)) H - высота дерева
А вот здесь готовая реализация
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39126441
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашёл апплет-демку. С К-Д деревом. Пока не понял чем он отличается от R-деревев.

Вобщем накидал случайных точек. Умышленно неоднородно. Получилось вот такое разбиение пространства.
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39126494
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

википедияКаждая вершина R-дерева имеет переменное количество элементов (не более некоторого заранее заданного максимума). Каждый элемент нелистовой вершины хранит два поля данных: способ идентификации дочерней вершины и ограничивающий прямоугольник (кубоид), охватывающий все элементы этой дочерней вершины. Все хранимые кортежи хранятся на одном уровне глубины, таким образом, дерево идеально сбалансировано. При проектировании R-дерева нужно задать некоторые константы:


данные хранятся только в "листьях", дополнительно используются агрегатные значения (координаты вмещающего объекта)

в k-d дереве многомерная точка хранится в каждой ноде
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39126500
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А выводы?

Автору нужно искать ближайшие точки. В силу распространённости технологий oct-tree, r-tree я-бы начал
решение с них. Если нет доводов против.

Какие доводы против?
...
Рейтинг: 0 / 0
Диаграмма Вороного, поиск ближайшей точки
    #39126514
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
всё зависит от того что нужно автору
если геймдев, то обычно квадродерево, читай модификация k-d
если БД, то R-tree, оно обычно и используется в качестве индексов, но его и делать не надо, оно обычно уже в БД есть - надо просто научиться им пользоваться
...
Рейтинг: 0 / 0
25 сообщений из 216, страница 2 из 9
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Диаграмма Вороного, поиск ближайшей точки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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