Tôi đang triển khai Trie bằng python. Đến bây giờ tôi đã đi qua hai phương pháp khác nhau để thực hiện nó:Bộ nhớ Cấu trúc dữ liệu hiệu quả để thực hiện Trie
- sử dụng một Node lớp (tương tự như struct Node trong C++) với các thành viên dữ liệu -
char - để lưu trữ vật
is_end - để lưu trữ cuối từ (đúng hoặc sai)
prefix_count - cửa hàng số từ với tiền tố hiện
con - loại Node dict (để lưu trữ các nút khác ví dụ: 26 bảng chữ cái)
class Node(object):
def __init__(self):
self.char = ''
self.word = ''
self.is_end = False
self.prefix_count = 0
self.child = {}
- sử dụng một từ điển để lưu trữ tất cả các dữ liệu.
words = {'foo', 'bar', 'baz', 'barz'}
{'b': {'a': {'r': {'_end_': '_end_', 'z': {'_end_': '_end_'}}, 'z': {'_end_': '_end_'}}}, 'f': {'o': {'o': {'_end_': '_end_'}}}}
Đó là cấu trúc dữ liệu hiệu quả và tiêu chuẩn, mà là cả hai bộ nhớ hiệu quả và nhanh chóng cho traversal và Trie khác hoạt động trên tập dữ liệu lớn các từ?
https://github.com/kmike/marisa-trie –
Bạn định tham chiếu các đối tượng của 'Node' trong' self.child' như thế nào, đây có phải là từ điển không? Nếu thực sự bạn giữ nó như là một 'dict', và bằng cách nào đó tham chiếu đến các đối tượng' Node', tôi thấy cả hai phương thức đều có độ phức tạp tương tự nhau, nhưng cái thứ nhất có nhiều không gian phức tạp hơn. Và nếu bạn gọi 'self.child' là một danh sách, thì danh sách thứ nhất có thể chậm hơn một chút – hyades
Cảm ơn bạn đã trả lời. mỗi đứa trẻ trong Node sẽ có một đối tượng kiểu Node khác, nó sẽ làm cho nó trở thành một cây [email protected] – divyum