2010-04-22 63 views
10

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.

Trả lời

13

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 000b = 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.

+1

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. –

+0

Đó 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. –

+0

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ờ: ( –

0

Wikipedia có một số sự kiện phức tạp về thuật toán: B+ tree (phần Đặc điểm), Trie (không may lan rộng khắp bài viết). Hy vọng rằng sẽ giúp.

3

Phụ thuộc vào công việc thực tế của bạn:

  • Nếu bạn muốn nhận được toàn bộ cây con, một B + Tree là sự lựa chọn tốt nhất của bạn bởi vì nó là không gian hiệu quả.
  • Nhưng nếu bạn muốn để có được những 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.
  • Nhiệm vụ phổ biến nhất được xử lý tốt bởi Triehoàn thành tiền tố từ.
+0

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). –

Các vấn đề liên quan