2013-12-09 2 views
3

바이너리 트리 구현과 같은 고성능 조회 기능이있는 .Net의 최상의 데이터 구조는 무엇이지만 키 (문자열 키) 만 저장하면됩니까?키만 저장하는 최상의 조회 데이터 구조

컬렉션에 특정 키가 있는지만 확인하면됩니다. 같은

Dictonary<string, object> myKeys; 
myKeys.Add("key1", null); 
myKeys.Add("key2", null); 
// Dozens or hundreds keys 

Assert.IsTrue(myKeys.Contains("key1")); 

답변

12

HashSet (System.Collections.Generic 내)

HashSet의 독특한 요소를 포함하는 순서화 된 집합이다. 그것은 표준 컬렉션 작업 추가, 제거, 포함하고 있지만 이후 해시 기반 구현을 사용하여, 이러한 작업은 O (1) 있습니다.

HashSet<int> evenNumbers = new HashSet<int>(); 
    HashSet<int> oddNumbers = new HashSet<int>(); 

    for (int i = 0; i < 5; i++) 
    { 
     // Populate numbers with just even numbers. 
     evenNumbers.Add(i * 2); 

     // Populate oddNumbers with just odd numbers. 
     oddNumbers.Add((i * 2) + 1); 
    } 

    if (evenNumbers.Contains(2)) 
    { 
     Console.WriteLine("2 is even."); 
    } 
+0

HashSet의 문서 (http://goo.gl/wu9xlh) 그냥은 "값의 집합"말한다, 말에 더 아무것도에 대해 아무것도 알고리즘 이름으로 "해시 기반"으로 구현을 가정 할 수 있지만 구현이 잘된다면 O (1) 일 수 있습니다. 이유는 무엇입니까? 이것을 얻고 확신하는 법? 분해 하시겠습니까? – Luciano

+1

@ Luciano : [HashSet.Add] (http://msdn.microsoft.com/en-us/library/bb353005.aspx) 및 [HashSet.Contains] (http://msdn.microsoft .com/ko-us/library/bb356440.aspx) (및 나머지 메소드)에는 알고리즘의 복잡성을 설명하는 내용이 있습니다. 특히 내부 배열의 크기를 조정할 필요가없는 한'Contains'는 O (1)이고'Add '는 O (1)입니다. –

+0

@JimMischel : 확산되지만 확실합니다. 도와 줘서 고마워. – Luciano

관련 문제