10GB 파일을 읽고 파일에서 가장 자주 나오는 문구를 찾아야합니다. 스캐너를 사용하여 청크로 파일을 읽고이 구문을 트라이 데이터 구조에 저장하고 있습니다. 나중에 해당 구문을 검색하여 효율적인 검색을 위해 trie 데이터 구조를 사용했습니다. 아래 그림과 같이 Trie 을 java에서 Hashmap을 사용하여 구현했습니다.Java에서 메모리를 효율적으로 구현하십시오
class TrieNode {
char data;
Map<Character, TrieNode> children = new HashMap<>();
boolean isLeafNode;
int positionMinHeap = -1;
int frequency;
TrieNode() {
}
TrieNode(char data) {
this.data = data;
}
}
그러나이 솔루션은 많은 힙 공간을 차지합니다. 파일에서 모든 구가 다른 경우 Trie는 엄청난 양의 공간을 차지합니다. Trie를 메모리 효율적인 방식으로 구현할 수있는 다른 방법이 있습니까?
저는 top-k [스트림 요약] (http://www.cse.ust.hk/~raywong/comp5331/References/EfficientComputationOfFrequentAndTop-kElementsInDataStreams.pdf) 알고리즘을 사용합니다. 예를 들어, CountMinSketch를 사용하여 주파수를 추적하고 메모리에서 k 번째로만 유지하고 높은 주파수로 교체하면 감지됩니다. –
기수 트리 구현은 어떻습니까? https://en.wikipedia.org/wiki/Radix_tree –