Cây B so với cây R - Không phải nó chỉ là một loạt các danh sách được liên kết với nhau sao?


10

Tôi khá quen thuộc với Cây B, chủ yếu là phải giữ cho cơ sở dữ liệu được cung cấp đầy đủ điện, không khí và không gian ổ cứng. Tôi liên kết với một danh sách liên kết đôi (doubl [tức là mắt]?).

Hôm nay, một trong những nhà phát triển vào bữa trưa đã đề cập đến một cây R.

Tôi nhảy lên Wikipedia và bắt đầu đọc. Nó nghe có vẻ khủng khiếp như cây B cao hơn. Thật không may, không có một nền tảng toán học sâu sắc làm cho khó hiểu những gì một số đồng nghiệp của tôi đang nói về.

Tôi đã hy vọng nếu ai đó có thể làm rõ một vài khác biệt giữa cây B và cây R. Có lẽ cuối cùng tôi cũng sẽ hỏi mọi người, nhưng không có gì đảm bảo rằng họ sẽ trả lời câu hỏi của tôi. Nhiều khả năng họ sẽ bắt đầu lan man về Chúa biết những gì. . .


một BTree chắc chắn không giống như một danh sách liên kết đôi. Cây cho phép truy cập vào các hoạt động log (n) thay vì tỷ lệ với n, như trong danh sách.
Javier

@Javier: các nút lá của chỉ mục b-cây thường là một danh sách liên kết đôi để cho phép truy xuất nhanh các nút chỉ mục.
Jordan

1
Là một câu hỏi thuần túy về mặt kỹ thuật, câu hỏi này thuộc về StackOverflow (vui lòng không đăng lại nó ở đó, nó sẽ được tự động hóa nếu có đủ người bỏ phiếu để đóng nó ở đây).
Péter Török

1
Đây là chủ đề ở đây: Lập trình viên.SE dành cho các câu hỏi khái niệm về lập trình. Stack Overflow dành cho khi bạn thực sự có mã bạn cần trợ giúp.

2
@Peter Torok: Theo hệ thống cũ, đây là câu hỏi SO. Nhưng bây giờ trang web này tồn tại.
Surfasb

Câu trả lời:


6

Cây R có thể được coi là khái quát hóa của cây b. Khi cây b cung cấp quyền truy cập O (log n) trên "phạm vi giới hạn" của các khóa mà nó chứa, Cây R cung cấp quyền truy cập O (log n) trên "vùng K chiều" của các khóa mà nó chứa.

Nếu bạn muốn ánh xạ mã zip thành tên quận, Bạn có thể sử dụng B-Tree, vì bạn có thể hỏi nó "Tất cả các quận có mã zip nằm trong khoảng từ 60000 đến 61000 là gì?" Tuy nhiên, một chiếc B-Tree sẽ được bệnh phù hợp với bản đồ tọa độ GPS để tên quận cho các truy vấn như "tất cả các quận trong vòng 100 dặm Chicago? Là gì", vì nó chỉ đơn đặt hàng phím của nó trên một chiều hướng duy nhất. Cây R phá vỡ các khóa của nó theo các hộp giới hạn chồng chéo và do đó, đây là cách tự nhiên để lưu trữ khóa khi bạn cần truy vấn trên nhiều thứ nguyên.


Tôi thích sự tương tự.
Surfasb

1
Nhiều ví dụ cụ thể hơn là một sự tương tự, Đó chính xác là cách các thuật toán chỉ mục này được sử dụng.
Độc thân Khuyến khích

6

Hầu hết các cấu trúc cây có thể được giảm xuống một số dạng của danh sách được liên kết, miễn là bạn bỏ qua cách danh sách được xây dựng (cụ thể, cách các phần tử được thêm và xóa và cách các nút được cân bằng lại, nếu có). Về cơ bản, đó là thuật toán chèn / xóa / truy xuất để phân biệt cấu trúc dữ liệu này với cấu trúc dữ liệu khác.

Các nút trong R-Tree thường chứa một hộp giới hạn, cho phép bạn lập chỉ mục các vị trí một cách hiệu quả, như bạn có thể cần nếu bạn muốn tìm kiếm các bản ghi "gần" một vị trí cụ thể. Các yếu tố trong B-Tree có thứ tự đơn giản hơn; bạn có thể so sánh trực tiếp xem một cái gì đó lớn hơn hoặc bằng một yếu tố khác. Trong R-Tree, mục đích của mỗi mục là xác định phần tử nào được chứa trong hộp giới hạn.

Cây B cho phép bạn tìm kiếm hiệu quả các mục có thể sắp xếp trong bộ nhớ thứ cấp (như đĩa cứng) và R-Tree cho phép bạn tìm kiếm hiệu quả các phần tử "tại" hoặc "gần" một điểm cụ thể hoặc hộp giới hạn, cũng trong bộ nhớ thứ cấp.


Nghe có vẻ như cây R bắt đầu cho thấy sự khác biệt của nó khi số lượng phần tử tăng lên, đúng không? Hay đó là một chút quá đơn giản?
Surfasb

Tôi nghĩ rằng với một số nút tương tự, bạn sẽ không thấy sự khác biệt cụ thể trong việc sử dụng không gian ngoại trừ chi phí tuyến tính của dữ liệu hộp giới hạn ở các nút không có lá. Nhưng bạn chỉ đơn giản là không thể biểu diễn các hộp giới hạn một cách hiệu quả theo định nghĩa thông thường của B-Tree, vì vậy, chắc chắn bạn sẽ sử dụng nhiều không gian hơn nếu bạn cố gắng thể hiện thông tin không gian trong B-Tree. Cây R dành cho các mối quan hệ không gian, B-Tree chỉ hỗ trợ thứ tự một chiều.
JasonTrue

2
@JasonTrue: Trên thực tế, có những cách hiệu quả để tuyến tính hóa các hộp giới hạn cho lập chỉ mục B-Tree: en.wikipedia.org/wiki/Geohash . Mặc dù băm là "hiệu quả", nhưng chúng không đặc biệt thuận tiện. Một truy vấn hộp giới hạn tùy ý có thể thực hiện 9 truy vấn riêng biệt cho không gian 2 chiều và nếu hộp chồng lên một trục chính (giả sử, International Dateline), số lượng truy vấn có thể tăng gấp đôi hoặc gấp bốn lần và nó sẽ trở nên rất khó sử dụng. Mặc dù vậy, đây vẫn là một lựa chọn khi các chỉ mục tuyến tính là loại duy nhất có sẵn.
Độc thân Khuyến khích
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.