Dãy con phải liên tục
Một tổng con S(i,j)=A[i]+…+A[j] lấy đủ các phần tử liên tiếp từ i tới j, gồm cả hai đầu. Với dãy không rỗng, yêu cầu tìm một dãy con **không rỗng** có tổng lớn nhất; không được tùy ý chỉ chọn các số dương nằm cách nhau.
Chia tại mid. Dãy con tốt nhất hoặc nằm hoàn toàn bên trái, hoặc bên phải, hoặc có phần ở cả hai phía. Hai trường hợp đầu do đệ quy tìm. Đoạn chéo cần một hậu tố của nửa trái kết thúc tại mid và một tiền tố của nửa phải bắt đầu tại mid+1.
Tổng chéo qua ranh giới
Với A=[−4,5,−2,4,−6], mid=2:
| Khả năng | Dãy con tốt nhất | Tổng |
|---|---|---|
| Nằm trái, chỉ số 0…2 | [5] | 5 |
| Nằm phải, chỉ số 3…4 | [4] | 4 |
| Qua ranh giới | [5,−2] ghép [4] | 3+4=7 |
Đoạn tốt nhất là chỉ số 1…3, gồm [5,−2,4], tổng 7. Số −2 vẫn phải giữ vì nằm giữa5 và 4. Chọn riêng 5 và 4 để lấy 9 không còn là dãy con liên tục.
Tìm hậu tố trái bằng cách cộng từ mid lùi về left và giữ tổng lớn nhất; tìm tiền tố phải từ mid+1 tiến tới right. Phải lấy ít nhất một phần tử mỗi phía cho đoạn chéo.
Toàn số âm vẫn phải chọn một đoạn không rỗng
Với A=[−7,−2,−5], tổng lớn nhất là −2, thuộc dãy con [−2]. Không trả 0 bằng cách chọn đoạn rỗng, vì yêu cầu với đầu vào không rỗng đang tìm đoạn không rỗng.
Nếu đầu vào thực sự rỗng thì không có dãy con như vậy; hàm dùng tín hiệu riêng, không dùng0 như một tổng đã tìm thấy. Khi nhiều đoạn cùng tổng lớn nhất, chỉ cần một đoạn hợp lệ, chưa yêu cầu đoạn ngắn nhất hay đầu tiên.
Bài luyện
Với A=[−4,5,−2,4,−6], dãy con nào đạt tổng lớn nhất?
Bỏ phần tử ở giữa vi phạm tính liên tục.
Tổng toàn dãy nhỏ hơn 7.
Đầu vào không rỗng cần chọn đoạn không rỗng.
Đây là đoạn liên tục chỉ số 1…3.
Lời giải
Đoạn trái tốt nhất có tổng 5, phải có tổng 4, chéo có tổng 3+4=7. Vì 7 lớn nhất, nhận đoạn [5,−2,4]; không được bỏ−2 nằm giữa.
Bài luyện
Đoạn đi qua ranh giới được ghép thế nào?
Hai phần ghép lại liên tục qua ranh giới.
Các khoảng trống sẽ làm mất tính dãy con liên tục.
Hai giá trị có thể cách nhau qua các phần tử chưa được lấy.
Đoạn tối ưu có thể bỏ các phần ở đầu/cuối.
Lời giải
Một đoạn chéo liên tục phải đi tới cuối nửa trái và bắt đầu ngay đầu nửa phải. Tối đa hóa riêng hậu tố trái và tiền tố phải rồi cộng sẽ cho đoạn chéo tốt nhất.
Bài luyện
Tổng con không rỗng lớn nhất của [−7,−2,−5] là gì?
Không có đoạn nào cho tổng dương2.
Chọn đoạn một phần tử[−2].
0 chỉ có thể được dùng bằng cách cho phép đoạn rỗng, khác yêu cầu.
Tổng toàn dãy nhỏ hơn −2.
Lời giải
Mọi số đều âm nên ghép thêm phần tử chỉ làm tổng giảm. Trong các đoạn một phần tử,−2 lớn nhất, do đó tổng tối ưu là −2.
Đang học