Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (159.17 KB, 15 trang )
Ví dụ nếu X = [1, 3, 2, 3] thì dãy con tương ứng với chuỗi nhị phân b = 1010 là [1, 3].
Như vậy, số dãy con của X cũng chính là số chuỗi nhị phân có độ dài n chính là 2 n. Mặc
dù có thể với 2 chuỗi nhị phân khác nhau sẽ tương ứng với cùng một dãy con (với
mảng X = [1, 3, 2, 3], hai chuỗi 1100 và 1001 cùng tương ứng với dãy con [1, 3]), nhưng
nếu lập trình bình thường để duyệt tất cả các dãy con của X thì phải duyệt 2 n phần tử.
Với n = 100 thì có đến 2100≈ 1030 dãy con.
-
Phương án khả thi:
Phương án duyệt tất cả các dãy con để tìm kết quả tối ưu có độ phức tạp là O (2 n),
rõ ràng là không khả thi khi n lớn. Do đó chúng ta sẽ sử dụng thuật toán quy hoạch động
để giải bài toán.
3. Ý tưởng
- Đầu tiên xét for (int i=1; i
- Kiểm tra nếu a[i - 1] < = a [i] thì dãy tăng, ta thực hiện
{
maxT=lt[i-1]+1;
}
lt[i] = maxT;
if(maxT > maxTang)
{
maxTang = maxT;
}
Nếu a[i ] < = a [i - 1] thì dãy giảm, ta thực hiện
{
maxG=lg[i-1]+1;
}
lg[i]=maxG;
12
if(maxG > maxGiam)
{
maxGiam = maxG;
}
}
- Ta thực hiện xét các trường hợp như vậy cho đến phần tử cuối cùng. Sau đó so
sánh độ dài của các dãy con mà ta đã tìm được ở trên. Dãy nào có độ dài lớn nhất và liên
tiếp thì ta chọn. Nếu 2 dãy có độ dài bằng nhau thì kết quả sẽ trả ra cả 2 dãy.
4. Ví dụ mô phỏng thuật toán
Cho dãy X = { 12, 2, 3, 4, 6, 7, 1, 9, 10 } có giá trị i tương ứng từ 1 đến 9
i = 1, ta đưa 12 vào dãy, dãy có 1 phần tử
i = 2, ta xét 12< 2, dãy giảm, đưa 2 vào ta được dãy {12,2}
i = 3, ta thấy 2<3, dãy tăng, đưa 2,3 vào dãy ta được dãy mới {2,3}
i = 4, ta thấy 3< 4, dãy tăng, đưa 4 vào ta được dãy {2,3,4}
i = 5, ta thấy 4<6, dãy tăng, đưa 6 vào ta được {2,3,4,6}
i = 6, ta thấy 6< 7, dãy tăng, đưa 7 vào ta được {2,3,4,6,7}
i = 7, ta thấy 7> 1, dãy giảm, đưa 7,1 vào dãy mới {7,1}
i = 8, ta thấy 1< 9, dãy tăng, đưa 1,9 vào dãy mới {1,9}
i = 9, ta thấy 9< 10, dãy tăng, đưa 10 vào dãy ta được {1,9,10}
Ta thấy dãy đơn điệu gồm các phần tử liên tiếp tăng dài nhất có 5 phần tử là dãy
{2,3,4,6,7}
13
TÀI LIỆU THAM KHẢO
1. Bài giảng cấu trúc dữ liệu và giải thuật – TS Đào Thanh Tĩnh – Trường học viện
kỹ thuật quân sự.
2. http://timtailieu.vn/tai-lieu/mot-so-bai-toan-quy-hoach-dong-dien-hinh-day-condon-dieu-dai-nhat-26099/
3. http://agreenet.vn/baiviet/laptrinh/?eq=Ak7wytsN1FioiDjzqOJaPQ
4. http://fit-hitu.edu.vn/forum/thread-1397.html
5. Giải thuật và lập trình – Lê Minh Hoàng – Đại học sư phạm Hà Nội, 1999 - 2002
14