C# .NET에서 조회 용 O (1) 시간 복잡성으로 인해 HashSet을 사용하는 것이 좋습니다. 질의를 할 많은 양의 데이터가 있다면, 나는이 시간 복잡성을 가지고 있기 때문에 종종 List에 HashSet을 사용하는 것을 선호합니다.HashSet <T> (IEqualityComparer <T>)의 조회 시간 복잡도는 얼마입니까?
은 무엇 나를 혼란스럽게하는 것은 인수로 IEqualityComparer 걸리는 HashSet에 대한 생성자입니다 : 위의 링크에서
http://msdn.microsoft.com/en-us/library/bb359100.aspx
의 발언은 "생성자는 O (1) 연산입니다 있습니다 "그러나 이것이 사실이라면 조회가 여전히 O (1)인지 궁금합니다.
특히, 내가 Comparer을 작성하여 HashSet의 생성자에 전달하면 조회를 수행 할 때마다 Comparer 코드를 모든 키에 대해 실행해야합니다. 일치하는 것이 있는지 확인하십시오. 이것은 O (1)가 아니라 O (n)입니다.
요소가 컬렉션에 추가 될 때 구현이 내부적으로 조회 테이블을 생성합니까?
일반적으로 .NET 데이터 구조의 복잡성에 대한 정보를 어떻게 확인할 수 있습니까?
다양한 입력 크기로 테스트하고 조회 시간이 일정하게 유지되는지 확인하십시오. 그러나 설명서가 맞는지 확실히 확인하십시오. –
생성자가 끝나면 여전히 * HashSet입니다. 원본 데이터 구조 자체는 유지되지 않습니다 (예 :이 경우 '프록시'가 없음). 조회는 O (1)이지만 삽입은 * amortized * O (1)입니다. –
@Kirby 변경되지 않습니다. IEnumerable에서 HashSet을 구성하거나 나중에 개별적으로 요소를 추가 할 수 있습니다. [lookup] 시간 복잡도에 영향을 미치지 않는 * 다를 수도있는 유일한 것은 용량입니다. –