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

Cấu trúc dữ liệu - Phần 2 docx

12 151 0

Đ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 12
Dung lượng 345,22 KB

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

Nội dung

Trang 1

GVGD: Tr ng Ph c H i

Phân tích gi i thu t

2

N i dung

1 ánh giá gi i thu t

3 Quy t c xác đ nh đ ph c t p

4 ánh giá các c u trúc đi u khi n

2 ph c t p c a gi i thu t

ánh giá gi i thu t

M i bài toán có th có nhi u ph ng pháp (gi i

thu t) đ gi i quy t

ánh giá gi i thu t là vi c làm c n thi t đ l a

ch n gi i thu t t i u cho bài toán

Gi i thu t đ c đánh giá d a trên các tiêu chí

Trang 2

4

ánh giá gi i thu t

 Tính đúng đ n c a gi i thu t có th đ c ch ng

minh b ng công c toán h c (s d ng b test ch

giúp phát hi n gi i thu t sai)

Gi i thu t đ n gi n d n đ n ch ng trình đ c cài

đ t d dàng (ti t ki m th i gian vi t mã l nh)

i v i ch ng trình c n x lý d li u l n thì th i

gian th c thi là tiêu chí đ c bi t quan tr ng

5

ánh giá gi i thu t

 Tính hi u qu c a gi i thu t đ c đo l ng d a

vào t c đ th c thi khi đ c cài đ t trên máy tính

Th i gian th c thi ph thu c

 Tr ng thái d li u

6

ánh giá gi i thu t

Th i gian th c thi đ c đánh giá d a trên s thao

tác s c p mà gi i thu t ph i th c hi n

Th i gian th c thi đ c bi u di n t ng đ i b ng

hàm T(N) v i N là kích th c c a d li u đ u vào

Trang 3

7

ánh giá gi i thu t

 Xét ví d tính S = A[0] + A[1] + … + A[N-1]

for ( int i = 0; i < N; i++)

S = S + A[i];

 Thao tác chính đ th c hi n tính S là phép c ng và phép

gán trong câu l nh S = S + A[i]

S l n th c hi n thao tác S = S + A[i] b ng s l n th c thi

vòng l p: N

 V y th i gian th c hi n đo n ch ng trình T(N) = c*N,

trong đó c là m t h ng s

8

ánh giá gi i thu t

 Xét đo n ch ng trình sau

for ( int i = 0; i < N; i++)

for ( int j = 0; j < N; j++)

if (max < A[i][j]) max = A[i][j];

gán

đi u ki n if (max <A[i][j])

 V y th i gian th c hi n đo n ch ng trình theo s phép

gán là T(N) = c*N2, trong đó c là m t h ng s

N i dung

1 ánh giá gi i thu t

3 Quy t c xác đ nh đ ph c t p

4 ánh giá các c u trúc đi u khi n

2 ph c t p c a gi i thu t

Trang 4

10

ph c t p c a gi i thu t

Th i gian th c thi T(N) không th tính b ng th i

gian đ ng h nên không th d a vào s giây th c

hi n đ so sánh 2 gi i thu t

 Ví d xét T 1 (N) = 100*N, T 2 (N) = N 2

 Khi N đ l n (N > 100) thì T1(N) < T2(N) => th i gian th c

hi n T1 ít h n th i gian th c hi n T2

 Ta nói th i gian th c hi n T1 t l thu n v i N và th i gian

th c hi n T2 t l thu n v i N2

 Cách đánh giá th i gian th c hi n nh trên g i là

đánh giá đ ph c t p c a gi i thu t

11

ph c t p c a gi i thu t

 Xét gi i thu t t ng quát v i N là kích th c c a bài

toán, T(N) là th i gian th c thi v i kích th c N

s d ng c và N0 sao cho T(N) ≤ c*f(N) N ≥ N0

 Kí hi u đ ph c t p c a gi i thu t T(N) = O(f(N))

12

ph c t p c a gi i thu t

 Ví d tính đ ph c t p c a T(N) = (N + 1) 2

 Ch n c = 4, N0 = 1 ta có (N + 1)2 ≤ c*N2, N ≥ N0

 V y đ ph c t p c a hàm th i gian T(N) = O(N2)

 Ví d tính đ ph c t p c a T(N) = 3*N 3 + 2*N 2

 Ch n c = 5, N0 = 1 ta có 3*N3 + 2*N2 ≤ c*N3, N ≥ N0

 V y đ ph c t p c a hàm th i gian T(N) = O(N3)

Trang 5

13

ph c t p c a gi i thu t

 Các tr ng h p đánh giá đ ph c t p gi i thu t

 Tr ng h p t t nh t: s thao tác s c p ít nh t mà gi i

thu t th c hi n trên các b d li u cùng c p

 Tr ng h p x u nh t: s thao tác s c p nhi u nh t mà

gi i thu t th c hi n trên các b d li u cùng c p

thu t th c hi n trên các b d li u cùng c p

Vi c tính toán hàm th i gian trong tr ng h p

trung bình khá khó kh n nên đ ph c t p đ c

đánh giá trong tr ng h p x u nh t

14

ph c t p c a gi i thu t

 Ví d : xét đo n ch ng trình sau

for ( int i = 0; i < n - 1; i++)

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

if (A[i] > A[j])

int t = A[i];

A[i] = A[j];

A[j] = t;

}

 Các thao tác s c p: phép so sánh, phép gán

ph c t p c a gi i thu t

 Phân tích phép so sánh if (A[i] > A[j])

T(N) = O(N2)

Trang 6

16

ph c t p c a gi i thu t

 Phân tích phép gán

 Vi c th c hi n ph thu c đi u ki n if (A[i] > A[j])

 Tr ng h p x u nh t: đi u ki n A[i] > A[j] luôn đúng, s

phép gán 3*((N – 1) + (N – 2) + … + 1) = 3*N*(N – 1)/2

 Tr ng h p t t nh t: đi u ki n A[i] > A[j] luôn sai, s phép

gán b ng 0

đo n ch ng trình là T(N) = O(N2)

17

N i dung

1 ánh giá gi i thu t

3 Quy t c xác đ nh đ ph c t p

4 ánh giá các c u trúc đi u khi n

2 ph c t p c a gi i thu t

18

Quy t c xác đ nh đ ph c t p

Vi c xác đ nh đ ph c t p c a m t gi i thu t theo

hàm th i gian có th là vô cùng ph c t p

 Tuy nhiên m t s hàm th i gian có th xác đ nh đ

ph c t p theo m t s quy t c đ n gi n sau

Trang 7

19

Quy t c xác đ nh đ ph c t p

 Quy t c b h ng s

T(N) = O(k*f(N)) v i k là m t h ng s d ng thì đ ph c

t p T(N) = O(f(N))

20

Quy t c xác đ nh đ ph c t p

 Quy t c l y max

T(N) = O(f(N), g(N)) thì đ ph c t p là O(max{f(N), g(N)})

Quy t c xác đ nh đ ph c t p

 Quy t c t ng

th i gian th c hi n T1(N) = O(f(N)) và T2(N) = O(g(N)) thì

T1(N) + T2(N) = O(f(N) + g(N))

t p g(N) N u th c hi n P1 r i sau đó th c hi n P2 thì đ

ph c t p c a c ch ng trình là f(N) + g(N)

Trang 8

22

Quy t c xác đ nh đ ph c t p

 Quy t c nhân

N u th c hi n P trong th i gian K(N) v i K(N) = O(g(N)) thì

đ ph c t p s là O(g(N)* f(N))

23

Quy t c xác đ nh đ ph c t p

M t s tính ch t c a bi u th c đ ph c t p

 P(N) là đa th c b c k thì O(P(N)) = O(Nk)

 f(N) > 0 N, logaf(N) = logab*logbf(N) => O(logaf(N)) =

O(logbf(N)) ph c t p c a gi i thu t c p logarit c a f(N)

là O(logf(N))

 Gi i thu t có đ ph c t p c p 2N, N!, NN là gi i thu t có đ

ph c t p hàm m

 log2N < N < N.log2N < N2 < N3 < 2N < N! < NN v i N l n

24

N i dung

1 ánh giá gi i thu t

3 Quy t c xác đ nh đ ph c t p

4 ánh giá các c u trúc đi u khi n

2 ph c t p c a gi i thu t

Trang 9

25

ánh giá các c u trúc đi u khi n

L nh gán

 <bi n> = <bi u th c>

 Th i gian c a thao tác b ng th i gian th c hi n bi u th c

vd:

d = sqrt(b*b – 4*a*c): ph thu c hàm sqrt

a = sin(x): ph thu c hàm sin

26

ánh giá các c u trúc đi u khi n

L nh r nhánh

if (đi u ki n) //th i gian th c hi n T 1 (N)

L nh 1; //th i gian th c hi n T 2 (N)

T(N) = T1(N) + max(T2(N), T3(N))

ánh giá các c u trúc đi u khi n

L nh vòng l p:

câu l nh; //th i gian th c hi n T i (N)

 Th i gian th c hi n:

X(N): s l n l p

Ti(N): th i gian th c hi n l n th i

T0(N): đi u ki n l p

thì ta ph i xét s l n l p trong tr ng h p x u nh t

Trang 10

28

Bài t p

 Tính th i gian th c hi n và đ ph c t p c a đo n

ch ng trình tính t ng n giá tr do ng i dùng

nh p vào t bàn phím

s = 0;

for ( int i = 0; i < n; i++)

{

cin>>x;

s = s + x;

}

29

Bài t p

 Tính th i gian th c hi n và đ ph c t p c a đo n

ch ng trình tìm ma tr n tích c a A kích th c

NxK v i ma tr n B kích th c KxM

for ( int i = 0; i < N; i++)

for ( int j = 0; j < M; j++)

{

C[i][j] = 0;

for ( int p = 0; p < K; p++)

C[i][j] = C[i][j] + A[i][p]*B[p][j];

}

30

Bài t p

D a vào hàm th i gian c a gi i thu t đ đánh giá

đo n ch ng trình nào sau đây là t t h n đ gi i

bài toán tính v i N, k nguyên d ng Cho bi t

đ ph c t p c a các đo n ch ng trình

Trang 11

31

Bài t p

 Cách 1

{

int P = 1;

for ( int i = 1; i <= N; i++)

P = P*i;

}

int ToHop( int N, int k)

{

int N_GT = GiaiThua(N);

int k_GT = GiaiThua(k);

int N_k_GT = GiaiThua(N – k);

}

32

Bài t p

 Cách 2

int ToHop( int N, int k)

{

int C = 1;

for ( int i = 1; i <= N; i++)

C = C * (N – i + 1)/i;

}

Bài t p

D a vào đ ph c t p c a gi i thu t đ đánh giá

đo n ch ng trình nào sau đây là t t h n đ gi i

bài toán tính giá tr bi u th c sau

Trang 12

34

Bài t p

 Cách 1

double Sum( int N)

{

for ( int i = 1; i <= N; i++)

{

int P = 1;

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

P = P*j;

S = S + ( double )1/P;

}

}

35

Bài t p

 Cách 2

double Sum( int N)

{

for ( int i = 1; i <= N; i++)

{

P = P*i;

S = S + ( double )1/P;

}

}

Ngày đăng: 08/08/2014, 04:21

TỪ KHÓA LIÊN QUAN

w