2012-04-21 1 views
5

항목을 수정하고 나는 결국이 실제 데이터를 벤치마킹에 내려 올 것이라는 점을 이해하지만, 난 그 일을 바쁘다 동안 :컬렉션 내가 특정 구현에 을 올바른 모음을 선택에 대한 기사의 톤을 읽고

  • C#의 정렬 모음을 사용하면 항목을 수정할 수 있습니까? 은 찾을 수 없습니까?

  • 수정은 아마도 제거로 구현 될 것이므로 다시 삽입하여 명시 적 '수정'기능을 수행합니다 ?

나는 모음 (사용자 정의 또는 표준 라이브러리), 그것을 수행 다음 작업에 필요입니다.

  • 삽입 - 자주
  • 제거 - 자주
  • 수정 - 자주
  • 선택 톱 X 요소 - 동시에 위의 상황이 발생 때마다, 그리고 더. 이 O (logn) 삽입을 제공하기 때문에

현재 나는, SortedSet의를 사용하고,하지만 난 제거 성능 및 최선의 방법 항목을 수정하는 방법에 불분명입니다.

+0

항상 컬렉션을 정렬해야합니까? 여러 수정 사항을 적용한 후 나중에 한 번 정렬 할 수 있다면 큰 성능 이점을 얻을 수 있습니다. –

+0

@Evenhuis 유감스럽게도 여러 개의 '클라이언트'가이 목록을 요청할 것이므로이 목록이 변경 될 때마다 정렬 된 순서로 필요합니다. 또는 적어도 상단 요소. – Vort3x

+0

데이터 구조 과정에서 밸런스드 BST를 사용했습니다. 꽤 빠르지 만 C++로 구현했습니다. 어쩌면 그렇게 생각할 수도 있습니다. 다음은 좋은 정보 출처입니다 : http : //www.codeproject.co.kr/Articles/68500/Balanced-Binary-Search-Tree-BST-Search-Delete-Prin –

답변

1

먼저 컬렉션 ​​수정의 의미를 명확히해야합니다.

일반적으로 컬렉션을 조작한다는 것은 목록에서 항목을 삽입/삭제하는 것을 의미합니다. 개별 항목을 수정하려면 기본적으로 항목에 액세스하고 속성을 수정해야합니다. 항목 액세스 비용은 컬렉션 구현에 따라 다르지만 항목 속성의 수정은 컬렉션에 종속되지 않습니다. 컬렉션 항목이 변경 가능하지 않은 경우 수정할 수 없습니다.

기본 내장 컬렉션을 찾으려면 기본적으로 SortedList와 SortedSet (SortedDictionary는 SortedSet과 동일 함)을 선택해야합니다.

SortedList는 데이터를 내부적으로 배열로 저장하므로 색인 (최상위 X 항목 가져 오기)을 통해 효율적으로 액세스 할 수 있습니다. SortedSet은 더 빠른 삽입과 제거 (상수 인자에 의한)를 가지고 있지만 인덱스 된 접근은 최악의 경우에 O (log n)와 가장 좋은 ca O (1) 인 트리를 검색해야 할 것입니다.

두 가지의 차이점은 상당히 적습니다. 둘 다 레드 블랙 트리를 구현하기 때문에 구현 세부 사항이 다릅니다.

사용자 사례에 대한 실제 성능을 측정해야합니다. 그러나 당신은 이미 그것을 알고 있습니다.