CHƯƠNG 3 VIẾT CODE HIỆU QUẢ

94 1.6K 0
CHƯƠNG 3 VIẾT CODE HIỆU QUẢ

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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

Ngày đăng: 11/11/2015, 16:55

Từ khóa liên quan

Mục lục

  • Chương 3. Viết code hiệu quả (3LT – 2BT)

  • Efficient Programs

  • Dùng chỉ thị chương trình dịch

  • Nhưng...

  • Writing Efficient Code

  • Khởi tạo 1 lần, dùng nhiều lần

  • Inline functions

  • Slide 8

  • Static Variables

  • Slide 10

  • Macros

  • Tính toán trước các giá trị

  • Loại bỏ những biểu thức “thông thường”

  • Sử dụng các biến đổi số học!

  • Dùng “lính canh” -Tránh những kiểm tra không cần thiết

  • Dùng “lính canh” ….

  • Dịch chuyển những biểu thức bất biến ra khỏi vòng lặp

  • Không dùng các vòng lặp ngắn

  • Giảm thời gian tính toán

  • Tính Sigmoid

Tài liệu cùng người dùng

Tài liệu liên quan