2017-02-02 2 views
0

У меня есть массив координат, т.е. каждый индекс содержит (x, y) координаты. Я хочу понять, что если какая-либо из координат находится в одной строке или столбце. Задача состоит в том, чтобы сделать в одном цикле, где M - длина массива. Я старался, но, похоже, не мог сделать это, не используя две петли. Просто нужна помощь с алгоритмом.Расстояние между координатами в Big-oh of M time

Редактировать: В основном проблема в том, что у меня есть M штук на плате N на N. Каждый кусок может перемещаться по вертикали и по горизонтали любым числом. Просто хочу понять, что если какая-либо часть может атаковать любую другую вещь.

+0

Является ли это обобщением проблемы с 8 ферзями? Ваш массив содержит только координаты на доске ферзей, и вы хотите сказать за один проход через этот массив, если какая-либо королева атакует любую другую королеву? – Emmet

+0

На самом деле это более простая версия –

+0

Итак, обобщение 8 грачей? Если в любой строке или столбце больше 1, то по крайней мере две части атакуют друг друга? – Emmet

ответ

0

Это element distinctness/uniqueness problem, который имеет сложность O (MLogm) в общем случае (то есть сортировку).

Если нет ограничений памяти, вы можете использовать хэш-таблицу для Y и X-координату, в этом случае один проход через массив решает проблему

Edit: Для ограниченного борта это проще использовать булеву массив длина N для горизонталей и вертикалей. Сложность времени O (M), потребление памяти O (N)

for every rook: 
    if Horiz[rook.Y] then 
     two rooks share horizontal 
    if Vert[rook.X] then 
     two rooks share the same vertical 
    Horiz[rook.Y] = True 
    Vert[rook.X] = True 
+0

В основном проблема в том, что у меня есть M штук на плате N на N. Каждый кусок может перемещаться по вертикали и по горизонтали любым числом. Просто хочу понять, что если какая-либо часть может атаковать любую другую вещь. –

+0

Все остается в порядке. Время O (M) для этого определения. Для ограниченной платы проще использовать массивы вместо хеш-таблицы. Массивы с длиной N для вертикальных и горизонтальных областей - потребление памяти O (N) – MBo

+0

Не могли бы вы подробнее рассказать? –

Смежные вопросы