Là cây cắt liên kết đã từng được sử dụng trong thực tế, để tính toán lưu lượng tối đa hoặc các ứng dụng khác?


20

Nhiều thuật toán dòng chảy tối đa mà tôi thường thấy được thực hiện, thuật toán của Dinic, đẩy lại nhãn và các thuật toán khác, có thể cải thiện chi phí thời gian tiệm cận của chúng thông qua việc sử dụng cây động (còn được gọi là cây cắt liên kết).

  • Đẩy nhãn lại chạy trong hoặc hoặc bình thường, nhưng với cây độngÔi(V2E)Ôi(V3)Ôi(V2E)Ôi(VEđăng nhập(V2/E))
  • Thuật toán của Dinic chạy trong , nhưng với cây độngÔi(V2E)Ôi(VEđăng nhập(V))

Tuy nhiên, việc triển khai thực tế các thuật toán dòng chảy tối đa trong hầu hết các thư viện dường như không sử dụng cấu trúc dữ liệu này. Có phải cây động đã từng được sử dụng trong thực tế để tính toán lưu lượng tối đa? Hay họ mang quá nhiều chi phí có ích cho kích thước vấn đề trong thế giới thực?

Có bất kỳ lĩnh vực vấn đề nào khác, nơi cây cắt liên kết được sử dụng?

Câu hỏi này có liên quan đến một câu hỏi mà tôi đã hỏi trên cstheory: Có bất kỳ trạng thái nào của thuật toán Maximum Flow hiện đại không?


tổng quan / mô tả về các cây cắt liên kết nhưng chỉ trạng thái "hữu ích cho các ứng dụng như Network Flow"
vzn

từ khảo sát tarjan được trích dẫn bởi reza, về cơ bản các thuật toán thời gian tuyến tính hoạt động rất tốt / tốt nhất cho một số đỉnh / cạnh vừa phải, và sau đó có một đỉnh của các đỉnh / cạnh lớn hơn trong đó thuật toán logarit vượt trội hơn thuật toán tuyến tính. vì vậy fns truy cập logarit rất hữu ích và có thể tốt hơn đáng kể cho các đồ thị rất lớn.
vzn

Câu trả lời:


7

Có một bài báo có tiêu đề " Cây năng động trong thực tế " đánh giá việc thực hiện thực tế.

Các loại khác mà cây Link-Cut có thể được sử dụng một cách hiệu quả là trong Lập chỉ mục cơ sở dữ liệu . Bạn có thể tìm thấy điều này trong cuốn sách " Kỹ thuật chỉ mục cơ sở dữ liệu ".


nghĩ rằng điều này cần một số chi tiết. cây rất hữu ích cho các chỉ mục nói chung tất nhiên nhưng trong những điều kiện nào cây sẽ được sửa đổi?
vzn

@vzn: B + -tree, R-tree, H-Tree và X-Tree là một số ví dụ.
Reza

tất nhiên, nhưng nghi ngờ có lẽ không ai từng thử sử dụng cây cắt liên kết trong các chỉ mục DB cho đến nay. đây là một ứng dụng hợp lý nhưng có vẻ như không rõ ràng rằng chúng được tối ưu hóa cho các hoạt động tương tự xảy ra trong các chỉ mục DB.
vzn

5

bài báo này tìm thấy ở phần cuối rằng cây cắt liên kết (LC) vượt trội hơn cây cào nén (RC) cho thuật toán dòng chảy tối đa Sleator / Tarjan bằng cách sử dụng trình tạo đồ thị ngẫu nhiên Dimacs tiêu chuẩn.

bài viết tập trung vào việc nhân giống thay đổi như là một ứng dụng của cây động. ví dụ, lan truyền thay đổi tương tự như cách các ô bảng tính excel phải được tính toán lại khi thay đổi một số ô dựa trên các phụ thuộc ô / công thức. các tác giả đã phát hành mã của họ như là một thư viện mở.

Một phân tích thử nghiệm về sự thay đổi lan truyền trong cây động Acar, Blelloch, Vittes

Thay đổi lan truyền là một kỹ thuật để tự động điều chỉnh đầu ra của thuật toán thành các thay đổi trong đầu vào. Ý tưởng đằng sau việc truyền thay đổi là theo dõi sự phụ thuộc giữa dữ liệu và lệnh gọi hàm, để khi đầu vào thay đổi, các hàm bị ảnh hưởng bởi thay đổi đó có thể được thực hiện lại để cập nhật tính toán và đầu ra. Thay đổi lan truyền làm cho trình biên dịch có thể kích hoạt các thuật toán tĩnh.


Cảm ơn bạn. Thật tuyệt khi thấy một số điểm chuẩn của các thuật toán liên quan đến cây động.
Rob Lachlan
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.