Hãy bắt đầu với quan sát sau:
Đặt biểu thị mức tối đa của chuỗi và để biểu thị mức tối thiểu của chuỗi . Nếu , thì chọn là tối ưu.a 1 , . . . , a n m i n a 1 = m a x b 1 = b 2 = . . . = B n = ⌊ ( m một x + m i n ) / 2 ⌋maxa1,...,anmina1=maxb1=b2=...=bn=⌊(max+min)/2⌋
Tại sao điều này là trường hợp? Chà, vì chuỗi bắt đầu với mức tối đa, chúng tôi chọn b1 lớn và chịu độ lệch lớn so với mức tối thiểu của chuỗi (vì bất kỳ b_i tiếp theo nào bicũng phải lớn hơn hoặc bằng b1 ), hoặc chúng tôi chọn b1 nhỏ và chịu đựng độ lệch để max . Trung bình giảm thiểu độ lệch tối đa.
Bây giờ chúng ta có thể cố gắng khái quát hóa quan sát này để sử dụng trên các chuỗi chung a1,...,an . Chẳng hạn, chúng ta có thể phân vùng bất kỳ chuỗi nào thành các chuỗi con, sao cho mỗi chuỗi bắt đầu với mức tối đa của chuỗi con tương ứng.
Ví dụ: được phân chia thành , và .( 2 ) ( 6 , 4 , 1 , 5 , 2 ) ( 8 , 7 , 5 , 1 )(2,6,4,1,5,2,8,7,5,1)(2)(6,4,1,5,2)(8,7,5,1)
Với phân vùng này, giờ đây chúng ta có thể giải quyết riêng từng chuỗi này và nhận được sự phân công của , tuy nhiên có thể vi phạm điều kiện không giảm. Điều này có thể được sửa chữa mà không mất đi sự tối ưu.bi
Quan sát rằng chuỗi con cuối cùng luôn chứa tối đa tối của toàn bộ chuỗi (nếu không, sẽ có một chuỗi con khác sau chuỗi đó). Đặt là các giá trị chúng ta đã gán cho các chuỗi con . Bây giờ, để đạt được mức độ không giảm trong , chúng tôi bắt đầu từ phía sau tại và tiến lên phía trước. Nếu lớn hơn , chúng ta chỉ cần đặt . Nếu nó nhỏ hơn, chúng tôi giữ nó. Sau đó, chúng tôi tiến hành so sánh với , v.v. Lưu ý rằng việc hạ bất kỳ nào xuống giá trị củaw 1 , w 2 , . . . , w k k w 1 , . . . , w k w k w k - 1 w kmaxw1,w2,...,wkkw1,...,wkwkwk−1wkwk−1:=wkwk−2wk−1wiwi+1không bao giờ tăng độ lệch, vì giá trị maximium trong chuỗi con được gán với luôn luôn thấp hơn mức tối đa trong chuỗi con được gán với .wiwi+1
Thuật toán này nên chính xác, tôi nghĩ. Liên quan đến thời gian chạy, bước quan trọng là tính toán cực đại ngày càng tăng cho các chuỗi con, điều này có thể xảy ra trong không? Không chắc chắn nơi đóng góp.O(n)l