2014-06-08 7 views
0

문제점 : 고정 된 파란색 좌표가 있습니다. 모든 파란색 점의 직교 거리를 얻고 그것의 최소한을 찾는2 차원 그래프에서 주어진 점에 가장 가까운 좌표를 찾는 알고리즘

: 나는 가장 가까운 blueHere is the graph

이 내 방식이었다 좌표 주어진 red 좌표 찾고 싶어요.

float min=Float.MAX_VALUE; 
float temp=0; 
for(int i=0;i<cordinateList.size;i++){ 
    temp=cordinateList.get(i).x*cordinateList.get(i).x+cordinateList.get(i).y*cordinateList.get(i).y; 
    if(temp<min){ 
     min=temp; 
    } 
} 

내가해야 할 일 : cordinateList 모두 매우 비효율적이며 내 프로그램은 주어진 시간에 작업을 수행 실패에 너무 거리를 찾는 매우 크기 때문에

내 접근이 가능하지 않습니다 .

광산과 제안보다 효율적인 알고리즘이 있습니까?

업데이트 : 빨간색 점은 한 번에 하나씩 약 백만 번 있습니다. 파란색 점 목록은 고정되어 있습니다. 그래서 필자는 필요하다면 정렬과 같은 청색 포인트 목록에 초기 변경을 할 수 있다고 생각한다.

감사합니다.

+0

모든 포인트에 대해 보로 노이 다이어그램을 준비한 다음 검사 지점이 어느 지역에 속하는지 확인하십시오 – mangusta

+0

좌표가 목록에서만 사용 가능하고 목록의 어느 지점 에나 좌표가 나타날 수있는 경우 상당한 개선이 없습니다. 거리를 계산할지, 목록을 정렬 할 지 등리스트의 각 포인트를 항상 살펴야하기 때문에 만들어 질 수 있습니다. 좌표 포인트에 어떤 패턴이 있다면,이를 활용할 수도 있습니다. 거기 있니? –

+0

좌표 목록은 어떤 식 으로든 정렬됩니까? 예를 들어, x 축 값으로 정렬? – jaket

답변

2

간단히 포인트 목록이 있고이 작업을 한 번 수행해야하는 경우 더 효율적인 방법은 없습니다.

그러나 많은 다른 점에 대해이 절차를 여러 번 수행해야한다면 효율성을 향상시킬 수있는 방법이 있습니다. 예를 들어

그러나 이러한 접근 방식은 심지어 휴식을 취하기 전에 여러 조회 (즉, 가장 가까운 지점 찾기 계산)를 통해 상환해야하는 설정 오버 헤드를 필요로합니다.

+0

고맙습니다. Google지도 API에서 가장 가까운 마커에 매핑 할 수 있다고 들었습니다. 그래서 효율적인 알고리즘이 있다면 광산에 사용할 수 있습니다. – user3693167

+1

[kd-trees] (http://en.wikipedia.org/wiki/Kd-tree)가이 특정 문제에 가장 적합 할 수 있다고 생각합니다. . –

+0

@MikePedersen 감사합니다. 참조하시기 바랍니다 – user3693167

0

솔루션은 계층 적 트리입니다. 덴도 그램 또는 계층 적 클러스터. clusterfck JS 라이브러리를 사용할 수 있습니다.

관련 문제