trie
v0.0.1
Go에서 Trie 데이터 구조를 구현합니다. 일반적인 Trie 접두사 검색보다 더 많은 기능을 제공하며 자동 완성에 사용됩니다.
WebAssembly 데모는 shivamMg.github.io/trie에서 시도해 볼 수 있습니다.
키는 string
대신 []string
이므로 더 많은 사용 사례를 지원합니다. 예를 들어 []string{the Quick Brown Fox}는 각 단어가 Trie의 노드가 되는 키가 될 수 있습니다.
Put 키 및 Delete 키 지원
접두사 검색 지원 - 예를 들어 nation을 검색하면 nation , national , nationalism , nationalist 등이 반환될 수 있습니다.
편집 거리 검색(일명 Levenshtein 거리) 지원 - 예를 들어 밀을 검색하면 Wheat , cheat , heat , what 등과 같이 유사해 보이는 단어가 반환될 수 있습니다.
검색 결과의 순서는 결정적입니다. 게재 순서를 따릅니다.
tri := trie.New()// 키([]string) 및 값(모든) 넣기tri.Put([]string{"the"}, 1)tri.Put([]string{"the", " Quick", "brown", "fox"}, 2)tri.Put([]string{"the", "quick", "sports", "car"}, 3)tri.Put([]string{" 그만큼", "녹색", "나무"}, 4)tri.Put([]string{"an", "apple", "tree"}, 5)tri.Put([]string{"an", "umbrella"} , 6)tri.Root().Print()// 출력(($)로 끝나는 터미널이 있는 전체 트라이):// ^// ├─ ($)// │ ├─quick// │ │ ├─ 브라운// │ │ │ └─ 폭스($)// │ │ └─ 스포츠// │ │ └─ 자동차($)// │ └─ 그린// │ └─ 트리($)// └─ an// ├─ 사과// │ └─ 나무 ($)// └─ 우산 ($) 결과 := tri.Search([]string{"the", "quick"})for _, res := 범위 결과.Results { fmt.Println(res.Key, res.Value) }// 출력(접두사 기반 검색):// [빠른 갈색 여우] 2// [빠른 스포츠카] 3key := []string{"the", "tree"}results = tri.Search(key , trie.WithMaxEditDistance(2), // 편집은 삽입, 삭제, 교체가 가능합니다.trie.WithEditOps())for _, res := range results.Results { fmt.Println(res.Key, res.EditDistance) // EditDistance는 [나무]로 변환하는 데 필요한 편집 수입니다.}// 출력([나무]에서 2회 이하의 편집 결과):// [the] 1// [녹색 나무 ] 1// [사과나무] 2// [우산] 2result := results.Results[2]fmt.Printf("%v를 %v:n으로 변환하려면", result.Key, key)printEditOps(result.EditOps)// 출력(결과를 [트리]로 변환하는 데 필요한 편집 작업):// [사과 나무]를 [트리]로 변환하려면:// - "an" 삭제// - "apple"을 "the"//로 바꾸십시오. - "tree"를 편집하지 마십시오results = tri.Search(key, trie.WithMaxEditDistance(2), trie.WithTopKLeastEdited(), trie.WithMaxResults(2))for _, res := 범위 결과.결과 { fmt.Println(res.Key, res.Value, res.EditDistance) }// 출력(최소 편집 결과 상위 2개):// [the] 1 1// [the green tree] 4 1
https://en.wikipedia.org/wiki/Levenshtein_distance#Iterative_with_full_matrix
http://stevehanov.ca/blog/?id=114
https://gist.github.com/jlherren/d97839b1276b9bd7faa930f74711a4b6