Sự khác biệt giữa cây phân khúc, cây khoảng, cây nhị phân và cây phạm vi là gì?


200

Sự khác biệt giữa các cây phân khúc, cây xen kẽ, cây được lập chỉ mục nhị phân và cây phạm vi theo:

  • Ý tưởng / định nghĩa chính
  • Các ứng dụng
  • Hiệu suất / thứ tự trong kích thước cao hơn / tiêu thụ không gian

Xin đừng chỉ đưa ra định nghĩa.


12
Nó không phải là một bản sao, Câu hỏi đó là nếu cây fenwick là khái quát của tress quãng, và câu hỏi của tôi là cụ thể và khác biệt hơn.
Aditya

7
Nó chưa được trả lời tại stackoverflow.com/questions/2795989/ , câu trả lời ở đó chỉ đưa ra định nghĩa.
Aditya

12
Làm thế nào là nó quá rộng? "Một số khác biệt giữa x và y là gì?" là rõ ràng và tập trung như nó được. Đây là một câu hỏi rất hay.
IVlad

16
Và không có câu trả lời tốt cho điều này có sẵn ở bất cứ đâu. Một câu trả lời hay sẽ rất tốt cho cộng đồng
Aditya

22
Hầu hết các cấu trúc dữ liệu này (ngoại trừ cây Fenwick) được xem xét trong pdf này: "Khoảng thời gian, phân đoạn, phạm vi và cây tìm kiếm ưu tiên" (bởi DT Lee). Hoặc bạn có thể đọc nó như một chương trong cuốn sách này: "Sổ tay cấu trúc dữ liệu và ứng dụng" .
Evgeny Kluev

Câu trả lời:


319

Tất cả các cấu trúc dữ liệu này được sử dụng để giải quyết các vấn đề khác nhau:

  • Cây phân đoạn lưu trữ các khoảng và được tối ưu hóa cho các truy vấn " trong số các khoảng này chứa một điểm đã cho ".
  • Cây khoảng thời gian cũng lưu trữ các khoảng, nhưng được tối ưu hóa cho các truy vấn " trong số các khoảng này trùng với một khoảng thời gian nhất định ". Nó cũng có thể được sử dụng cho các truy vấn điểm - tương tự như cây phân đoạn.
  • Cây phạm vi lưu trữ các điểm và được tối ưu hóa cho các truy vấn " điểm nào nằm trong một khoảng nhất định ".
  • Cây được lập chỉ mục nhị phân lưu trữ các mục - đếm trên mỗi chỉ mục và được tối ưu hóa cho "có bao nhiêu mục giữa các truy vấn m và n ".

Hiệu suất / không gian tiêu thụ cho một chiều:

  • Cây phân đoạn - Thời gian tiền xử lý O (n logn), thời gian truy vấn O (k + logn), không gian O (n logn)
  • Cây thời gian - Thời gian tiền xử lý O (n logn), thời gian truy vấn O (k + logn), không gian O (n)
  • Cây phạm vi - Thời gian tiền xử lý O (n logn), thời gian truy vấn O (k + logn), không gian O (n)
  • Cây được lập chỉ mục nhị phân - Thời gian tiền xử lý O (n logn), thời gian truy vấn O (logn), không gian O (n)

(k là số kết quả được báo cáo).

Tất cả các cấu trúc dữ liệu có thể là động, theo nghĩa là kịch bản sử dụng bao gồm cả thay đổi dữ liệu và truy vấn:

  • Cây phân đoạn - khoảng thời gian có thể được thêm / xóa trong thời gian O (logn) (xem tại đây )
  • Cây khoảng - khoảng thời gian có thể được thêm / xóa trong thời gian O (logn)
  • Cây phạm vi - điểm mới có thể được thêm / xóa trong thời gian O (logn) (xem tại đây )
  • Cây được lập chỉ mục nhị phân - số lượng vật phẩm trên mỗi chỉ số có thể tăng lên trong thời gian O (logn)

Kích thước cao hơn (d> 1):

  • Cây phân đoạn - Thời gian tiền xử lý O (n (logn) ^ d), thời gian truy vấn O (k + (logn) ^ d), không gian O (n (logn) ^ (d-1))
  • Cây thời gian - Thời gian tiền xử lý O (n logn), thời gian truy vấn O (k + (logn) ^ d), không gian O (n logn)
  • Cây phạm vi - O (n (logn) ^ d) thời gian tiền xử lý, thời gian truy vấn O (k + (logn) ^ d), không gian O (n (logn) ^ (d-1)))
  • Cây được lập chỉ mục nhị phân - Thời gian tiền xử lý O (n (logn) ^ d), thời gian truy vấn O ((logn) ^ d), không gian O (n (logn) ^ d)

12
Tôi thực sự có ấn tượng rằng phân khúc cây <khoảng cây từ này. Có bất kỳ lý do để thích một cây phân khúc? Ví dụ đơn giản thực hiện?
j_random_hacker

7
@j_random_hacker: Thuật toán dựa trên cây phân đoạn có lợi thế trong một số biến thể chiều cao phức tạp hơn của truy vấn khoảng. Ví dụ: tìm phân đoạn đường song song không trục nào giao nhau với cửa sổ 2D.
Lior Kogan

5
Cảm ơn, tôi sẽ quan tâm đến bất kỳ công phu nào bạn có thể đưa ra về điều đó.
j_random_hacker

3
@j_random_hacker, cây phân đoạn có một cách sử dụng thú vị khác: RMQ (truy vấn tối thiểu phạm vi) trong thời gian O (log N) trong đó N là kích thước khoảng thời gian tổng thể.
ars-longa-vita-brevis

1
Tại sao cây phân đoạn O (n log n) không gian? Họ lưu trữ N lá + N / 2 + N / 4 + ... + N / 2 ^ (log N) và tổng này là O (N) nếu tôi không nhầm. Ngoài ra câu trả lời @ icc97 cũng báo cáo không gian O (N).
Kiến

24

Không phải là tôi có thể thêm bất cứ điều gì vào câu trả lời của Lior , nhưng có vẻ như nó có thể làm được với một cái bàn tốt.

Một chiều

k là số lượng kết quả được báo cáo

|              | Segment       | Interval   | Range          | Indexed   |
|--------------|--------------:|-----------:|---------------:|----------:|
|Preprocessing |        n logn |     n logn |         n logn |    n logn |
|Query         |        k+logn |     k+logn |         k+logn |      logn |
|Space         |        n logn |          n |              n |         n |
|              |               |            |                |           |
|Insert/Delete |          logn |       logn |           logn |      logn |

Kích thước cao hơn

d > 1

|              | Segment       | Interval   | Range          | Indexed   |
|--------------|--------------:|-----------:|---------------:|----------:|
|Preprocessing |     n(logn)^d |     n logn |      n(logn)^d | n(logn)^d |
|Query         |    k+(logn)^d | k+(logn)^d |     k+(logn)^d |  (logn)^d |
|Space         | n(logn)^(d-1) |     n logn | n(logn)^(d-1)) | n(logn)^d |

Các bảng này được tạo trong Github Formatted Markdown - xem Gist này nếu bạn muốn các bảng được định dạng độc đáo.


2
Bạn có ý nghĩa gì bởi kết quả báo cáo?
Pratik Singhal

Các thuật toán tìm kiếm @ ps06756 thường có thời gian chạy log (n) trong đó n là đầu vào nhưng có thể mang lại kết quả tuyến tính trong n mà không thể thực hiện được trong thời gian logarit (không thể xuất ra n số trong thời gian log (n)) .
oerpli

1
Cây phân khúc không nên có O(n logn) spacetrong bảng đầu tiên?
Daniel_ds
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.