1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Nguyên lý và phương pháp lập trình: Tối ưu hóa vòng lặp và logic - TS. Nguyễn Tuấn Đăng

32 16 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Định dạng
Số trang 32
Dung lượng 84,93 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Nguyên lý và phương pháp lập trình giúp người học hiểu về Tối ưu hóa vòng lặp và logic. Nội dung trình bày cụ thể gồm có: Chuyển các phát biểu ra khỏi vòng lặp, giảm các kiểm tra ñiều kiện, các phần tử cầm canh, loại bỏ vòng lặp 2, loại bỏ vòng lặp, kết hợp các vòng lặp,...

Trang 1

Tối ưu hóa vòng lặp và logic

Nguyên lý và phương pháp lập trình

Tối ưu hóa vòng lặp và logic

TS Nguyễn Tuấn ðăng

Trang 2

Nội dung

• Các biến ñổi vòng lặp

– Chuyển các phát biểu ra khỏi vòng lặp

– Giảm các kiểm tra ñiều kiện

+ Các phần tử cầm canh

– Loại bỏ vòng lặp

– Loại bỏ vòng lặp

– Kết hợp các vòng lặp

Trang 3

Nội dung

• Các biến ñổi logic

– Sử dụng các biểu thức tương ñương

– Ngưng kiểm tra ñiều kiện khi ñã biết kết quả

– Thứ tự kiểm tra các ñiều kiện

– Tính toán trước các hàm

Trang 4

1 Các biến ñổi vòng lặp

– Chuyển các phát biểu ra khỏi vòng lặp

– Giảm các kiểm tra ñiều kiện

+ Các phần tử cầm canh

– Giải phóng vòng lặp

– Giải phóng vòng lặp

– Kết hợp các vòng lặp

Trang 5

Chuyển các phát biểu ra khỏi vòng lặp

• Ý tưởng: Nếu có một biểu thức hay một

khối phát biểu cho kết quả không ñổi trong vòng lặp thì chuyển nó ra ngoài vòng lặp

• Loại bỏ việc tính toán lại một biểu thức

nhiều lần (cho ra cùng kết quả)

Trang 6

Chuyển các phát biểu ra khỏi vòng lặp

Trang 7

Chuyển các phát biểu ra khỏi vòng lặp

Trang 8

Chuyển các phát biểu ra khỏi vòng lặp

trở thành

if (a < b) {

for (int i=1; i<k; i++) { p(i); }} else {

for (int i=1; i<k; i++) { q(i); }

for (int i=1; i<k; i++) { q(i); }}

• Hai vòng lặp ñược duy trì song song

Trang 9

Giảm các kiểm tra ñiều kiện

• Ý tưởng: Nên có càng ít các kiểm tra ñiều

kiện vòng lặp càng tốt, tốt nhất chỉ nên có một kiểm tra ñiều kiện vòng lặp

Trang 10

Các phần tử cầm canh

• Ý tưởng: Nếu vòng lặp là một mảng tìm

kiếm một chiều thì ñặt một phần tử vào cuối dãy cần tìm kiếm và loại bỏ ñiều kiện so sánh kiểm tra trong chỉ số vòng lặp

• Ví dụ: Tìm trong một phần tử trong ñoạn

Trang 11

while (item(i) != searchValue) {

while (item(i) != searchValue) {

i = i+1;

}

item(n+1) = save;

if (i <= n) { }

Trang 12

Các phần tử cầm canh

• Thông thường ít khi cần ghi nhớ và phục hồi

lại phần tử ở vị trí cầm canh

Trang 13

Loại bỏ vòng lặp

• Ý tưởng: Loại bỏ (một phần) chi phí tính

toán các chỉ số vòng lặp bằng cách xây dựng một biểu thức với các thành phần xác ñịnh

Trang 14

(2) ðơn giản hóa kết quả bằng cách áp dụng các biến ñổi phụ

Trang 16

Kết hợp các vòng lặp

• Ý tưởng: Nếu hai vòng lặp thao tác trên

cùng các ñối tượng thì kết hợp hai thân vòng lặp vào cùng một vòng lặp

Trang 17

• Lưu ý rằng các phát biểu của Body A và

Body B ñược ñan xen vào nhau

Trang 18

Kết hợp các vòng lặp

• Xem biến ñổi sau:

public void p(a,b,n) {

Trang 20

2 Các biến ñổi logic

- Sử dụng các biểu thức tương ñương

- Ngưng kiểm tra ñiều kiện khi ñã biết kết

quả

- Thứ tự kiểm tra các ñiều kiện

- Tính toán trước các hàm

Trang 21

Sử dụng các biểu thức tương ñương

• Ý tưởng: Nếu việc ñánh giá một biểu thức

logic quá phức tạp, thay thế nó bằng một biểu thức tương ñương nhưng ñơn giản hơn

Trang 22

Sử dụng các biểu thức tương ñương

Trang 23

Sử dụng các biểu thức tương ñương

• Ví dụ 2: (Giả sử có các số thực dương)

trở thành

Trang 24

Ngưng kiểm tra ñiều kiện nếu biết

ñược kết quả

• Ý tưởng: Không cần kiểm tra thêm ñiều

kiện nếu không cần thiết

}

Trang 25

Ngưng kiểm tra ñiều kiện nếu biết

Trang 26

Ngưng kiểm tra ñiều kiện nếu biết

Trang 27

Ngưng kiểm tra ñiều kiện nếu biết

Trang 28

Thứ tự kiểm tra các ñiều kiện

• Ý tưởng: Các kiểm tra logic có thể ñược sắp xếp

sao cho các kiểm tra có chi phí thấp và thường xuyên ñúng nằm ở trước các kiểm tra có chi phí cao và ít khi ñúng

• Ví dụ: Giả sử các có các vị từ a và b, chi phí

kiểm tra a 100mSec, và b là 1mSec.

kiểm tra a 100mSec, và b là 1mSec.

Trang 29

Thứ tự kiểm tra các ñiều kiện

Trang 30

Thứ tự kiểm tra các ñiều kiện

Trang 31

Tính toán trước các biểu thức

• Ý tưởng: Thay thế bằng một bảng các giá trị tính

toán trước cho các biểu thức phức tạp (trên một miền giá trị hữu hạn)

• Ví dụ:

Type characterType = (UpperCase,

Type characterType = (UpperCase, LowerCase, …);

var cType: characterType;

case inputChar of

A Z: cType := UpperCase;

Trang 32

Tính toán trước các biểu thức

trở thành

var cType: characterType;

cTypeTable: array[char] of characterType;cType := cTypeTable[inputChar];

Ngày đăng: 11/05/2021, 00:00

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm