Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 94 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
94
Dung lượng
1,29 MB
Nội dung
Chương Viết code hiệu qua (3LT – 2BT) Last update 8-2010 SE-SoICT KTLT-3.1 Efficient Programs • Trước hếết giải thuật – Hãy dùng giải thuật hay nhấế t – Sau nghĩ tới việc tăng tính hiệu code – Ví dụ : Tính tổng n sốếtự nhiến kếếtừ m void main() { long n,m,i , sum ; cout [...]... Đơn giản hóa Code – Code Simplification : Hấồ u hếết các chương trình chạy nhanh là đ ơn gi ản Vì v ậy, hãy đơn giản hóa chương trình để nó ch ạy nhanh h ơn Tuy nhiến… Đơn giản hóa vấn đề - Problem Simplification: Để tăng hiệu quả của chương trình, hãy đ ơn gi ản hóa vấế n đếồ mà nó giải quyếết Khống ngừng nghi ngờ - Relentless Suspicion: Đặt dấế u hỏi vếồsự cấồn thiếết của m ỗi m ẩu code và m... tính : – Mỗi lấồn gọi mấết khoảng 30 nanoseconds • Tốếc độ tăng gập 10 lấồ n – Đổi lại phải tốế n kếếm thếm từ 64K -> 640 K bộ nhớ Last update 6-2010 SE-SoICT KTLT -3. 26 Lưu ý ! • Với phấồn lớn các chương trình, việc tăng tốếc độ thực hiện là cấồn thiếết • Tuy nhiến, cốếtăng tốếc độ cho những đoạn code khống sử dụng thường xuyến là vố ích ! Last update 6-2010 SE-SoICT KTLT -3. 27 Những quy tắc cơ bản Fundamental... SE-SoICT KTLT -3. 11 Tính toán trước các giá trị • Nếếu bạn phải tính đi tính lại 1 biểu thức, thì nến tính trước 1 lấồn và lưu lại giá trị, rốồi dùng giá trị ấếy sau này int f(int i) { if (i < 10 && i >= 0) { return i * i - i; } return 0; } Last update 6-2010 static int[] values = {0, 0, 2 ,3* 3 -3, , 9*99}; int f(int i) { if (i < 10 && i >= 0) return values[i]; return 0; } SE-SoICT KTLT -3. 12 Loại bỏ những... t quả thay vì tính lại hàm • Last update 6-2010 SE-SoICT KTLT -3. 29 Quy tắc tăng tốc độ : cont • Caching: Dữ liệu thường dùng cấồ n phải dễ tiếếp cận nhấết, luốn hiện hữu • Lazy Evaluation: Khống bao giờ tính 1 phấồ n tử cho đếến khi cấồn để tránh những sự tính toán khống cấồn thiếết Last update 6-2010 SE-SoICT KTLT -3. 30 Quy tắc lặp : Loop Rules Những điểm nóng - Hot spots trong phần lớn các chương. .. lo ại b ỏ vòng lặp, tránh phải thay đổi và kiểm tra điếồu kiện lặp Last update 6-2010 SE-SoICT KTLT -3. 32 Procedure Rules • Khai báo những hàm ngăế n và đơn giản (thường chỉ 1 dòng) là inline – Tránh phải thực hiện 4 bước khi hàm được gọi – Tránh dùng bộ nhớ stack Last update 6-2010 SE-SoICT KTLT -3. 33 GOOD PROGRAMMING STYLE Sau đấy là các quy tăếc vếồ“programming style “ rút ra t ừ cuốến “The Elements... dụng thư viện mọi khi có thể 4 Avoid too many temporary variables – Tránh dùng nhiều biến trung gian 5 Write clearly / don't sacrifice clarity for efficiency – Viết rõ ràng / đừng hy sinh sự rõ ràng cho hiệu quả Last update 6-2010 SE-SoICT KTLT -3. 36 ... hiện Last update 6-2010 SE-SoICT KTLT -3. 24 Tính Sigmoid (tiếp) • Bạn đã biếết X0 – Tính Delta = X1-X0 – Tính Xmax = X0 + N * Delta; • Với X đã cho – Tính i = (X – X0)/Delta; • 1 phép trừ sôốthực và 1 phép chia sôốthực – Tính sigmoid(x) • 1 phép nhân float và 1 phép cộng float Last update 6-2010 SE-SoICT KTLT -3. 25 Kết quả • Nếếu dùng exp(x) : – Mỗi lấồn gọi mấết khoảng 30 0 nanoseconds với 1 máy Pentium... strlen(str); len = strlen(str); for (i = 1;i sqrt(b)) x = a*a + 3* a + 2; Ít phép nhân hơn! Last update 6-2010 if (a *a > b) x = (a+1)*(a+2); SE-SoICT KTLT -3. 14 Dùng “lính canh” -Tránh những kiểm tra không cần thiết • Trước char s[100], searchValue; int pos,tim,... trong 1 CT con, thì đừng dùng nó cho việc khác trong các CT con khác Last update 6-2010 SE-SoICT KTLT -3. 35 GOOD PROGRAMMING STYLE 1 Write clearly / don't be too clever – Viết rõ ràng – đừng quá thông minh (kỳ bí) 2 Say what you mean, simply and directly – Trình bày vấn đề 1 cách đơn giản, trực tiếp 3 Use library functions whenever feasible – Sử dụng thư viện mọi khi có thể 4 Avoid too many temporary... x5 sigmoid(x0) x6 sigmoid(x0) x99 sigmoid(x99) Last update 6-2010 SE-SoICT KTLT -3. 22 Tính Sigmoid (tiếp) if (x x99) return (1.0); SE-SoICT KTLT -3. 23 Tính Sigmoid (tiếp) • Chọn sốếcác điểm (N = 1000, 10000, v.v.) tùy theo độ chính ... patch bad code /{ rewrite it – Không chắp vá mã xấu – Viết lại đoạn code 17 Write and test a big program in small pieces – Viết kiểm tra CT lớn thành CT Last update 6-2010 SE-SoICT KTLT -3. 38 GOOD... thực đặc biệt 34 Keep it simple to make it faster – Hãy giữ đơn giản để làm cho nhanh 35 Make sure comments and code agree – Chú thích phải rõ ràng, sát code 36 Don't comment bad code | rewrite... KTLT -3. 4 Writing Efficient Code • Xác định nguốồn gấy hiệu quả: – Dư thừa tính toán - redundant computation – Chủ yếếu • Trong procedures • Các vòng lặp : Loops Last update 6-2010 SE-SoICT KTLT -3. 5