Удалить близкие точки01.09.2026, 17:22. Показов 7441. Ответов 63
Метки нет (Все метки)
Добрый день
Есть массив/контейнер точек, напр
Спасибо
0
|
||||||
| 01.09.2026, 17:22 | |
|
Ответы с готовыми решениями:
63
Найти точки наиболее близкие друг к другу Найти две точки, наиболее близкие друг к другу Найти три точки, наиболее близкие к известной точке |
|
Нарушитель
10907 / 5835 / 1289
Регистрация: 12.03.2015
Сообщений: 26,934
|
||||||
| 01.09.2026, 17:49 | ||||||
|
Навскидку, без ИИшницы, вот набросал прям в браузере. Не отлаживал, просто показываю, как я это вижу.
0
|
||||||
|
102 / 70 / 15
Регистрация: 16.11.2018
Сообщений: 325
|
|
| 01.09.2026, 17:51 | |
|
Главная сложность задачи в сложности нахождения ближайших точек.
Обычным решением такой задачи является построение R-tree индекса для каждой точки что позволит находить точки в требуемой области. Но это долго есть вариант с неточным но быстрым решением это создание отсортированных индексов по осям x y z и вычислением манхетонских расстояний между точками. так же на ум приходит вариант с триангуляцией Делоне что гарантировано даст связи только с ближайшими точками до которых можно проверять расстояния.
0
|
|
|
Вездепух
13234 / 6866 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||
| 01.09.2026, 17:58 | ||
|
Согласно постановке задачи в тексте вопроса, решение тривиально: удалить все точки, кроме одной. А можно и вообще все удалить. Расстояние в результате не будет превышать любое заданное.
1
|
||
|
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,374
|
|
| 01.09.2026, 23:42 | |
|
Verevkin,
Ну да... Я в корнях ничего не понимаю. Не садовник. Это ты типа сложить и перемешать просто всё. Как-то подозрительно всё просто. Сложить все координаты и сравнить с остальными....
0
|
|
|
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,374
|
||||||
| 01.09.2026, 23:47 | ||||||
|
Извиняюсь ни кого не хотел обидеть.
Просто поисковик google. Если вам нужно просто исправить синтаксис текущего алгоритма (жадного удаления с конца), код должен выглядеть так:cpp
0
|
||||||
|
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,374
|
|
| 02.09.2026, 00:03 | |
|
Он это делает за несколько секунд.........
0
|
|
|
Вездепух
13234 / 6866 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
|
| 02.09.2026, 02:40 | |
|
Для решения задачи нахождения ближайшей пары точек используются алгоритмы, которые предварительно раскидывают входные точки по ближайшим узлам сетки с некоторым шагом d. А затем выполняют поиск пары уже между узлами сетки. При этом для обработки точек, ассоциированных с некоторыми узлом нужно рассмотреть лишь точки в соседних узлах (8-окрестность для 2D случая, 26-окрестность для 3D случая).
Вот я думаю, а не применить ли для этой задачи аналогичный подход, просто использовав это самое 1.0e-5 в качестве шага сетки.
0
|
|
|
Вездепух
13234 / 6866 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
|
| 02.09.2026, 09:57 | |
|
Другое дело, что задача содержит элемент оптимизации (не знаю, подразумевал ли его ТС - по постановке вопроса не видно). В паре точек-нарушителей удалить достаточно только одну. Какую именно? Какие точки удалять, а какие оставлять? Понятно, что можно постараться добиться соблюдения требования задачи путем удаления минимального количества точек, а можно просто тупо удалять наугад, не беспокоясь о минимизации.
Минимизация количества удаленных точек выливается в задачу о минимальном вершинном покрытии...
0
|
|
|
Заблокирован
|
|||||||
| 02.09.2026, 11:31 | |||||||
0
|
|||||||
| 02.09.2026, 15:18 [ТС] | |||||||||
Это так, но все-таки erase - тяжелая операция, уже на лимоне точек будет медленновато, а ведь бывают модели и намного большеЛадно, программист начинает делать. Берет он этот кубик, и... е-мое, а "повторяющиеся" точки оказывается не совпадают точно. Есть разница, да, в 5-м а то и 6-м знаке после запятой, но не ноль! Приходится решать задачу "удалить близкие точки". Но это еще не все. Оказывается удаление неоднозначно и, по меньшей мере, результат зависит от порядка следования точек в исходном контейнере. Напр есть точки A, B, C
Ну и какие у программиста варианты? 1. Свалить все проблемы на юзера, типа
2. Попытаться договориться/объяснить что, мол, это не так просто, возникают сложности и.т.п. Это может встретить понимание, но может и нет
4. Ваш вариант?
0
|
|||||||||
|
Заблокирован
|
|||
| 02.09.2026, 15:56 | |||
|
Если в условии ничего не сказано про количество точек на входе, а также про ограничения по памяти или вычислительной сложности, то люди вольны написать код как угодно... Вроде ты старожил форума, но оформляешь условие как нуб ![]()
0
|
|||
|
Вездепух
13234 / 6866 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
|||
| 02.09.2026, 17:03 | |||
|
Добавлено через 19 минут Во-вторых, решать такую задачу на голых геометрических принципах "слить близкие точки на с 1.0e-5"... да, бывает нужно... но это уже скорее шаг отчаяния, когда все настолько запустилось/развалилось/исказилось/разъехалось, что другого выхода просто нет. По уму же, те множественные точки, которые с геометрической точки зрения должны являться одной точкой, должны были изначально неким образом "сгруппированы", т.е., непример, ссылаться друг на друга и эти ссылки должны были тщательно поддерживаться сквозь все этапы обработки. Чтобы на том этапе, когда нам потребуется "причесать" данные, то есть свести расползшиеся точки в одну, мы не занимались такой тяжелой обработкой, как геометрический поиск с 1.0e-5, а просто прошлись по готовым группам точек и сразу их "причесали". То есть задача изначально должна была решаться комбинаторно, а не геометрически. Не надо было терять совпадающие точки. И если их не терять, то их не нужно будет и искать. Другое дело, если нам дали входные данные в таком "непричесаном" виде... Но, еще раз, это уже не по теме.
0
|
|||
| 02.09.2026, 18:24 [ТС] | ||
|
В общем нужно сделать "в меру". Десять строчек с квадратичным перебором (как предложил товарищ выше) - перегиб в одну сторону. Рекомендации всяких вумных деревьев - перегиб в другую, не тот это случай когда нужно подходить столь фундаментально. Решение должно быть достаточно простым/дешевым и приличным, пусть и не самым быстрым по скорости. Можно заводить доп данные (с умом), сортировать и.т.п. но не "размахиваться слишком широко" Как это сделать?
0
|
||
|
фрилансер
6508 / 5758 / 1135
Регистрация: 11.10.2019
Сообщений: 15,406
|
||
| 02.09.2026, 18:41 | ||
|
1) скорость более крутого алгоритма 2) правильность работы сложного алгоритма 3) а может оказаться так, что скорость устроит и так, сейчас ЦП очень хитрые при работе с кеш-дружелюбными данными ------ Кстати, такой алгоритм легко распараллелить: чистим отдельные области в разных потоках, а потом по приграничным точкам областей ещё фильтром пробегаемся быстро
0
|
||
| 02.09.2026, 19:06 [ТС] | |||||
![]()
0
|
|||||
|
фрилансер
6508 / 5758 / 1135
Регистрация: 11.10.2019
Сообщений: 15,406
|
|||
| 02.09.2026, 22:30 | |||
|
2) каждый из них чистим в отдельном потоке 3) после потом по секущим плоскостям между блоками ещё проходим отдельно Добавлено через 2 минуты но тут, правда, точки придётся помечать удалёнными, а не сразу удалять. В общем, дополнительная память потребуется Добавлено через 53 секунды
0
|
|||
| 02.09.2026, 23:53 [ТС] | |||||||
|
По существу. Да, это решает проблему оптимизации, но разбиение пространства - удовольствие дорогое. Беда в том что кубы надо заряжать точками и хранить. А точки могут быть весьма sparse(d), т.е. разбросанными. Типа вот "кучка" точек и вот, а между ними километр, и заполняйте его бесполезными кубами. Приходится выдумывать структуры посложнее и.т.п. Если уж хотели распараллелить, есть простой способ
Да, но проблему оптимизации мы пока не решили, не должна же find_dup молотить весь контейнер точек
0
|
|||||||
|
Вездепух
13234 / 6866 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
|
||||||
| 03.09.2026, 02:28 | ||||||
|
Для варианта, который я описал выше и именно для удаления точек. Опять же, не заморачиваясь выбором точек для удаления, а просто удаляя первых подвернувшихся нарушителей
0
|
||||||
| 03.09.2026, 02:28 | |
|
Значения близкие к нулю
Найти близкие по значению элементы матрицы Вывести все возможные числа, которые при возведении в квадрат дадут результаты, наиболее близкие к N Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|