저는 자바로 프로그래밍을하고 있습니다. 나는 이름, 나이, 무게와 같은 속성을 가진이 객체 person 클래스를 가지고 있습니다. 그리고 사람들을 내 애플리케이션에 저장하고 검색 할 수 있어야합니다. 이제는 이름, 나이, 무게로 검색 할 수 있습니다 ... 그 사람의 모든 속성. 이 작업을 효율적으로 수행 할 수있는 최상의 데이터 구조/구현은 무엇입니까?다른 속성에 따라 객체를 다른 방법으로 검색하려면 어떤 데이터 구조를 사용해야합니까?
답변
최종 목표는 무엇입니까? 다른 사람들 사이의 추세를보고 싶다면 R이나 Python PANDAS를 사용하는 것이 좋습니다. 그렇게하면 여러 속성을 기반으로 그룹/개인을 신속하게 조회, 비교 및 시각화 할 수 있습니다.
여러 가지 검색 가능한 옵션을 사용하여 Java로 응용 프로그램을 만들고 싶지만 공간에 대해별로 신경 쓰지 않는다면 여러 해시 테이블을 사용할 것입니다. 각 해시는 다른 속성에 해당합니다. 배열의 값을 사람을 가리키는 포인터로 지정하십시오. https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
K는 귀하의 속성 (나이, 성별 등)이며 V는 사람들을 가리키는 포인터입니다.
K-D tree은 좋은 선택입니다. 다차원 데이터 (여러 속성이있는 객체)를 분할하고 O (logN) 검색 복잡성과 같은 이진 검색 트리를 활성화합니다. 그러나 이것은 주요 변종에 대한 수정이 거의 필요하지 않습니다.
아직 모르는 경우 먼저 읽으십시오. 이제는 K-D 트리가 정확히 "Given name="John Doe",find the guy"
종류의 쿼리를 허용하지 않습니다. 대신 허용되는 것은 "given this entire John Doe guy, find who is *closest* to him"
입니다.
트리의 모든 수준에서 해당 수준의 해당 차원을 기반으로 왼쪽 또는 오른쪽 하위 트리를 선택합니다. 하지만 첫 번째 쿼리에서는 한 차원을 제외한 모든 차원의 데이터가 null입니다. 따라서, 검색을 위해서는 어쨌든 한 차원을 제외하고는 모두 특수 더미 데이터를 사용하여 입력 개체를 만듭니다. 검색 기능에서 이러한 특수 데이터가 발생하면 두 하위 트리에서 모두 검색을 수행합니다. 친밀감 대신 K-D 나무와 달리 정확한 일치를 확인할 수 있습니다.
소량의 데이터를 처리하는 경우이 데이터 구조의 효과를 볼 수 없습니다. 흥미롭게도, 하나 이상의 속성 (예 : "given age=20 and name = "John", find the guy(s)"
)을 검색하면 검색 속도가 훨씬 빨라집니다.
메모리가있는 SQL 데이터베이스. – tsolakp