2009-06-02 4 views
0

나는 지리적 관계를 표현하고 검색하는 효율적인 방법을 찾고있다. 지구 -> 주 -> 미국. 이것은 예를 들어 모든 계층 구조를 수용해야합니다. 지역 -> 지역 -> 주 -> 큰 지역 (동/서/남/북) -> 미국. 너무 빨리 최우선해야 그들 모두를 얻기 -지구를 대표하는 효율적인 데이터 구조 -> 국가 -> 국가 관계

내 요구 사항은 내가 주로 가장 낮은 수준에서 작동

  1. 있습니다. 일정한 시간이 선호됩니다.
  2. 그런 다음 국가 수준에서 집계 eg.combine 지구 데이터를 손쉽게 수행하여 노드의 모든 하위 항목을 쉽게 가져 오려고합니다. 이것이 두 번째 기준입니다.
  3. 수준의 주문은 중요하지 않습니다. 노스 캐롤라이나의 경우, 처음 Raleigh 나 Fayetville을 얻는 것은 괜찮습니다. 당신은 거의 짐작했듯이

- 한 트리 자료 구조는 논리적으로 문제에 빌려 준다. 그러나 모든 잎을 효율적으로 얻을 수있는 방법을 찾지 못했습니다. O (log n) 시간에 노드가 잎인지 확인할 수 있지만 각 노드에 대해 확인합니다.

나는 B, B + 나무를 보았지만, 내가 이해하지 못했던 것은 오름차순이나 내림차순 같은 순서를 사용하여 순서를 유지한다는 것입니다.

윈도우 나 파일 시스템이이 작업을 수행하기 때문에 필자에게는 실용적인 해결책이 있어야한다. 파일 -> 폴더 -> 큰 폴더 -> C -> 내 컴퓨터. 또한 이러한 종류의 계산은 데이터 마이닝에서 클러스터링 (클러스터링)을 수행 할 때 수행해야합니다. (이 종류의 것을 읽은 적이 있습니다.)

이 방향의 모든 리드는 인정 될 것입니다.

감사

+0

구조와 관련하여 정확히 설명하는 것이 더 구체적 일 수 있습니까? 귀하의 # 1은 완전히 명확하지 않습니다. Welbog가 말했듯이, 일정 시간 안에 n 개의 항목을 검색 할 수는 없습니다. 그리고 당신의 "노드 체크는 O (log n)에서 리프입니다"는 것은 리프에서 루트까지 직접적인 집계가 아닌 다른 일을한다는 것을 의미합니다. –

+0

n 개의 항목이 이미 캐시 된 모음에 저장되어 있으면 n 개의 항목을 일정 시간에 검색 할 수 있습니다. 이는 노드의 모든 하위 항목에 대한 일반적인 경우에 적합 할 수 있습니다 (예 : 아래 내 대답을 참조하십시오. – mikera

답변

1

당신은 (주어진 노드 아래에있는 계층 구조의 특정 수준에서이 경우 모두에서) 주어진 기준에 일치 n 고유 항목을 검색에 대해 얘기하고. 가능한 모든 기준을 사전 계산하지 않으면 일정 시간 내에 데이터 구조에서 n 개의 고유 항목을 가져올 수 없습니다. 최소한 n 개 항목을 반복해야합니다.

다양한 유형의 사용을보다 효율적으로 만들 수있는 많은 데이터 구조 및 데이터 구조 조합이 있습니다. B와 B + 나무가이 상황에서 잘 작동한다는 것은 맞습니다. 그래서이 응용 프로그램에 관계형 데이터베이스를 사용하는 것이 좋습니다. 왜냐하면이 트리는 가장 훌륭하고 강력한 B- 트리 구현이기 때문에 가능한 것입니다. 찾다. 일치하는 리프 노드와 컴퓨팅 집계는 거의 그대로입니다. RDBMS 서브 시스템을 사용하지 않는 특별한 이유가 없으면 이것이 최선의 방법 일 것입니다.

+0

RDBMS에서이 값을 검색하고 있는데, 내가 찾고있는 것은 효율적으로 compuatations를 수행하는 코드 구조입니다. – satyajit

+0

이러한 계산을 효율적으로 수행하기위한 구조를 "SQL"이라고합니다. 그것이 바로 그 때문입니다. 필요한 SQL을 사용하여 관리 할 수없는 특정 항목이 있습니까? – Welbog

+0

SQL은 매우 유용하고 일반적인 목적이지만 괜찮은 메모리 내 데이터 구조에 비해 원격조차 효율적이지 않습니다. 예를 들어 동적으로 결정된이 데이터 집합의 하위 집합을 50FPS로 렌더링하는 것이 좋습니다. – mikera

0

각 노드에 포함 된 노드의 트리를 만들기 :

  • 자식 노드 (루트 노드는 null)는 부모 노드의 포인터
  • 모음 (예 : HashMap의 또는 자바의 ArrayList) 노드와 관련된
  • 모든 데이터 페이로드 (당신이 거리 검색을 수행 할 수 있도록 예를 들어, 지리 좌표)

당신이 문자열의 AA HashMap의 인덱스와이를 보강 할 수 있습니다 좋아하는 경우 -> 노드에 대한 O (1) 액세스를위한 노드.그러나이 문제의 경우 트리 검색 비용에 대해 걱정할 필요가 없습니다. 최대 5-10 개의 레벨을 가질 가능성이 높지 않기 때문입니다.