Учитывая набор точек, я хотел бы найти центр ограничивающей рамки (фиксированной длины и ширины), которая максимизирует количество точек в указанной коробке. Я в затруднении для эффективного способа сделать это.Найти центр ограничивающей рамки с фиксированной шириной
ответ
алгоритм со сложностью O (N^2 * LogN) (я надеюсь, что лучше один существует):
Edit: article exploiting interval trees претензии O (NlogN) сложности массив
Сортировка данных Побочным X координат ,
Сканирование A с линии развертки влево-вправо.
Для каждой точки A получите LeftX = A[k].X
- левая координата вертикальной полосы, найдите самую правую координату вертикальной полосы RightX = LeftX + Width
.
Копирование точек внутри полосы на другую решетку B.
Сортировка по Y координате.
Сканирование ширины линии развертки B сверху вниз. Для каждой точки B [i] получите TopY = B[i].Y
- верхнюю координату прямоугольника, вычислить BottomY = TopY + Height
.
Использование двоичного поиска в B:
B [j] - последняя нижняя точка в B с B[j].Y <= BottomY
.
Находим количество точек в текущем прямоугольнике:
Количество точек N(k, i) = j - i + 1
Проверьте N(k, i)
является максимальным среди других
Это кажется трудной проблемой, вот моя идея: Держите график, каждый узел содержит прямоугольник и подмножество точек. прямоугольник определяет область, в которой размещение ограничивающего блока будет перекрывать все точки в подмножестве.
Чтобы построить график: Начнем с корневого узла, держащей пустой набор и прямоугольник [top:-inf, bottom:inf, left:-inf, right:inf]
Для каждой точки в дереве вызова этого рекурсивной функции с корневым узлом (псевдо-код):
function addPoint(node, point)
// check that you didn't already try to add this point to this node
// node.tested can be a hash set
if(node.tested contains point)
return
node.tested.add(point)
newRect = node.rect.intersectWith(boundingBoxAround(point))
// if the bounding box around the point does not intersect the rectangle, return
if(newRect is invalid) // rect is invalid if right<left or bottom<top
return
node.addChild(new node(newRect, node.pointSet U {point})
for each child of node
addPoint(child, point)
Теперь вы просто выбираете узел с самым большим подмножеством, вы можете отслеживать это при построении графика, поэтому вам не нужно снова запускать график.
Надеюсь, моя идея понятна, дайте мне знать, если я могу объяснить это лучше.
- 1. Как рассчитать центр ограничивающей рамки?
- 2. Найти радиус фиксированной длины дуги окружности в ограничивающей рамке, когда круг пересекает край ограничивающей рамки
- 3. VTK перемещает изображение в центр ограничивающей рамки
- 4. Сравнение центроида Блоба с центром ограничивающей рамки
- 5. Изменение размера ограничивающей рамки
- 6. Вычислить вершины ограничивающей рамки
- 7. извлечение минимальной ограничивающей рамки
- 8. масштаб вращающейся ограничивающей рамки
- 9. Как создать центр с фиксированной шириной 3-х столбцов?
- 10. Центр UIButton с фиксированной шириной на AutoLayout для всех экранов
- 11. Вертикально центр td в tr с фиксированной высотой и шириной
- 12. JScrollPane с фиксированной шириной
- 13. dvi поколение: нет ограничивающей рамки
- 14. УС: пролет в левой с фиксированной шириной, промежуток в правом с фиксированной шириной, центр стола заполняет остальную часть пространства
- 15. Создание ограничивающей рамки для UIImageView
- 16. Вычисление ограничивающей рамки с использованием Javascript
- 17. Создание ограничивающей рамки в изображении с прозрачностью
- 18. Pandas: гистограмма с фиксированной шириной
- 19. элементы с фиксированной шириной css
- 20. Проблемы с фиксированной шириной телефона
- 21. Matlab TextScan с фиксированной шириной
- 22. Размер JTextPane с фиксированной шириной
- 23. Макет страницы с фиксированной шириной
- 24. Титульные карточки с фиксированной шириной
- 25. Текстовый файл с фиксированной шириной
- 26. div фон с фиксированной шириной
- 27. центр div с максимальной шириной
- 28. Numpy: Поиск ограничивающей рамки внутри 2d-массива
- 29. Расширение сегмента линии до ограничивающей рамки
- 30. Расчет геопространственной ограничивающей рамки без данных карты
Насколько эффективно вы ожидаете? – timrau