2012-03-22 1 views
1

문자열 소스 (텍스트 파일이라고합시다)가 있고 여러 문자열이 여러 번 반복됩니다. 상위 X 개의 가장 일반적인 문자열을 발생 횟수가 감소하는 순서로 가져와야합니다. TreeBag에 대한 비교기가 발생 횟수로 정렬

마음에 와서 생각

먼저 정렬 가방 (뭔가 같은 org.apache.commons.collections.bag.TreeBag)를 만들고 내가 원하는 순서대로 항목을 정렬하는 비교기를 제공하는 것이었다. 그러나 필자는 필자가 비교해야 할 대상의 유형이 무엇인지 알 수 없다. 내 객체 (String)와 TreeBag에 의해 내부적으로 생성 된 어커런스 수를 결합하는 일종의 내부 맵이어야합니다. 이것이 가능한가?

아니면 단순히 해시 맵을 사용하여 더 나을 예를 들어,에 설명 된대로 값을 정렬 할 것이다 Java sort HashMap by value

답변

0

왜 당신은지도에 문자열을 넣지 마십시오. 문자열에서 텍스트에 나타나는 횟수의 맵입니다. 2 단계에서 맵의 항목을 탐색하고 최소 X 크기의 힙에 계속 추가합니다. 삽입하기 전에 힙이 가득차면 항상 min을 먼저 추출하십시오.
nlogx 시간이 소요됩니다.

그렇지 않으면 1 단계 후에 항목을 발생 횟수로 정렬하고 첫 x 항목을 취하십시오. 트리 맵은 도움이 될 것입니다. :) (javadocs에 대한 링크를 추가 하겠지만, 태블릿에 있음) nlogn 시간이 소요됩니다.

+1

애드리안 감사합니다. 정렬 가능한 해시 맵으로 구현했지만 결국 힙은 좋은 아이디어입니다. 다음 번에는 사용자 지정 비교기로 PriorityQueue를 살펴볼 것입니다. – AlexR

관련 문제