2017-11-13 3 views
1

저는 자바로 프로그래밍을하고 있습니다. 나는 이름, 나이, 무게와 같은 속성을 가진이 객체 person 클래스를 가지고 있습니다. 그리고 사람들을 내 애플리케이션에 저장하고 검색 할 수 있어야합니다. 이제는 이름, 나이, 무게로 검색 할 수 있습니다 ... 그 사람의 모든 속성. 이 작업을 효율적으로 수행 할 수있는 최상의 데이터 구조/구현은 무엇입니까?다른 속성에 따라 객체를 다른 방법으로 검색하려면 어떤 데이터 구조를 사용해야합니까?

+0

메모리가있는 SQL 데이터베이스. – tsolakp

답변

0

최종 목표는 무엇입니까? 다른 사람들 사이의 추세를보고 싶다면 R이나 Python PANDAS를 사용하는 것이 좋습니다. 그렇게하면 여러 속성을 기반으로 그룹/개인을 신속하게 조회, 비교 및 ​​시각화 할 수 있습니다.

여러 가지 검색 가능한 옵션을 사용하여 Java로 응용 프로그램을 만들고 싶지만 공간에 대해별로 신경 쓰지 않는다면 여러 해시 테이블을 사용할 것입니다. 각 해시는 다른 속성에 해당합니다. 배열의 값을 사람을 가리키는 포인터로 지정하십시오. https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

K는 귀하의 속성 (나이, 성별 등)이며 V는 사람들을 가리키는 포인터입니다.

1

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)")을 검색하면 검색 속도가 훨씬 빨라집니다.