Пусть d[i][j] = distances between points i and j
.Нас интересует функция count(i, j)
, которая максимально быстро возвращает количество квадратов, которые мы можем нарисовать, используя точки i
и j
.
По сути, count(i, j)
придется найти две точки x
и y
, такие что d[i][j] = d[x][y]
, и проверить, действительно ли эти 4 точки определяют квадрат.
Вы можете использовать хеш-таблица для решения проблемы в O(n^2)
в среднем.Пусть H[x] = list of all points (p, q) that have d[p][q] = x
.
Теперь для каждой пары точек (i, j)
, count(i, j)
придется итерировать H[ d[i][j] ]
и считать точки в этом списке, которые образуют квадрат с точками i
и j
.
На практике это должно работать очень быстро, и я не думаю, что когда-либо может быть хуже, чем O(n^3)
(я даже не уверен, что это когда-нибудь может быть так плохо).