단어를 저장하기위한 사전과 같은 것을 디자인하는 동안 TRIE가 가장 권장되는 데이터 구조입니까? 시간이나 메모리 성능을 향상시키는 다른 대안?사전과 같은 것을 디자인하면서 데이터 구조를 권장합니까?
충돌이 없다면 해시가 좋을 수 있다고 생각하지만 오버 라이트, 오버랩, 오버랩, 오버랩, 오버레이 모두가 독점적 인 스토리지를 차지하면서 트라이의 공간을 공유하면서 메모리 요구 사항이 나 빠지기 시작합니다.
편집 : @Moron에게 감사하고 매우 유용한 답변을드립니다. 동의합니다 - 해시 키를 생성하는 것은 O (n)이므로 TRIE 검색입니다. 그러나 해시의 경우 체인화를 추가하면 시간이 늘어날 수 있으며 TRIE의 경우에는 발생하지 않습니다. TRIE의 모든 노드에서 사전 크기가 작 으면 불기있을 수있는 포인터를 유지해야합니다.
해시 O (log n)은 어떻습니까? –
@Moron 연결을 위해 연결 목록을 사용하는 대신 루트 노드 위치에서 BST 또는 AVL 트리를 시작하십시오. 무작위 데이터의 경우 AVL을 선택하지 않아도 BST는 O (log n)이어야합니다. – Fanatic23
링크 된 목록 대신 원하는 것을 사용하십시오. 해시 키 값을 계산하는 것은 여전히 O (n)입니다. O (logn)는 전혀 이해가되지 않습니다. 그것은 O (n + nlog K)입니다. 여기서 K는 같은 해시를 가진 키의 수입니다. n은 해시를 계산하는 데 사용되며, logK 문자열에 대한 nlogK는 길이가 각각 n 인 K 노드 트리에서 비교됩니다 (작은 문자열이 동일한 값으로 해시되면 최하위가되지만 최악의 경우는 n입니다). –