Существует 2-я сетка с произвольным размером. (Например, 1000 * 1000)Эффективная структура данных для представления 2D-сетки
Вот картина:
данной входы четыре Интс: xywh, которая выступает за (х, у) координаты для нижней левой точки каждого прямоугольника и его ширину и высоту.
Прямоугольники, имеющие общие края или перекрывающиеся, определены как подключены.
Набор связанных прямоугольников определяется как кластер .
Число прямоугольников на каждой элементарной ячейке определяется как ее толщина.
Таким образом, проблема просит, чтобы вычислить: 1. Максимальная толщина 2. Число кластеров 3. Максимальное число элементов кластера для одного кластера 4. Максимальная площадь для одного кластера
Например, на рисунке выше максимальная толщина составляет 3 и имеется 2 кластера. Один кластер состоит из 3 прямоугольников, а его площадь - 44. Число элементов в другом кластере равно 4, а площадь равна 30. Поэтому кластер с максимальным количеством элементов кластера равен 4, а максимальная площадь кластера равна 44.
Мое решение довольно наивно. Я использовал массив 2-d int для представления сетки. При чтении ввода я просто увеличиваю число в соответствующих ячейках. После того, как все данные прочитаны, я использовал поиск по глубине для определения кластеров.
Проблема заключается мой алгоритм очень медленно, и вскоре становится непригодным для использования, когда дается большой ввод (например, когда размер сетки проходит более 1000 * 1000)
Так что я хотел бы знать, есть ли эффективная структура данных и алгоритм для решения этой проблемы?
Сколько прямоугольников может быть? – kraskevich
Может быть много. На этом нет никаких ограничений. –
Какова желаемая временная сложность в отношении количества прямоугольников и размера сетки? Невозможно определить, возможен ли алгоритм или нет без каких-либо требований к производительности. – kraskevich