위도, 경도 및 시간대의 세 부분으로 구성된 매우 긴 반 정렬 목록이 있습니다. 주어진 위도와 경도에 가장 가까운 시간대를 찾기 위해이 목록을 빨리 검색 할 수 있기를 원합니다. 그래서이 목록을 KD 트리로 만들고 싶습니다.어떻게이 KD 트리를 만들 수 있습니까?
저는 전체 파일을 먼저 어떤 종류의 데이터 구조 (어떤 데이터 구조입니까? 아마도 ArrayList<Triplet<Double, Double, String>>
?)로 읽어야한다고 생각합니다. 그런 다음 그 구조의 중간 요소를 가져 와서 루트로 만들고 왼쪽 및 오른쪽 목록을 남겨 둡니다. 그런 다음 각 목록의 중간 요소를 계속 가져 와서 왼쪽 또는 오른쪽 자식으로 추가하십시오.
이것에 첫번째 시도는 느리고 비효율적 인 것처럼 보였다 ... 그러나 나는 그것을 잘못한 것처럼 느낀다. 당신이 알고리즘이나 의사 코드를 제공해 줄 수 있습니까?
KDTree에 궁금한 점이 있으면 알려주십시오. 여전히 느리고 비효율적이라면 알려주십시오. 나는 호기심있다! – Justin
구현을 Java-ML (http://java-ml.sourceforge.net/)의 KDTree 구현과 비교 했으므로 k 개의 가장 가까운 이웃을 추출하는 속도가 훨씬 느립니다. 귀하의 인터페이스가 더 멋지 네요 :) –
또한, 여기에 더 빠른 구현이 있습니다 : http://robowiki.net/wiki/Kd-tree#Implementations –