Trong lĩnh vực Công Nghệ Thông Tin nói riêng, yêu cầu quan trọng nhất của người học đó chính là thực hành. Có thực hành thì người học mới có thể tự mình lĩnh hội và hiểu biết sâu sắc với lý thuyết. Với ngành mạng máy tính, nhu cầu thực hành được đặt lên hàng đầu. Tuy nhiên, trong điều kiện còn thiếu thốn về trang bị như hiện nay, người học đặc biệt là sinh viên ít có điều kiện thực hành. Đặc biệt là với các thiết bị đắt tiền như Router, Switch chuyên dụng
Trang 1Chương 3:
Kỹ thuật tối ưu hóa chương trình
Trịnh Huy HoàngKhoa Công nghệ thông tinĐại học Sư phạm TPHCM
Trang 2Nội dung
Các mức thiết kế một chương trình
Các kỹ thuật tối ưu hóa chương trình
– Kỹ thuật tinh chế mã
– Kỹ thuật tối ưu hóa rẽ nhánh
– Kỹ thuật tối ưu hóa các vòng lặp
– Tối ưu hóa chương trình bằng bảng truy cập
– Tối ưu bằng cách giảm thiểu gọi chương trình con
Trang 3Các mức thiết kế một chương trình
1. Đặc tả bài toán
2. Thiết kế cấu trúc hệ thống
3. Cấu trúc dữ liệu và thuật toán
4. Tinh chế mã (tối ưu hóa chương trình)
5. Tính độ phức tạp của thuật toán
Trang 4Lưu ý
+ Không nên mã hóa 1 chương trình ngay khi chỉ mới có ý tưởng đầu tiên mà phải xem xét tất cả các mức thiết kế có thể để chọn ra 1 thiết kế làm tăng tốc nhanh nhất với phí tổn ít nhất
+ Nên thử nhiều mức thiết kế khác nhau bằng
cách giải quyết bài toán trên nhiều mặt từ đó
chọn được 1 thiết kế tối ưu về không gian và thời gian
Trang 5Kỹ thuật tinh chế mã
gian hoặc không gian (rất khó thực hiện
được cả hai), nếu muốn tối ưu cả hai khía
cạnh trên thì ta phải thay đổi thuật toán Ở
chương này ta xét các kỹ thuật tối ưu
chương trình về mặt cấu trúc, tìm 1 thuật giải
có độ phức tạp tốt nhất có thể
Trang 6Ví dụ 1: Viết chương trình tính tổng S=1+x/1!+x2/2!+…+xn/n!
Trang 7Kỹ thuật tối ưu hóa rẽ nhánh
A1 and A2 and …An theo xác suất sai của các điều kiện Aigiảm dần
A1 or A2 or …An theo xác suất đúng của các điều kiện Ai giảm dần
Trang 8Ví dụ: Cho 2 dãy số nguyên A, B lần lượt có số phần tử là m và n A=B?
if ((m=n)&& Chua(a,b) && Chua(b,a)
printf(“Hai day bang nhau”);
else
Trang 9Ví dụ: Nhập số tự nhiên n, nếu n là số có 1 trong các tính chất (lẻ, nguyên tố, chính phương,
hoàn hảo) thì thực hiện S1, ngược lại S2
if (le(n)||nguyento(n)||chinhphuong(n)||hoanhao(n))
printf(“Thuc hien S1”);
else
printf(“Thuc hien S2”);
Trang 10Kỹ thuật tối ưu hóa các vòng lặp
hiện nhiều hơn cho mỗi vòng lặp và chú ý vòng lặp ít hơn thì đặt ở ngoài
Trang 11Ví dụ: Giải bài toán cổ (gà - chó…)
Trang 12Kỹ thuật tối ưu hóa các vòng lặp
vào chỉ số lặp ra khỏi vòng lặp
Trang 14Kỹ thuật tối ưu hóa các vòng lặp
Trang 16Kỹ thuật tối ưu hóa các vòng lặp
Trang 17Ví dụ:Cải tiến phương pháp sắp xếp
Trang 18Tối ưu hóa chương trình bằng bảng truy cập
Newton ta có thể thiết kế đoạn chương trình sau:
Int ckn(int k,int n)
{ if((k==0)||(k==n)) return 1;
}
Trang 20Tối ưu bằng cách giảm thiểu gọi
chương trình con
Trang 21Ví dụ: tính (sinx+cosx)+ (sin2x+cos2x) +…+ (sinnx+cosnx)