Một thuật toán trực tuyến để tìm các phần tử biên giới Pareto


6

Tôi đang tìm kiếm một thuật toán trực tuyến có một luồng các yếu tố và bảo tồn các yếu tố có trên biên giới Pareto (ví dụ: tất cả các yếu tố không bị chi phối).

Ví dụ. Với các đầu vào sau, bộ biên giới Pareto được giữ lại sẽ phát triển như sau:

  • (3,7)
    • chèn phần tử b / c đó là phần tử đầu tiên
    • pareto đặt bây giờ bao gồm {(3,7)}
  • (7,3)
    • chèn phần tử b / c nó không bị chi phối trong phần đầu tiên
    • pareto đặt bây giờ bao gồm {(3,7), (7,3)}
  • (8,4)
    • chèn phần tử b / c nó không bị chi phối; loại bỏ (7,3)cái mà nó bị chi phối trong cả hai chiều
    • pareto đặt bây giờ bao gồm {(3,7), (8,4)}
  • (1,1)
    • không chèn bởi vì nó chiếm ưu thế trong cả hai chiều
    • pareto đặt bây giờ bao gồm {(3,7), (8,4)}
  • (9,9)
    • chèn phần tử b / c nó không bị chi phối; loại bỏ tất cả các yếu tố khác bởi vì điều này chi phối chúng trong cả hai chiều
    • pareto đặt bây giờ bao gồm {(9,9)}

Trong ví dụ của tôi, tôi đang sử dụng 2 tuple, nhưng tôi đang tìm kiếm một thuật toán có thể xử lý N-tuples cho N "nhỏ" (giả sử <10).

Giải pháp ngây thơ là chỉ so sánh từng yếu tố với tất cả các yếu tố hiện có trong tập hợp. Trong thực tế, cách tiếp cận ngây thơ có thể không quá tệ (ví dụ: phụ ) bởi vì các yếu tố sẽ thường xuyên bị trục xuất bởi bộ so sánh. Nhưng tôi đã tự hỏi nếu có một thuật toán hiệu quả được biết đến cho việc này. Tôi quan tâm đến hiệu quả trong bộ nhớ và độ phức tạp tính toán. (Ha! Và như một vấn đề thực tế, tôi đang tìm kiếm bộ thuật toán tối ưu Pareto liên quan đến bộ nhớ và độ phức tạp tính toán.)O(n2)

Ứng dụng hiện tại của tôi là xây dựng một tài liệu tìm kiếm LuceneCollector không thu thập các tài liệu phù hợp nhất (trường hợp sử dụng điển hình cho công cụ tìm kiếm), nhưng thu thập các tài liệu tối ưu Pareto theo các kích thước được chỉ định.


1
Bạn có quan tâm đến chi phí khấu hao hoặc tối đa của mỗi chi phí cập nhật không?

2
Biên giới Pareto còn được gọi là đường chân trời hoặc cực đại. Vì vậy, hãy thử các từ khóa như "trực tuyến, đường chân trời / cực đại, luồng dữ liệu, duy trì" với google.
hengxin

Bài viết này có một số giải pháp dl.acm.org/citation.cfm?doid=1142473.1142530

Câu trả lời:


4

Trong hai chiều, mỗi bản cập nhật có thể được thực hiện trong thời gian , bằng cách sử dụng cấu trúc dữ liệu cây nhị phân cân bằng. Nhưng khi bạn đang làm việc trong một không gian nhiều chiều, tôi không biết về bất kỳ giải pháp hiệu quả nào.O(lgn)

Hãy để tôi mô tả một thuật toán hiệu quả cho trường hợp 2D. Gọi là tập hợp các điểm trong biên giới Pareto. Lưu trữ trong cây nhị phân cân bằng, sử dụng phối hợp của mỗi điểm làm khóa của nó. Lưu ý rằng khi bạn sắp xếp bằng cách tăng phối hợp, chúng cũng sẽ được sắp xếp bằng cách giảm phối hợp.FFxFxy

Bây giờ, với một điểm mới , bạn có thể kiểm tra một cách hiệu quả cho dù đó là Pareto-bị chi phối bởi bất kỳ yếu tố của . Tìm phần tử đầu tiên của ở bên phải của (tức là phần tử sao cho và là tối thiểu); sau đó kiểm tra xem nó có chiếm ưu thế không .(xq,yq)FF(xq,yq)(x,y)Fxxqx(xq,yq)

Ngoài ra, được đưa ra một điểm mới , bạn có hiệu quả có thể tìm thấy cho dù đó Pareto-thống trị bất kỳ yếu tố của . Cụ thể, bạn có thể tìm thấy các chỉ số sao cho các điểm của đều là Pareto- bị chi phối bởi (giả sử rằng các điểm của đã được sắp xếp theo -coordine, các điểm thống trị Pareto sẽ nằm trong một khoảng liên tiếp). Đây là cách. Tìm phần tử đầu tiên của ở bên trái của (nghĩa là phần tử sao cho và(xq,yq)Fi,j(xi,yi),(xi+1,yi+1),,(xj,yj)F(xq,yq)FxF(xq,yq)(xj,yj)Fxjxqxjcàng lớn càng tốt) và kiểm tra xem chi phối nó không. Nếu có, hãy tìm chỉ số nhỏ nhất sao cho (so ) và . Cả hai bước này có thể được thực hiện trong thời gian . (Việc tìm kiếm có thể được thực hiện trong thời gian bằng cách coi cây như phân nhánh trên phối hợp của các điểm và lợi dụng thực tế là các điểm của được sắp xếp bằng cách giảm phối hợp.)(xq,yq)ii<jxi<xjyiyqO(lgn)iO(lgn)yFy

Bây giờ điều này cho chúng ta biết phải làm gì. Nếu bị chi phối bởi một số điểm của , thì đừng thêm nó vào ; bạn đã hoàn tất. Ngoài ra, nếu điểm thống trị của , sau đó bạn cần phải xoá bỏ những điểm và thêm vào . Điều này có thể được thực hiện trong thời gian , bằng cách lưu ý rằng bất kỳ khoảng nào của các chỉ số liên tiếp có thể được biểu thị dưới dạng liên kết của các cây con của cây nhị phân (nói một cách đại khái, bạn làm việc với anh chị em của các nút dọc theo đường dẫn từ đến gốc và tương tự cho đường dẫn từ(xq,yq)FF(xq,yq)i..jFF(xq,yq)FO(lgn)O(lgn)ijđến gốc); bạn có thể xóa từng cây con trong thời gian . Điều này cho phép chúng ta xóa toàn bộ một loạt các điểm liên tiếp trong trong thời gian, bất kể có bao lớn phạm vi là. Để biết chi tiết, xem Xóa một phạm vi lá liên tiếp từ cây nhị phân .O(1)FO(lgn)

Tất cả điều này có thể được thực hiện trong thời gian , bằng cách sử dụng cấu trúc dữ liệu cây nhị phân cân bằng.O(lgn)

Điều này hoạt động trong 2 chiều (tức là 2-tuples). Ở kích thước cao hơn, vấn đề trở nên khó khăn hơn nhiều. Bạn có thể tìm tài liệu tham khảo cho tài liệu, với các kỹ thuật cho kích thước cao hơn, tại Cách tìm tập hợp con của vectơ có khả năng tối đa (số) trong một tập các vectơ ; nhưng tôi e rằng ở các chiều cao, tất cả các thuật toán đã biết có thể khá chậm (chúng có một yếu tố giống như trong đó là số lượng kích thước ).O((lgn)d1)d


1
Các cây nhị phân cân bằng có cho phép O ( log (n)) - xóa thời gian của các phạm vi không?

1
Đây là một câu trả lời tốt. Mặc dù nó mang đến sự chú ý của tôi rằng tôi ngụ ý một ràng buộc với ví dụ của tôi mà tôi không có ý định. Trong ví dụ của tôi, tôi đang sử dụng 2 bộ dữ liệu, nhưng tôi sẽ cần một thuật toán xử lý các bộ dữ liệu.
JnBrymn

1
@JnBrymn, xem câu trả lời được cập nhật của tôi: Tôi đã thêm một đoạn vào cuối để giải quyết tình huống ở các chiều cao hơn.
DW

Xem "loại bỏ tất cả các yếu tố khác bởi vì điều này chi phối chúng trong cả hai chiều". (Có thể dễ dàng trở thành một yếu tố số tuyến tính phải được loại bỏ, vì vậy nếu bạn phải làm điều đó một yếu tố cùng một lúc, sau đó cập nhật có thể mất trường hợp xấu nhất O (n) thời gian.)

Trong hai chiều, làm thế nào các phần tử bị chi phối nghiêm ngặt được loại bỏ trong thời gian O (log (n))?
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.