A 지점과 B 지점 사이의 최단 거리


9

두 세트 감안 와 각각 포함하는 면에서 분리 된 지점에서, A 지점 사이의 최단 거리를 계산 과 점을 , 즉 . { 거리(,) |  }

내가 옳은지는 잘 모르겠지만,이 문제는 계산 기하학의 선형 프로그래밍으로 해결할 수있는 문제와 매우 유사합니다. 그러나 LP 로의 축소는 간단하지 않습니다. 또한 내 문제는 2 차원 공간 에서 O (n)의 LP로 해결할 수있는 두 세트의 점 사이에서 가장 얇은 팁을 찾는 것과 관련이 있습니다 영형().


4
여기서 질문이 무엇입니까?
Raphael


나는 전문가가 아니지만 일반적으로 머신 러닝 분야 에서이 점이 데이터 인 경우 세트는 대부분 잘 작동하고 그룹화되므로 @Pedro가 제안한 것과 같은 알고리즘이 잘 작동합니다.
chazisop 2016 년

3
"이것은 분명히 2 차원 공간에서 O (n)의 LP에 의해 해결 될 수 있습니다." "선형 프로그래밍"은 일반적으로 선형 시간으로 해결할 수 없습니다. "선형"은 다른 것을 의미합니다. LP는 특별한 형태를 가지고 있습니까?
Raphael

답변:


5

약간 복잡한 것처럼 보일 수있는 솔루션이 있지만 순진한 무차별 검색 보다 효율적이어야합니다 .O(n2)

  1. 를 질량 중심 와 사이의 축 이라고하자 .vAB
  2. 이 축을 따라 와 의 점을 각각 내림차순과 오름차순으로 정렬하여 시퀀스 , , ..., 및 , , ..., 합니다.ABa0a1anb0b1bn

나머지는 의사 코드로 명확하게합니다.

d = infinity.
for j from 1 to n
    if (b_1 - a_j) along v > d then break endif
    for k from 1 to n
        if (b_k - a_j) along v > d then
            break
        else
            d = min( d , ||b_k - a_j|| )
        endif
    enddo
enddo

즉함으로써, 따라 포인트를 미리 정렬 , 당신이 내 없을 것 쌍 필터링 할 수 있습니다 있기 때문에 서로를 함께 항상있을 것입니다.vdbkajv케이제이

더 나쁜 경우 이것은 여전히 이지만 와 가 잘 분리되어 있으면 그보다 훨씬 빠르지 만 보다 빠르지 않아야 합니다. 정렬을 위해.영형(2)영형(로그)

최신 정보

이 솔루션은 결코 모자에서 뽑아지지 않습니다. 파티클 시뮬레이션에서 공간 비닝과 상호 작용하는 모든 입자 쌍을 찾기 위해 사용하는 특별한 경우입니다. 더 일반적인 문제를 설명하는 내 자신의 작업이 여기 있습니다 .

수정 된 라인 스윕 알고리즘을 사용하라는 제안은 직관적으로 간단하지만 분리 세트를 고려할 때 이것이 임을 확신하지 못합니다 . Rabin의 무작위 알고리즘도 마찬가지입니다.영형(로그)

이 개별 세트에서 가장 가까운 쌍의 문제를 다루는 많은 문헌 될 것 같지 않습니다,하지만 난 찾은 아래에있는에 청구 할 수없는, , 그리고 , 보이지 않는를 어떤 것에 대한 주장을합니다.영형(2)

위의 알고리즘은 첫 번째 논문 (Shan, Zhang 및 Salzberg)에서 제안 된 평면 스윕의 변형으로 볼 수 있지만 축을 사용하고 정렬하지 않고 세트 사이의 축을 사용하고 세트를 순회합니다. 내림차순 / 오름차순으로엑스


2
@ 페드로 : 죄송합니다 (이 시간에) 이전에 언급하지 않았습니다. 내가 당신의 대답을 하향 표명 한 이유는 그것이 나쁜 대답이었고 최상위에 있지 않아야했기 때문입니다. 이것은 실제로 최악의 경우 O (n log n)의 계산 기하학에서 잘 알려진 문제입니다. 좋은 대답은 알려진 문제 (참조가있을 수도 있음)와 kd 트리 사용 및 요소 별 테스트, 스윕 알고리즘 등을 포함한 일반적인 솔루션을 지적했을 것입니다. 일반적인 아이디어는 순서가 지정된 구조로 사전 처리하고 사용해야합니다. . 1D 사례를 살펴보십시오. 더 분명한 O (n log n)가 있습니다.
ex0du5 2016 년

2
@ ex0du5 : 마치 자신의 답변을 게시해야하는 것처럼 들립니다! "더 나은 답변이 있습니다"는 일반적으로 다운 보팅에 대한 적절한 이유가 아닙니다. 이 측정은 잘못된 스팸 및 형식이 잘못된 답변을 위해 예약되어야합니다. 페드로도 마찬가지입니다. downvote 전에 어떤 사람들이 생각해야한다고 생각하는 인상에 대해서는 여기 를 참조하십시오 .
Raphael

1
@Raphael : 하나의 공정한 답변이 있었고 답변을 찾을 시간이 없었기 때문에 답변하지 않았습니다. downvote하는 방법에 대한 귀하의 참조에 관해서는, 이러한 사이트에 대한 끔찍한 알고리즘입니다! CS 학생들은 특히 형식주의 목표를 잃지 않는 것의 중요성을 이해해야합니다. 투표의 목표는 같은 문제의 후반 학생들에게 가장 유용한 답변으로 안내 할 순위로 답변을 옮기는 것입니다. 투표 알고리즘이 그렇게합니다. 그 알고 : 분명히 아닙니다. 원한다면 메타에 대해 논의 할 수 있지만, 성인은 우리의 힘을 잘 활용해야한다고 생각합니다.
ex0du5 2016 년

1
@ ex0du5 : 당신은 지금 당신의 손에 약간의 시간이있는 것 같습니다. 실제로이 인스턴스가 실제로 "최악의 경우 잘 알려진 문제"임을 보여 줄 수 있습니까 ? 영형(로그)
Pedro

1
@ ex0du5 : 사실, 가장 가까운 이웃 검색, 예를 들어, 사용 KD 나무 ,이 단지 평균 복잡도 O (logn)를 . 다시 정사각형으로 돌아 왔습니다.
Pedro

4

"가장 가까운 쌍" 라인 스윕 알고리즘 인 적용 할 수 있습니다 .영형(로그)

동일한 세트에 속하는 쌍을 무시하는 것이 유일한 변경입니다.

편집 : 이것은 실제로 설명한 것처럼 간단하지 않습니다. 토론 의견을 참조하십시오.


2
간단히 말해서 에서 실행되는 가장 가까운 쌍에 대해 클래식 나누기 및 정복 알고리즘을 조정할 수도 있습니다 . Wikipedia 도 참조하십시오 . O(nlogn)
rizwanhudda 2016 년

1
무작위 선형 시간 알고리즘에 대해서는 Lipton의 블로그에서 Rabin Flips a Coin 을 참조하십시오 .
Juho

3
특히 바운드 를 유지하는 것과 관련하여 분리 세트에 대해 이것을 구현하는 방법에 대해 좀 더 구체적으로 설명해 주 시겠습니까? 영형(로그)
Pedro

부정확 한 경우 -1 가장 가까운 페어 라인 스윕 알고리즘은 요소를 포함하는 정렬 된 세트에 의존 하지만, 분리 된 세트의 경우이 세트는 요소를 포함하기 시작 하므로 더 이상 에 없습니다. 최악의 경우는 아닙니다. O(1)nO(nlogn)
Pedro

1
@Pedro : 왜 더 클까요? 현재 후보 포인트 세트가 줄어들어야합니다.
Raphael

4

이와 같은 문제에 대한 아이디어는 가장 가까운 이웃을 효율적으로 쿼리 할 수있는 집합 중 하나에서 정렬 된 구조를 만드는 것입니다. 임의의 차원에 대한 O (log n) 쿼리 구조를 제시 한 고전 논문은 다음과 같습니다.

Voronoi 솔루션의 Shamos 및 Hoey

Delauney 테셀레이션의 아이디어를 기반으로하는 다른 많은 공간 파티션이 그 이후로 만들어졌으며 다양한 하위 공간 스윕 설명으로 변환됩니다. Voronoi 방법은 구성 단계 O (n log n)를 만드는 평면 파티셔닝으로 인해 일반적인 분할 및 정복 설명에 속합니다.

따라서이 문제에 대한 기본 해결책은 다음과 같습니다.

  1. A 세트를 선택하여 원하는 가장 가까운 이웃 쿼리 구조를 작성하십시오. 이 구성 단계는 O (n log n)이다 [정리 4 참조].
  2. B의 각 요소에 대해 가장 가까운 이웃에 대한 구조 A를 쿼리하십시오. 각 쿼리는 O (log n) [정리 15, 고정 차원 참조]이므로 B의 모든 점에 대한 총 쿼리 시간은 O (n log n)입니다.
  3. A에서 각 B까지 가장 가까운 점에 대한 결과를 검색 할 때 거리 순서대로 배열하십시오. 이것은 O (log n) 각 결과를 삽입하거나 모두 O (n log n)를 삽입합니다.
  4. 모든 B를 살펴보면 A에서 한 점까지의 이웃 거리가 가장 작은 순서 구조의 점 B를 신속하게 (O (1)) 얻을 수 있습니다.

각 단계의 복잡성을 보면 알 수 있듯이 총 복잡도는 O (n log n)입니다. 고전 논문을 보지 않는 현대 독자의 경우, 이것은 Skiena의 "알고리즘 디자인 매뉴얼"과 같은 많은 알고리즘 책에서 다룹니다.


1
예를 들어 Artium의 솔루션은이 형식으로 작성 될 수 있으며 완전히 유효합니다.” 자, 여기서 제안하는 것은 더 이상 (순수한) 스위프 라인 알고리즘이 아니기 때문에 이에 대해 모르겠습니다.
Raphael

@Raphael : 물론입니다. 스윕 라인 알고리즘은 여기에 설명 된대로 점을 순서가 지정된 구조로 사전 처리합니다. 나는 그의 대답에 따라 Fortune의 알고리즘에 링크했습니다. 스윕 라인 알고리즘은 Voronoi 알고리즘의 인스턴스 일뿐입니다. 솔루션을 쿼리 구조에 일반적으로 유지 한 이유는이를 위해 개발 된 수많은 기하학적 메커니즘이 있기 때문입니다.
ex0du5 2016 년

반복하는 동안 특정 주문이 필요하지 않습니다. 순서는 (다수 / 모두?) 스위프 라인 알고리즘에 필수적이지만 (따라서 이름은 추측합니다).
Raphael

1

내가 옳은지는 잘 모르겠지만,이 문제는 계산 기하학의 선형 프로그래밍으로 해결할 수있는 문제와 매우 유사합니다. 그러나 LP 로의 축소는 간단하지 않습니다. 또한 내 문제는 2 차원 공간에서 LP로 해결할 수있는 두 세트의 점 사이에서 가장 얇은 팁을 찾는 것과 관련이 있습니다.

이 문제의 하한은 영형(로그)대수 의사 결정 트리 모델에서. 나는 여기에 그 증거의 대략적인 스케치를 줄 것이다.

요소 구별 문제 E의 인스턴스를 C로 줄입니다.

  • E로 입력 : 에스={1,2,,...,}
  • 허락하다 ϵ > 0은 작은 분수입니다
  • A = {(나는,0):1나는}, ={(나는+ϵ):1나는}
  • 이제 세트 A와 B 사이의 최단 거리 (d)를 찾을 수 있다면 요소 구별 문제를 추가로 결정할 수 있습니다 영형() 다음과 같은 시간
    • 세트 에스 d = 경우에만 복제본이 있음 ϵ

요소 구별 문제를 결정하기위한 런타임의 하한은 영형(로그). 따라서 하한을 줄임으로써 우리의 문제에도 적용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.