* 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 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 hiện là tiêu chí đặc biệt quan trọng.
11/30/2010 Phân tích gi i thu t GVGD: Tr ng Ph cH i N i dung ánh giá gi i thu t ph c t p c a gi i thu t Quy t c xác đ nh đ ph c t p ánh giá c u trúc u n ánh giá gi i thu t M i tốn có th thu t) đ gi i quy t có nhi u ph ng pháp (gi i ánh giá gi i thu t vi c làm c n thi t đ ch n gi i thu t t i u cho toán Gi i thu t đ l a c đánh giá d a tiêu chí Tính đ n Tính đ n gi n Th i gian th c hi n 11/30/2010 ánh giá gi i thu t Tính đ 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 i gian th c thi tiêu chí đ c bi t quan tr ng á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 đ c cài đ t máy tính Th i gian th c thi ph Kích th cd li u Tr ng thái d li u T c đ c máy tính Ngơn ng thu c l p trình ánh giá gi i thu t Th i gian th c thi đ c đánh giá d a s tác s c p mà gi i thu t ph i th c hi n Phép Phép Phép Phép thao so sánh gán toán s h c toán logic Th i gian th c thi đ c bi u di n t ng đ i b ng hàm T(N) v i N kích th c c a d li u đ u vào Th i gian th c thi m t hàm không âm T(N) ≥ 0, N ≥ 11/30/2010 ánh giá gi i thu t Xét ví d tính S = A[0] + A[1] + … + A[N-1] int S = 0; for (int i = 0; i < N; i++) S = S + A[i]; Thao tác đ th c hi n tính S phép c ng phép gán 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 c m t h ng s ng trình T(N) = c*N, ánh giá gi i thu t Xét đo n ch ng trình sau int max = A[0][0]; for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) if (max < A[i][j]) max = A[i][j]; Thao tác c a đo n ch ng trình so sánh phép gán S phép so sánh b ng s l n l p c a vòng l p: N2 S phép gán max = A[i][j] đ c th c hi n ph thu c vào u ki n if (max 100) T1(N) < T2(N) => th i gian th c hi n T1 h n th i gian th c hi n T2 Ta nói th i gian th c hi n T1 t l th c hi n T2 t l thu n v i N2 thu n v i N th i gian Cách đánh giá th i gian th c hi n nh đánh giá đ ph c t p c a gi i thu t g i 10 ph c t p c a gi i thu t Xét gi i thu t t ng quát v i N kích th c c a toán, T(N) th i gian th c thi v i kích th c N f(N) đ c g i đ ph c t p c a T(N) n ut n t i h ng s d ng c N0 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)) 11 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 = 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*N3 + 2*N2 Ch n c = 5, N0 = 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) 12 11/30/2010 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 nh t mà gi i thu t th c hi n b d li u 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 b d li u c p Tr ng h p trung bình: s thao tác trung bình c ng mà gi i thu t th c hi n b d li u c p Vi c tính tốn hàm th i gian tr ng h p trung bình khó kh n nên đ ph c t p đ c đánh giá tr ng h p x u nh t 13 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 14 ph c t p c a gi i thu t Phân tích phép so sánh if (A[i] > A[j]) Luôn đ S phép so sánh (N – 1) + (N – 2) + … + = N*(N – 1)/2 c th c hi n vòng l p ph c t p theo phép so sánh c a đo n ch T(N) = O(N2) ng trình 15 11/30/2010 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 u ki n if (A[i] > A[j]) Tr ng h p x u nh t: u ki n A[i] > A[j] đú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: u ki n A[i] > A[j] sai, s phép gán b ng ph c t p theo phép gán tr đo n ch ng trình T(N) = O(N2) ng h p x u nh t c a 16 N i dung ánh giá gi i thu t ph c t p c a gi i thu t Quy t c xác đ nh đ ph c t p ánh giá c u trúc u n 17 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 vơ 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 Quy t c b h ng s Quy t c l y max Quy t c c ng Quy t c nhân 18 11/30/2010 Quy t c xác đ nh đ Quy t c b ph c t p h ng s N u đo n ch ng trình P có th i gian th c hi n T(N) = O(k*f(N)) v i k m t h ng s d ng đ ph c t p T(N) = O(f(N)) 19 Quy t c xác đ nh đ ph c t p Quy t c l y max N u đo n ch ng trình có th i gian th c hi n T(N) = O(f(N), g(N)) đ ph c t p O(max{f(N), g(N)}) 20 Quy t c xác đ nh đ ph c t p Quy t c t ng N u đo n ch ng trình th c hi n công vi c T1 T2 v i th i gian th c hi n T1(N) = O(f(N)) T2(N) = O(g(N)) T1(N) + T2(N) = O(f(N) + g(N)) o n l nh P1 có đ ph c t p f(N), đo n l nh P2 có đ ph c t p g(N) N u th c hi n P1 r i sau th c hi n P2 đ ph c t p c a c ch ng trình f(N) + g(N) 21 11/30/2010 Quy t c xác đ nh đ ph c t p Quy t c nhân o n ch ng trình P có th i gian th c hi n T(N) = O(f(N)) N u th c hi n P th i gian K(N) v i K(N) = O(g(N)) đ ph c t p s O(g(N)* f(N)) 22 Quy t c xác đ nh đ M ts tính ch t c a bi u th c đ ph c t p P(N) đa th c b c k O(P(N)) = O(Nk) f(N) > 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) O(logf(N)) ph c t p hàm h ng, kí hi u O(1) ph c t p Gi i thu t có đ ph c t p c p 2N, N!, NN 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 23 N i dung ánh giá gi i thu t ph c t p c a gi i thu t Quy t c xác đ nh đ ph c t p ánh giá c u trúc u n 24 11/30/2010 ánh giá c u trúc u n L nh gán = 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 25 ánh giá c u trúc u n L nh r nhánh if (đi u ki n) //th i gian th c hi n T1(N) L nh 1; //th i gian th c hi n T2(N) else L nh 2; //th i gian th c hi n T3(N) Th i gian th c hi n T(N) = T1(N) + max(T2(N), T3(N)) 26 ánh giá c u trúc u n L nh vòng l p: while (đi u ki n) //th i gian th c hi n T0(N) câu l nh; //th i gian th c hi n Ti(N) Th i gian th c hi n: X(N): s l n l p Ti(N): th i gian th c hi n T0(N): u ki n l p l n th i Trong tr ng h p vịng l p khơng xác đ nh đ c s l n l p ta ph i xét s l n l p tr ng h p x u nh t 27 11/30/2010 Bài t p Tính th i gian th c hi n đ ph c t p c a đo n ch ng trình tính t ng n giá tr 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; } 28 Bài t p Tính th i gian th c hi n đ 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]; } 29 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 sau t t h n đ gi i tốn tính v i N, k ngun d ng Cho bi t đ ph c t p c a đo n ch ng trình 30 10 11/30/2010 Bài t p Cách int GiaiThua(int N) { int P = 1; for (int i = 1; i