2010-05-09 4 views
2

내 개체의 속성에있는 키에 따라 정렬 된 방식으로 개체를 저장하려고합니다. 나중에이 키를 최대 키에서 최소 키로 순차적으로 액세스 할 것입니다. 나는 몇몇 수색 업무를 또한 할 것이다.정렬 된 목록을위한 효율적인 데이터 구조

AVL 트리 또는 RB 트리를 사용하는 것을 고려합니다. 내가 아는 한 그들은 이론적으로 거의 동등합니다 (둘 다 O (logn)을 가짐). 그러나 실제로는 어떤 상황에서 성능이 더 좋을지 모릅니다. 그리고 내가 ds에 주로 삽입하고 순차적으로 접근한다는 점을 고려할 때, 그보다 나은 대안이 있습니다.

편집 : 나는 당신이 구현하기위한 정렬 된 목록과 함께, 당신은 (n)이 로그보다 더 삽입을받지 않습니다 자바에게 이제까지 가장 쉬운 방법입니다

답변

4

C#에서 SortedDictionary<K, V>은 빨강 - 검정 트리로 구현되며 C++의 STL 구현에서 빨간색으로 검은 색 트리로 구현됩니다. std::map<K, T> 또한

, Wikipedia에서 AVL 대 레드 - 블랙 트리 :

AVL 트리 O 검색, 삽입, 삭제 및 (로그 n)지지 다른 구성이다. 더 엄격하게 은 빨강 - 검정 나무보다 균형이 맞으므로 느린 삽입과 제거를 위해 을 유도하지만 빠른 검색. 이것은 ( 같은 어셈블러 또는 통역의 주문 코드로 또는 프로그램 사전,) 언어 사전 등 가 재건하지 않고 한 번로드 구축 할 수있는 데이터 구조에 대한이 매력적인한다.

+0

그러나 당신이 제공 한 정보를 고려 유용합니다. Thanx – systemsfault

+1

C++에서 완성되기 위해서는 gcc와 dinkumware (Visual Studio)의 Red Black trees라는 용어로 구현 된'map','set','multimap'과'multiset'이 표준으로 요구되지 않습니다 (복잡성 만이 precised). –

+0

Java의 TreeMap은 또한 Red Black Trees를 구현합니다. 인터페이스는 NavigableMap이라고합니다. – starblue

1

을 사용하는거야 그리고 우리는 아마 많이 필요할 것 다른 구조를보다 적절하게 만드는 다른 요소가 있는지 판단하기 위해 제공 한 것보다 더 자세하게 설명합니다.

1

당신이 자바를하고있는 것처럼, (중복 항목을 가질 수 있도록, 그것은 비록 셋트)를 TreeSet를 사용

내가 자바 사용하고
관련 문제