문제

Java 's 우선 순위 대기열 데이터 구조입니다 O(log n) put (삽입) 및 O(log n) 설문 조사 (최소 요소의 검색 및 제거).

C ++ STL 멀티 맵 기능이 동일하지만 O(1) 최소 요소의 검색 및 제거를위한 복잡성 (시작 및 지우기). Java에 동등한 것이 있습니까?

도움이 되었습니까?

해결책

Google 컬렉션 멀티 맵 구현을 제공합니다. 구체적으로, Treemultimap은 키, 값 또는 둘 다를 기반으로 비교기를 정렬 할 수 있습니다.

다른 팁

시도해보십시오 아파치 커먼즈 컬렉션.

Multihashmap 및 Multivaluemap (해당 페이지에서 링크)은 실제로 인터페이스를 구현합니다.

실제로 A가 있습니다 우선 순위 대기열 거기에서도, 그러나 그것은 버퍼 패키지.

먼저, C ++의 멀티 맵이 실제로 O (1)에게 풀이 최소 요소. SOTRED 맵/우선 순위 대기열의 가장 일반적인 구조는 트리 구조입니다. 쿼리 최소 요소에는 O (1) 복잡성이 있지만 풀이 O (log n)입니다.

즉, Java 's에서 구현 한 건너 뛰기 목록이라고 생각합니다. ConcurrentsKipListMap) ~할 것 같다 최소 요소를 제거하기 위해 O (1)를 제공하지만 확실하지 않습니다. ConcurrentsKipListMap의 성능을 평가할 때의 문제 중 하나는 Traversal 작업이 이전 삭제에 의해 남겨진 마커 "정리"라는 것입니다. 따라서 작업의 복잡성은 실제로 이전 작업이 무엇인지에 따라 달라질 수 있습니다. 반면에, 어떤 수준에서는 거의 모든 알고리즘에 해당됩니다. 일부 데이터가 CPU 캐시에 있는지 여부는 이전 작업이 이전 작업을 수행했는지 여부에 따라 달라질 수 있습니다 ...)

추신 : 말하는 것을 잊었습니다 ConcurrentsKipListMap.pollFirstentry ().

std:multimap 트리 구조가 될 것입니다. 이는 함께 추가 및 제거가 O (log n)임을 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top