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)}
- chèn phần tử b / c nó không bị chi phối; loại bỏ
(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.)
Ứ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.