2013-02-01 2 views
1

속성 (속성)이 6-7 인 메모리 개체 목록 (약 50000-100 만 개)이 있습니다.여러 속성에 대한 빠른 메모리 내 검색

이 요구 사항은 메모리 내 목록을 여러 속성으로 필터링하는 것입니다. 선형 검색을 사용하면 목록에서 O (N) 검색을 수행 할 수 있습니다. 일반 목록보다 더 나은 데이터 구조로이를 수행하는 더 빠른 방법이 있습니까?

C# .NET 4.0을 사용하고 있습니다. http://blog.bodurov.com/Performance-SortedList-SortedDictionary-Dictionary-Hashtable/

는 검색이가는대로 SortedDictionary가 가장 좋은 건 수 있습니다 같다하지만 당신은 여러 속성으로 검색을 원하기 때문에 당신이 검색 사이의 균형을하려면이 너무 떨어 :

+0

속성 컬렉션은 각 요청마다 항상 동일하거나 다를 수 있습니까? –

+0

당신은 정확한 일치 또는 다른 어떤 종류의 검색으로 "substring" "greater" "lesser"등의 검색을 필요로합니까? –

+0

@ 토나 : 다를 수 있습니다. – ganeshran

답변

0

최저 나는 제안 할 수 있습니다 : 당신이 검색 할 때 필요한 각 속성에 대한

  1. 만들기 사전 (별도의 사전이)
  2. 은, 최소한의 크기
  3. 을 중 하나 개 선택 목록을 별도로 하나를 각각 필요한 사전을 조회 최소 크기 목록 반복하기

중복 값이 ​​큰 속성 값의 경우이 방법이 매우 유용합니다. 그러나 각 속성에 많은 중복이있는 경우이 접근법은 매우 나쁩니다.

가능한 개선 : 사전 가능한 정렬로 각 목록 및 속성 중 하나에 의해 이진 검색에 대한 사용 후.

+0

많은 중복이있을 것입니다 속성 값에 :(이 접근법은 큰 교차로 때문에 O (N)보다 느려지 게 될 수도 있습니다. – ganeshran

+0

교차로가 없으면 좋습니다 .3 단계를 읽으십시오. 최소한의 목록 만 선택하고 반복하십시오. –

0

불과 몇 초 전 나는이 읽기 그 대용량의 데이터를 삽입하면 SortedList 메모리 사용 비용으로 더 나은 결과를 얻을 수 있습니다.

+0

삽입 할 필요가 없습니다. 데이터는 정적이며 변경되지 않습니다. O (N) – ganeshran

+1

@ganeshran보다 빠른 검색이 필요합니다. SortedList를 시도해보십시오. O (1) – dutzu

+0

정렬 된 목록의 경우 여러 속성을 정렬하려면 어떻게해야합니까? 하나의 속성을 정렬하면 나머지 데이터는 정렬되지 않습니다 – ganeshran

1

그런 다음 목록에서 빠른 검색을 수행하면 개체의 모든 필드 (들)에 인덱스를 추가 할 수 있습니다이 라이브러리를 http://indexedlist.codeplex.com/ 에서 다운로드 할 수 있습니다 IndexedList, 라는 이름의 도우미 라이브러리를 사용할 수 있습니다. 기본 색인 구현은 색인 데이터를 저장하기 위해 사전을 사용하므로 변경할 수도 있습니다. 나는 내 자신의 프로젝트를 위해이 라이브러리를 생성했다. 그런 다음 이것을 오픈 소스 프로젝트로 새로 출판했다. 이 라이브러리에 대한 귀하의 의견을 기쁜 마음으로 알려드립니다.

관련 문제