Найти количество прямоугольников из заданного набора координат
Автор вопроса: AlinОтветов: 6
Мне нужно найти максимальное количество прямоугольников из заданного набора координат.
Рассмотрим следующие координаты, заданные в системе координат X Y: 3 10, 3 8, 3 6, 3 4, 3 0, 6 0, 6 4, 6 8, 6 10,
Как узнать, образуют ли следующие координаты прямоугольник (3,0) (3,4) (6,4) (6,0)
Ограничение времени выполнения: 0,1 сек.
Спасибо
Решите, в чем вопрос. 4 точки образуют прямоугольник или сколько прямоугольников можно составить из заданных точек? hasan 06.10.2013
Оба они на самом деле, как я могу проверить, что 4 точки образуют прямоугольник и как я могу найти максимальное количество возможных прямоугольников Alin 06.10.2013
Это вопрос АКМ? hasan 06.10.2013
Не ACM, из книги с практическими вопросами Alin 06.10.2013
каково максимальное количество баллов? hasan 06.10.2013
все заданные точки являются целыми числами? hasan 06.10.2013
Для каждой пары точек, скажем, (x1, y1) и (x2, y2), считайте ее диагональю некоторого прямоугольника. Если в исходном множестве есть точки (x1, y2) и (x2, y1), то мы нашли наш прямоугольник. Следует отметить, что будут существовать 2 диагонали, которые будут представлять один и тот же прямоугольник, поэтому мы делим окончательный ответ на 2.
Это будет работать только для прямоугольников, параллельных оси x или оси y.
Это решение работает только для ортогональных прямоугольников, то есть со сторонами, параллельными оси x, y.
Ответ 3 · рейтинг 4 · hasan
Чтобы проверить, образуют ли 4 точки прямоугольник:
для каждых двух точек рассчитайте расстояние. хранить все в массиве поплавков.
отсортировать массив.
у вас будет a[0] = a[1], a[2] = a[3], a[4] = a[5]
Ответ 4 · MvG
Как я могу найти, образуют ли следующие координаты прямоугольник
Проверьте, являются ли разностные векторы ортогональными, т.е. имеют нулевое скалярное произведение.
Это не проверяет, включены ли эти координаты в ваш список. Он также не проверяет, выровнен ли прямоугольник с осями координат, что было бы гораздо более простой задачей.
Если вы хотите найти все прямоугольники во входных данных, вы можете выполнить описанную выше проверку для всех четверок. Если это неприемлемо по соображениям производительности, вам следует обновить свой вопрос, указав, с каким размером проблемы и ограничениями производительности вы сталкиваетесь.
Ответ 5 · Chef Gladiator
Моя скромная покорность
Я предполагаю, что количество оптимизаций возможно.
Ответ 6 · pkd
Мой подход заключается в
Пройтись по каждой точке
Проверьте, какие все точки находятся прямо над этой точкой, а затем сохраните координаты Y этих точек, которые образуют линию.
В следующий раз, когда я снова найду ту же координату Y, это означает, что мы нашли 1 прямоугольник
Продолжайте снова проходить все остальные точки, делая то же самое.
Мое решение выполняется за O(n^2), но это будет только прямоугольник, параллельный оси X или Y.
Вот мой код для вышеуказанного подхода:
def getRectangleCount(coordinate):
n = len(coordinate)
y_count = dict()
ans = 0
for i in range(n):
x, y = coordinate[i]
for j in range(n):
dx = coordinate[j][0]
dy = coordinate[j][1]
if y < dy and x == dx:
ans += y_count.get((y, dy), 0)
y_count[(y, dy)] = y_count.get((y, dy), 0) + 1
return ans
coordinate = [[3, 10], [3, 8], [3, 6], [3, 4], [3, 0], [6, 0], [6, 4], [6, 8], [6, 10]]
print(getRectangleCount(coordinate))