-
#BruteForce #example #무차별적으로_시도하기Data miner 2019. 7. 2. 17:08728x90
특정 회사가 자신이 보유하고 있는 매장들을 관리한다고 할 때, 가장 가까운 매장들이 구체적으로 어디에 위치하고 있는지에 대해서 알아본다고 하자. 관리해야 하는 매장의 리스트가 상대적으로 적다고 할 때, 가장 간단한 BruteForce의 알고리즘을 적용한다고 생각하자.
먼저, 두 매장의 거리를 재는 함수를 생성한다. 다음과 같이 주어졌다고 생각하자.
from math import sqrt # 두 매장의 직선 거리를 계산해 주는 함수 def distance(store1, store2): return sqrt((store1[0] - store2[0]) ** 2 + (store1[1] - store2[1]) ** 2)
다음으로, 자기 자신의 매장끼리의 distance를 구하지 않는 가능한 매장의 distance를 모두 구한 다음에
특정 distance가 작을 경우 기존의 가장 최소점을 대체하는 식으로 알고리즘을 짠다.
def closest_pair(coordinates): d = 60 for i in coordinates: for j in coordinates: d1 = distance(i,j) if not i==j and d>d1: # 특정d가 d1보다 작을 경우 대체해주는 방식에 해당한다. d=d1 m=i n=j pair = [m, n] #위치를 반환하는 경우이므로, 해당 pair를 리스트 형태로 묶어준다. return pair test_coordinates = [(2, 3), (12, 30), (40, 50), (5, 1), (12, 10), (3, 4)] print(closest_pair(test_coordinates)) #[(2, 3), (3, 4)]
'Data miner' 카테고리의 다른 글
코드를 효율적으로 짜려면? (1) 2019.07.09 #Divide#Conquer#combine#1부터 n까지 더하는 문제 (0) 2019.07.08 #BruteForce #무차별적으로_시도하기 #무차별적_대입공격 (0) 2019.07.02 #(Binary)Logistic regression (0) 2019.06.24 #Shrinkage method #Ridge #L2 (0) 2019.06.15