Как рассчитать расстояние по Евклайду двух точек на борту? - PullRequest
0 голосов
/ 21 марта 2019

У меня есть этот код. Он рассчитывает расстояния точек на плате и выводит их пары с расстоянием, равным или меньшим k. Но для большего количества это очень медленно (O (1,5 (n ^ 2)) приблизительно). Так что вы можете предложить способ сделать его более эффективным?

import numpy
input = open("02.in").read()
input = input.split("\n")
file = open("output2.txt", "w+")

data = []
output = []

for i in input:
    data.append(i.split())
#so data looks like [["100000","10"],["235","654"],["4538","1535"],["965","3412"],...] 
#and in first list is info about rest (number of lines and constant k)
k = int(data[0][1])
length = int(data[0][0])
print(start)
print(length)

data.pop(-1)
data.pop(0)

for i in range(length):
    x1, y1 = int(data[i][0]), int(data[i][1])
    for j in range(i + 1, length):
        x, y = int(data[j][0]) - x1, int(data[j][1]) - y1
        if abs(x) > k or abs(y) > k:
            continue
        dist = numpy.linalg.norm(x-y)
        if(dist <= k):
            print(str(i) + " " + str(j))
            file.write(str(i) + " " + str(j) + "\n")

file.close()

Если у вас есть какие-либо вопросы, пожалуйста, спросите меня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...