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

Kỹ thuật tối ưu hóa chương trình

19 1,2K 16

Đ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 19
Dung lượng 277,88 KB

Nội dung

Kỹ thuật tối ưu hóa chương trìnhNội dung:1. Các mức thiết kế một chƣơng trình2. 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ậpTrƣớc khi viết chƣơng trình:+ 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.

Trang 1

CHƯƠNG 4:

MỘT SỐ VẤN ĐỀ MỞ RỘNG

KỸ THUẬT TỐI ƯU HÓA CHƯƠNG TRÌNH

Trang 2

NỘI DUNG

1. Các mức thiết kế một chương trình

2. 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

Trang 3

1 C Á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 4

LƯU Ý

 Trước khi viết chương trình:

+ 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 5

2 CÁC KỸ THUẬT TỐI ƯU HÓA CHƯƠNG TRÌNH

K Ỹ THUẬT TINH CHẾ MÃ

 Tối ưu chương trình:

 về mặt thời 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

 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 6

VÍ DỤ 1: VIẾT CHƯƠNG TRÌNH TÍNH TỔNG

S=1+X/1!+X2/2!+…+XN/N!

s=1;

for(i=1;i<=n;i++)

{

p=1;

for(j=1;j<=i;j++)

p=p*x/j;

s=s+p;

}

s=1;p=1;

for(i=1;i<=n;i++) {

p=p*x/i;

s=s+p;

}

2 CÁC KỸ THUẬT TỐI ƯU HÓA CHƯƠNG TRÌNH

K Ỹ THUẬT TINH CHẾ MÃ

Trang 7

Qui tắc 1: Sắp xếp biểu thức điều kiện dạng A1

and A2 and …An theo xác suất sai của các điều

kiện Ai giảm dần

Qui tắc 2: Sắp xếp biểu thức điều kiện dạng A1 or

A2 or …An theo xác suất đúng của các điều kiện Ai

giảm dần

2 CÁC KỸ THUẬT TỐI ƯU HÓA CHƯƠNG TRÌNH

K Ỹ THUẬT T ỐI ƯU HÓA RẼ NHÁNH

Trang 8

V Í DỤ : C HO 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

printf(“Hai day khong bang nhau”);

Trang 9

VÍ 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 10

Qui tắc 1: Giảm số vòng lặp bằng cách thực 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

2 CÁC KỸ THUẬT TỐI ƯU HÓA CHƯƠNG TRÌNH

K Ỹ THUẬT T ỐI ƯU HÓA CÁC VÒNG LẶP

Trang 11

VÍ DỤ: GIẢI BÀI TOÁN CỔ (GÀ - CHÓ…)

for(x=1;x<=24;x++)

for(y=1;y<=35;y++)

if((x+y=36)&&(2*x+4*y==100)) printf(“%d%d”,x,y);

for(x=1;x<=24;x++)

{ y=36-x;

if(2*x+4*y==100)

printf(“%d%d”,x,y);

}

Trang 12

Qui tắc 2: Tách các lệnh không phụ thuộc vào chỉ

số lặp ra khỏi vòng lặp

2 CÁC KỸ THUẬT TỐI ƯU HÓA CHƯƠNG TRÌNH

K Ỹ THUẬT T ỐI ƯU HÓA CÁC VÒNG LẶP

Trang 13

V Í DỤ : V IẾT CT TÍNH TỔNG

S=1/1!+3/2!+…+(2 N -1)/ N !

s=0;

for(i=1;i<=n;i++)

{ gt=1;

for(j=1;j<=i;j++)

gt=gt*j;

s=s+(2*j-1)/gt;

}

s=0;

gt=1;

for(i=1;i<=n;i++) { gt=gt*i;

s=s+(2*i-1)/gt; }

Trang 14

Qui tắc 3: Hợp các vòng lặp có thể

2 CÁC KỸ THUẬT TỐI ƯU HÓA CHƯƠNG TRÌNH

K Ỹ THUẬT T ỐI ƯU HÓA CÁC VÒNG LẶP

Trang 15

VÍ DỤ: VIẾT CT TÍNH TỔNG CÁC PHẦN TỬ TRÊN ĐƯỜNG

s1=0;

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

if(i==j) s1=s1+a[i][j];

s2=0;

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

if(i+j==n+1) s2=s2+a[i][j];

s1=0;

for(i=1;i<=n;i++)

s1=s1+a[i][j];

s2=0;

for(i=1;i<=n;i++)

s2=s2+a[i][n-i+1];

Trang 16

Qui tắc 4: Làm nhiều hơn trong 1 vòng lặp

2 CÁC KỸ THUẬT TỐI ƯU HÓA CHƯƠNG TRÌNH

K Ỹ THUẬT T ỐI ƯU HÓA CÁC VÒNG LẶP

Trang 17

V Í DỤ :C ẢI TIẾN PHƯƠNG PHÁP SẮP XẾP

D OUBLE SORT

i=1;

while(i<n)

{ j=i+1;

while(j<=n)

{

if(a[i]>a[j]) {t=a[i];a[i]=a[j];a[j]=t;}

j=j+1;

}

i++;

}

i=1;

while(i<n) { j=i+1;

while(j<=n) { if(a[i]>a[j]) {t=a[i];a[i]=a[j];a[j]=t;}

if((j+1<=n)&&(a[i]>a[j+1])) {t=a[i];a[i]=a[j+1];a[j+1]=t;} j=j+2;

} i=i+1;

 }

Trang 18

 Nếu viết các hệ số trong khai triển nhị thức

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;

else return ckn(k,n-1)+ckn(k-1,n-1);

}

2 CÁC KỸ THUẬT TỐI ƯU HÓA CHƯƠNG TRÌNH

K Ỹ THUẬT T ỐI ƯU HÓA CHƯƠNG TRÌNH BẰNG BẲNG TRUY CẬP

Trang 19

CẢI TIẾN

for(i=1;i<=n;i++)

{c[i][1]=1;c[i][i]=1;}

for(i=2;i<=n;i++)

{ ii=(i-1)/2+1;

for(j=2;j<=ii;j++)

{c[i][j]=c[i-1][j]+c[i-1][j-1]; c[i][i-j+1]=c[i][j];

} }

Ngày đăng: 19/06/2014, 10:54

TỪ KHÓA LIÊN QUAN

w