Cây Trie và cây B + so sánh như thế nào để lập chỉ mục các chuỗi được sắp xếp theo thứ tự từ điển [theo thứ tự một số tỷ]? Nó cũng sẽ hỗ trợ các truy vấn phạm vi.Cây Trie vs B +
Từ perf. cũng như quan điểm phức tạp thực hiện.
Cây Trie và cây B + so sánh như thế nào để lập chỉ mục các chuỗi được sắp xếp theo thứ tự từ điển [theo thứ tự một số tỷ]? Nó cũng sẽ hỗ trợ các truy vấn phạm vi.Cây Trie vs B +
Từ perf. cũng như quan điểm phức tạp thực hiện.
Tôi muốn nói điều đó tùy thuộc vào ý bạn là gì bởi Phạm vi.
Nếu phạm vi của bạn được biểu thị là Tất cả các từ bắt đầu bằng, thì Trie
là lựa chọn đúng tôi muốn nói. Mặt khác, Trie
không dành cho các yêu cầu như Tất cả các từ giữa XX và ZZ.
Lưu ý rằng hệ số phân nhánh của B+ Tree
ảnh hưởng đến hiệu suất của nó (số lượng nút trung gian). Nếu h
là chiều cao của cây, thì n tối đa ~~ b h. Do đó, h ~~ log (n max)/log (b).
Với n = 1 000 000 000
và b = 100
, chúng tôi có h ~~ 5
. Do đó nó có nghĩa là chỉ có 5 con trỏ dereferencing cho đi từ gốc đến lá. Nó thân thiện với bộ nhớ cache hơn so với Trie
.
Cuối cùng, B+ Tree
được thừa nhận là khó thực hiện hơn so với Trie
: nó cao hơn mức độ phức tạp Red-Black Tree
.
Phụ thuộc vào công việc thực tế của bạn:
N
trẻ em đầu tiên từ một substree, sau đó một Trie là sự lựa chọn tốt nhất bởi vì bạn chỉ cần truy cập các nút ít hơn trong một kịch bản B + Tree.Một số biến thể của lần thử mà tôi đang sử dụng không chỉ tiết kiệm không gian hơn BTrees mà còn nhanh hơn cho hầu hết các truy vấn (truy cập trực tiếp, hoàn thành từ, truy vấn phạm vi). –
Nếu bạn thông minh về việc thực hiện Trie của bạn hơn "tất cả các từ giữa xx và zz" không phải là khó khăn. Nếu bạn đang lưu trữ các cạnh theo thứ tự từ điển thì các chuỗi cũng theo thứ tự từ điển. –
Đó là một chút khó khăn hơn mặc dù để khai thác phạm vi. Trong một 'B + Tree' một dãy có thể được xác định bởi hai con trỏ (bắt đầu/kết thúc) và bạn có thể lặp qua chúng như trong một deque. Trong một 'Trie' bạn phải thực hiện lặp lại (từ một con trỏ ngẫu nhiên đến cái khác) để có thể làm như vậy, nó ít tự nhiên hơn, mặc dù tất nhiên là không khả thi và tôi sợ kém hiệu quả hơn. Hoặc bạn chỉ có thể sao chép phạm vi trong cấu trúc khác, nhưng điều đó có thể tốn kém. –
bị bỏ phiếu xuống do nhầm lẫn, được cho là sẽ nâng cấp nó. Tôi không thể thay đổi lại ngay bây giờ: ( –