반경 내에서 주택 찾기


10

인터뷰 중에 나는 다음과 같은 질문을 받았다 : 주어진 거리 내에서 현재 시장에 나와있는 (즉, 판매중인) 모든 주택을 나열하는 부동산 응용 프로그램 (예 : 사용자가 20 마일 이내에 모든 주택을 찾고 싶어 함), 이러한 유형의 서비스를 구축하기 위해 애플리케이션 (데이터 구조 및 알고리즘 모두)을 어떻게 설계 하시겠습니까?

어떤 아이디어? 어떻게 구현하겠습니까? 나는 그 전에 지리적 관련 작업을 한 적이 없기 때문에 몰랐다고 말했습니다.

답변:


6

아마도 공간 인덱싱에 대한 답을 얻은 후 아마도 공간 인덱싱을 즉시 제공 하는 데이터베이스를 선택하여 가능성이 높지만 필요할 경우 응용 프로그램 자체에서 구현 할 수 있다고 언급하면 ​​몇 가지 포인트를 얻을 수 있습니다 (예 : R 구현). -Tree (다른 이유로 DB 선택이 수정 된 경우 편리합니까? 공간 데이터베이스의 작동 방식을 보여줍니다). 공간 색인을 사용하면 검색 창에 맞는 위치의 하위 집합을 신속하게 얻을 수 있습니다. 실제 검색을 수행하기 위해 실제 거리 (필요한 경우 사각형만으로도 충분할 수 있음)를 계산하여이를 세부적으로 조정할 수 있습니다. 원 / 타원

거리가 20M 이하일 가능성이 높다면 20M 끝쪽에 눈에 띄는 오류가 표시되기 시작하지만 거리를 계산하기 위해 평평한 지구를 가정하면 괜찮을 것입니다. 더 큰 범위가 정확하게 필요하면 더 나은 거리 모델을 살펴볼 필요가 있습니다. 지구를 위해 예. Haversine distance

물론 UI 디자인, DB 스키마, 그 자체로 전체 주제가 될 수있는 DB 스키마와 같이 논의 할 수있는 무수한 다른 세부 사항도 있습니다.


20 마일에서 평평한 지구 모델로 인한 오류는 무시할 수 있습니다. 어쨌든 사용자가 사무실에서 20 마일 이내에있는 집 목록을보고자 할 때 20 마일과 10 야드 떨어진 집이 결과에 포함되는지는 상관하지 않습니다.
케빈 클라인

1
실제로, 오 탐지가 중요하지 않은 경우 실제 거리 계산을 완전히 건너 뛰고 MBR
jk를

궁금한 점은 판매용 주택이 많기 때문에 Zillo와 같은 회사는 모두 DB에 저장하고 계속 선택하는 것입니까? 나는 그것이 큰 성과를 거둘 것이라고 생각하고 그래프 또는 표현과 같은 그래프 표현으로 모든 것을 메모리에 저장하고 거리 알고리즘을 사용하여 가장 가까운 집을 찾는 것이 훨씬 빠릅니다. 어떻게 생각해?
paul smith

@ paulsmith 모르겠지만 공간 DB에 있다고 생각합니다. 공간 DB는 아마도 내부적으로 그래프 표현을 사용할 것입니다 (대부분 논의 된 R-Tree이지만 다른 옵션이 있습니다). 처음부터 최소 경계 사각형의 항목 만 선택할 수 있습니다
jk.

8

이와 같은 질문에 직면 할 때마다 문제 영역에 대한 전문 지식이없는 경우 몇 가지를 수행하는 것이 좋습니다.

먼저이 문제 영역에 대한 전문 지식이 없음을 인정하십시오.

둘째 , 문제 해결 방법에 대해 설명하십시오.

지리적 검색 작업을 수행 할 때 특정 경험이 없지만 문제를 해결하기위한 문서화 된 알고리즘과 기존 기술이 있다고 확신합니다. 나는 이것들을 탐색하여 나에게 제공되는 일반적인 솔루션에 대한 지식을 얻고 프로젝트의 요구 사항을 기반으로 구현에 대한 선택을 할 것입니다.

셋째 , 항상 이와 같은 문제를 기본 구성 요소로 줄입니다. 지도의 위치는 2 차원으로 분포되어 있습니다. 임의의 x, y 좌표가 주어지면 다른 좌표에서 각 좌표까지의 거리는 삼각형을 형성하고 알 수없는 길이를 푸는 것으로 계산됩니다. 바운딩 박스 내에서 모든 좌표를 찾도록 요청받은 경우, 원하는 박스의 범위를 계산하고 두 축을 따라 로직보다 작은 것보다 작은 것보다 간단한 것을 사용하여 간단히 할 수 있다는 것을 알고 있습니다.

마지막으로 , 나는 질문 을 포기 하는 것처럼 보이는 개발자를 고용 한 적이 없습니다 . 질문을하고 그 사람이 "모르겠다"고 말하고 그것을 구두로 생각조차하지 않으면 소프트웨어 브레인 스토밍 세션에 기여하지 않을 것이라는 인상을줍니다. .


모든 좋은 조언
jk.

@Ben, 나는 당신이 언급 한 모든 것에 동의합니다.하지만 면접관은 세션이 시작되기 전에 당신이 모른다고 말하는 것이 좋다고 명시 적으로 말했기 때문에 방금 그의 지시를 따랐으며 나는 모르고 있다고 말했습니다. )
Paul Smith

4

이것은 아마도 분명하지만 많은 응용 분야에서 가난한 사람의 느린 해결책은 괜찮을 것입니다.

위도와 경도를 저장하는 관계형 데이터베이스에 테이블이 있습니다. 위도 20 마일, 경도 20 마일 이내에있는 모든 위치를 쿼리하십시오. 이렇게하면 검색하려는 반지름이 포함 된 가장 작은 경계 사각형의 크기로 경계 사각형이 제공되며 지구의 곡률도 무시됩니다.

그런 다음 (인덱스를 사용하는 쿼리에 의해) 반환 된 세트를 가져 와서 정확한 거리 계산을 사용하여 필터링합니다.

따라서 효율적인 성능은 아니지만 개발 시간이 매우 효율적입니다. 더 나은 선택이 될 수있는 많은 응용 프로그램의 경우.


2

아마도 가장 쉬운 방법은 4D 트리 를 사용 하여 집의 위치를 ​​저장하는 것입니다. 검색은 매우 간단해야합니다.

GIS 가능 RDBMS를 사용하여 물건을 저장하는 경우 실제로 걱정할 필요가 없습니다. 리드 플레이어의 성능에 대한 정보는 이 질문 을 참조하십시오 .

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