Russian Qt Forum
Ноябрь 23, 2024, 18:28
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Удалить ближайших
Страниц:
1
[
2
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Удалить ближайших (Прочитано 10934 раз)
vregess
Гость
Re: Удалить ближайших
«
Ответ #15 :
Июнь 02, 2012, 13:22 »
Я могу ошибаться, но возможно подойдут вот эти ребята:
1)
Spatial database
2)
K-D-tree
3)
M-tree
4)
Quadtree
5)
R-tree
мб M-tree самый правильный. Вот тут java applet с примером есть:
http://www.cmarschner.net/mtree.html
Я совершенно не разбираюсь в этих алгоритмах, просто однажды просили поискать.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Удалить ближайших
«
Ответ #16 :
Июнь 02, 2012, 17:24 »
Цитата: ck от Июнь 02, 2012, 13:22
Я могу ошибаться, но возможно подойдут вот эти ребята:
Ребята сильные, но ни один из них не выглядит ни простым ни дешевым для реализации. Плюс смущает одно обстоятельство - нужно ведь просто проредить/отфильтровать (а совсем не весь функционал), хочется обойтись без полномасштабного построения дерева.
В любом случае спасибо за подборочку
Записан
vregess
Гость
Re: Удалить ближайших
«
Ответ #17 :
Июнь 02, 2012, 21:59 »
Цитата: Igors от Июнь 02, 2012, 17:24
Ребята сильные, но ни один из них не выглядит ни простым ни дешевым для реализации. Плюс смущает одно обстоятельство - нужно ведь просто проредить/отфильтровать (а совсем не весь функционал), хочется обойтись без полномасштабного построения дерева.
Если просто - то перебор, если быстро, то не просто)
Но я понимаю. Эти алгоритмы не такие простые, для "простой" задачи. Я и сам бы не рвался их использовать, мб как вариант для будущих улучшений.
«
Последнее редактирование: Июнь 02, 2012, 22:08 от ck
»
Записан
Akon
Гость
Re: Удалить ближайших
«
Ответ #18 :
Июнь 03, 2012, 16:11 »
Цитировать
Наложить на плоскость регулярную решетку, точки, покрытые решеткой удалить, в неплотностях решетки может оказаться >1 точки, поэтому вторым проходом оставляем только одну любую точку в каждой неплотности.
Берем круг, к нему приставляем еще круг и т.д. по плоскости. Получается решетка, между кругами есть промежутки (неплотности). Коордтнаты центров кругов известны. Алгоритм исключения точек простейший.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Удалить ближайших
«
Ответ #19 :
Июнь 03, 2012, 17:41 »
Цитата: Akon от Июнь 03, 2012, 16:11
Берем круг, к нему приставляем еще круг и т.д. по плоскости. Получается решетка, между кругами есть промежутки (неплотности). Коордтнаты центров кругов известны. Алгоритм исключения точек простейший.
Так что, если "взяли круг" - так уже мы знаем какие точки в него попадут? Или можем это быстро определить? Не вижу каким образом.
Также: если я правильно понял, центры кругов образуют регулярную решетку, и полагается что в 1 круге - не более 1 точки. Тогда 2 близкие точки могут быть в соседних кругах, и одна из них не будет удалена вторым проходом по "неплотностям"
Записан
Disa
Гость
Re: Удалить ближайших
«
Ответ #20 :
Июнь 09, 2012, 13:16 »
Мб попробовать решение по аналогии с closest pair algorithm?
То есть
1) Делить множество пополам относительно некого pivot (по x-вой координате). Pivot - это то, что в русскоязычной литературе называется компаранд (по ссылке -
средняя точка
).
2) Рекурсивно вызывать функцию для каждой из двух половинок, где "внизу" дерева рекурсии проверяем расстояние между ними, если оно меньше - удаляем точки (тут h - величина фиксированная нами).
3) Аналогично поменять функцию объединения(split function, по ссылке это
стадия объединения
), то есть множество C(pi) так же для фиксированного h.
Время работы - это сумма времени работы рекурсивных вызовов + функция объединения.
http://e-maxx.ru/algo/nearest_points
«
Последнее редактирование: Июнь 09, 2012, 13:23 от Disa
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Удалить ближайших
«
Ответ #21 :
Июнь 09, 2012, 14:16 »
Цитата: Disa от Июнь 09, 2012, 13:16
Мб попробовать решение по аналогии с closest pair algorithm?
То есть
Так я пробовал
На сильном прореживании (когда расстояние D мало) - все очень прилично, но при бОльших D опять сваливаемся в перебор. В closest pair этой проблемы нет - ищем минимальное, ну D и уменьшается автоматычно
Записан
Страниц:
1
[
2
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...