Giới thiệu
Một cây radix , còn được gọi là Trie nén hoặc cây tiền tố nén, là một cấu trúc dữ liệu cây như để lưu trữ một tập các chuỗi. Các cạnh của cây được gắn nhãn bởi các chuỗi không trống và mỗi nút là đầu cuối hoặc nonterminal. Các chuỗi mà cây chứa chính xác là nhãn của tất cả các đường dẫn từ gốc đến nút cuối. Cây phải ở dạng bình thường được xác định bởi các điều kiện sau:
- Tất cả các nút không gốc nonterminal có ít nhất hai con.
- Đối với mỗi nút, tất cả các cạnh đi có ký tự đầu tiên khác nhau.
Ví dụ, đây là cây cơ số chứa tập hợp ["test", "testing", "tested", "team", "teams", "technical", "sick", "silly"]
, với (N)
biểu diễn một nút nonterminal và (T)
một nút đầu cuối:
-(N)-te-(N)-st-(T)-ing-(T)
| | |
| | +-ed-(T)
| |
| +-am-(T)-s-(T)
| |
| +-chnical-(T)
|
+-si-(N)-ck-(T)
|
+-lly-(T)
Trong thử thách này, nhiệm vụ của bạn là tính chiều cao của cây, đưa ra các chuỗi làm đầu vào.
Đầu vào
Đầu vào của bạn là một danh sách không trống các chuỗi ký tự ASCII viết thường. Nó sẽ không chứa các bản sao, nhưng nó có thể theo bất kỳ thứ tự nào. Nó có thể chứa chuỗi rỗng. Bạn có thể lấy đầu vào ở bất kỳ định dạng hợp lý.
Đầu ra
Đầu ra của bạn sẽ là chiều dài của đường dẫn từ gốc đến lá dài nhất trong cây cơ số tương ứng, được đo bằng số nút mà nó chứa.
Trong ví dụ trên, đầu ra đúng là 4, tương ứng với các đường dẫn
(N)-te-(N)-st-(T)-ing-(T)
(N)-te-(N)-st-(T)-ed-(T)
(N)-te-(N)-am-(T)-s-(T)
Trong đó có 4 nút.
Ví dụ khác
Dưới đây là một vài ví dụ về cây radix:
[""]
-(T)
["","fuller"]
-(T)-fuller-(T)
["","full","fuller"]
-(T)-full-(T)-er-(T)
["full","fuller"]
-(N)-full-(T)-er-(T)
["full","filler"]
-(N)-f-(N)-ull-(T)
|
+-iller-(T)
Quy tắc và tính điểm
Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Đây là mã golf, vì vậy số byte thấp nhất sẽ thắng.
Bạn có thể sử dụng bất kỳ thư viện hoặc thư viện tích hợp nào bạn muốn, nhưng hãy nhớ bao gồm tất cả import
các vv trong số byte của bạn. Thư viện của bên thứ ba - những thư viện không có trong bản cài đặt ngôn ngữ của bạn - được cho phép, nhưng phải được liệt kê riêng trong tiêu đề, ví dụ: Python + pytrie0.2, 60 byte .
Các trường hợp thử nghiệm
[""] -> 1
["fuller"] -> 2
["","fuller"] -> 2
["","full","fuller"] -> 3
["full","fuller"] -> 3
["full","filler"] -> 3
["full","filler","filter"] -> 4
["full","filler","fi","filter"] -> 5
["test","testing","tested","team","teams","technical","sick","silly"] -> 4
["a","aaaa","aabbaa","aabbaab","abaaa","aab","aabbb","aabba"] -> 8
["dbdbaca","ab","a","caaabaaa","adbbabdb","dbdbdbaca","dbbadbacaba","db"] -> 4
["db","dbbdbb","dbaa","cabcacaa","","acaabcacab","b","abaaaca","bacaaaaa"] -> 3
["aabaabdbb","bacaabadbbdb","abb","aabaa","ab","bcadbb","adbbcaaadbbb","caaa","bbdbcacadbab","dbbdbdb"] -> 4
["bbcaaabbbabbcadbbacadbbdbdb","b","bbbbaaaaaababa","ca","bb","bdbbacadbbdbbdbbababaacaca","abbaabbabcabaaa","bbbacacacabcacacabaaabb","bbcaaaab","bbbbcaacaadbcaaa","babbabcadbdbacacabbcacab","abcabbbaacadbcadb","bbcabbcadbcacaacaadbadbcaadb","dbbbdbbdbacaabbacabcadbdbacaca","bbaabdbdb","cabcadbbbadbadbbaadbcaca","adbadbadbdbcacadbdbbcaadbcaca","abaabbcab","aaabcaabcaab","bacacabcacaacadbadbb"] -> 6