Tìm chuỗi con có độ dài tối đa đồng thời thỏa mãn hai ràng buộc đặt hàng


8

Chúng tôi được cung cấp một bộ của Fruits. Mỗi loại trái cây có giá và hàm lượng vitamin V_i ; chúng tôi đã liên kết trái cây f_i với cặp được đặt hàng (P_i, V_i) . Bây giờ chúng ta phải sắp xếp các loại trái cây này theo cách mà danh sách được sắp xếp chứa giá theo thứ tự tăng dần và hàm lượng vitamin theo thứ tự giảm dần.N P i V i f i ( P i , V i )F= ={f1,f2,f3,Giáo dục,fN}NPTôiVTôifTôi(PTôi,VTôi)

Ví dụ 1 : N= =4F= ={(2,số 8),(5,11),(7,9),(10,2)} .

Nếu chúng tôi sắp xếp danh sách sao cho tất cả giá đều theo thứ tự tăng dần và hàm lượng vitamin theo thứ tự giảm dần, thì danh sách hợp lệ là như sau:

  • [(2,số 8)]
  • [(5,11)]
  • [(7,9)]
  • [(10,2)]
  • [(2,số 8),(10,2)]
  • [(5,11),(7,9)]
  • [(5,11),(10,2)]
  • [(7,9),(10,2)]
  • [(5,11),(7,9),(10,2)]

Từ các danh sách trên, tôi muốn chọn danh sách kích thước tối đa. Nếu có nhiều danh sách có kích thước tối đa, chúng ta nên chọn danh sách kích thước tối đa có tổng giá là ít nhất. Danh sách nên được chọn trong ví dụ trên là {(5,11),(7,9),(10,2)} .

Ví dụ 2 : N= =10

F= ={(99,10),(12,23),(34,4),(10,5),(87,11),(19,10),(90,18),(43,90),(13,100),(78,65)}

Câu trả lời cho ví dụ này là [(13,100),(43,90),(78,65),(87,11),(99,10)] .

Cho đến bây giờ, đây là những gì tôi đã và đang làm:

  1. Sắp xếp danh sách ban đầu theo thứ tự tăng dần của giá;
  2. Tìm tất cả các phần sau của danh sách được sắp xếp;
  3. Kiểm tra xem các thứ tự có hợp lệ không, và so sánh tất cả các thứ tự hợp lệ.

Tuy nhiên, điều này cần thời gian theo cấp số nhân; Làm thế nào tôi có thể giải quyết vấn đề này hiệu quả hơn?

Câu trả lời:


5

Một giải pháp lập trình động sẽ hoạt động ở đây, nếu hàm lượng vitamin đến từ một tập hợp hữu hạn (ví dụ: số nguyên giới hạn). Đầu tiên, sắp xếp các loại trái cây theo giá tăng dần và trong trường hợp là hai hoặc nhiều loại trái cây có cùng giá, hãy phân loại chúng theo hàm lượng vitamin (giảm dần). Bây giờ, xác định là số tối đa của các loại trái cây trong một sublist, chỉ chứa cuối cùng quả (danh sách được sắp xếp), có hàm lượng vitamin ít nhất . và Sử dụng lập trình động cung cấp cho bạn một giải pháp chạy trongM[f,v]fvM[0,*]= =0

M[f,v]= ={mmộtx{M[f-1,v],1+M[f-1,Vf]}nếu Vf<=vM[f-1,v]nếu không thì
Ôi(số lượng trái cây×giá trị vitamin có thể) .

:: Bạn có thể cụ thể hơn xin vui lòng?
Jack

Vâng, bạn muốn biết thêm chi tiết về cái gì? Bạn không quen thuộc với lập trình động?
Tom van der Zanden
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.