11/30/2010 1 GVGD: Trng Phc Hi Phân tích gii thut 2 Ni dung 1. ánh giá gii thut 3. Quy tc xác đnh đ phc tp 4. ánh giá các cu trúc điu khin 2. phc tp ca gii thut 3 ánh giá gii thut Mi bài toán có th có nhiu phng pháp (gii thut) đ gii quyt ánh giá gii thut là vic làm cn thit đ la chn gii thut ti u cho bài toán Gii thut đc đánh giá da trên các tiêu chí Tính đúng đn Tính đn gin Thi gian thc hin 11/30/2010 2 4 ánh giá gii thut Tính đúng đn ca gii thut có th đc chng minh bng công c toán hc (s dng b test ch giúp phát hin gii thut sai) Gii thut đn gin dn đn chng trình đc cài đt d dàng (tit kim thi gian vit mã lnh) i vi chng trình cn x lý d liu ln thì thi gian thc thi là tiêu chí đc bit quan trng 5 ánh giá gii thut Tính hiu qu ca gii thut đc đo lng da vào tc đ thc thi khi đc cài đt trên máy tính Thi gian thc thi ph thuc Kích thc d liu Trng thái d liu Tc đc máy tính Ngôn ng lp trình 6 ánh giá gii thut Thi gian thc thi đc đánh giá da trên s thao tác s cp mà gii thut phi thc hin Phép so sánh Phép gán Phép toán s hc Phép toán logic Thi gian thc thi đc biu din tng đi bng hàm T(N) vi N là kích thc ca d liu đu vào Thi gian thc thi là mt hàm không âm T(N) ≥ 0, N ≥ 0 11/30/2010 3 7 ánh giá gii thut 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 chính đ thc hin tính S là phép cng và phép gán trong câu lnh S = S + A[i] S ln thc hin thao tác S = S + A[i] bng s ln thc thi vòng lp: N Vy thi gian thc hin đon chng trình T(N) = c*N, trong đó c là mt hng s 8 ánh giá gii thut Xét đon chng 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 chính ca đon chng trình là so sánh và phép gán S phép so sánh bng s ln lp ca 2 vòng lp: N 2 S phép gán max = A[i][j] đc thc hin ph thuc vào điu kin if (max <A[i][j]) Vy thi gian thc hin đon chng trình theo s phép gán là T(N) = c*N 2 , trong đó c là mt hng s 9 Ni dung 1. ánh giá gii thut 3. Quy tc xác đnh đ phc tp 4. ánh giá các cu trúc điu khin 2. phc tp ca gii thut 11/30/2010 4 10 phc tp ca gii thut Thi gian thc thi T(N) không th tính bng thi gian đng h nên không th da vào s giây thc hin đ so sánh 2 gii thut Ví d xét T 1 (N) = 100*N, T 2 (N) = N 2 Khi N đ ln (N > 100) thì T 1 (N) < T 2 (N) => thi gian thc hin T 1 ít hn thi gian thc hin T 2 Ta nói thi gian thc hin T 1 t l thun vi N và thi gian thc hin T 2 t l thun vi N 2 Cách đánh giá thi gian thc hin nh trên gi là đánh giá đ phc tp ca gii thut 11 phc tp ca gii thut Xét gii thut tng quát vi N là kích thc ca bài toán, T(N) là thi gian thc thi vi kích thc N f(N) đc gi là đ phc tp ca T(N) nutn ti các hng s dng c và N 0 sao cho T(N) ≤ c*f(N) N ≥ N 0 Kí hiu đ phc tp ca gii thut T(N) = O(f(N)) 12 phc tp ca gii thut Ví d tính đ phc tp ca T(N) = (N + 1) 2 Chn c = 4, N 0 = 1 ta có (N + 1) 2 ≤ c*N 2 , N ≥ N 0 Vy đ phc tp ca hàm thi gian T(N) = O(N 2 ) Ví d tính đ phc tp ca T(N) = 3*N 3 + 2*N 2 Chn c = 5, N 0 = 1 ta có 3*N 3 + 2*N 2 ≤ c*N 3 , N ≥ N 0 Vy đ phc tp ca hàm thi gian T(N) = O(N 3 ) 11/30/2010 5 13 phc tp ca gii thut Các trng hp đánh giá đ phc tp gii thut Trng hp tt nht: s thao tác s cp ít nht mà gii thut thc hin trên các b d liu cùng cp Trng hp xu nht: s thao tác s cp nhiu nht mà gii thut thc hin trên các b d liu cùng cp Trng hp trung bình: s thao tác trung bình cng mà gii thut thc hin trên các b d liu cùng cp Vic tính toán hàm thi gian trong trng hp trung bình khá khó khn nên đ phc tp đc đánh giá trong trng hp xu nht 14 phc tp ca gii thut Ví d: xét đon chng 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 cp: phép so sánh, phép gán 15 phc tp ca gii thut Phân tích phép so sánh if (A[i] > A[j]) Luôn đc thc hin trong vòng lp S phép so sánh (N – 1) + (N – 2) + … + 1 = N*(N – 1)/2 phc tp theo phép so sánh ca đon chng trình là T(N) = O(N 2 ) 11/30/2010 6 16 phc tp ca gii thut Phân tích phép gán Vic thc hin ph thuc điu kin if (A[i] > A[j]) Trng hp xu nht: điu kin A[i] > A[j] luôn đúng, s phép gán 3*((N – 1) + (N – 2) + … + 1) = 3*N*(N – 1)/2 Trng hp tt nht: điu kin A[i] > A[j] luôn sai, s phép gán bng 0 phc tp theo phép gán trong trng hp xu nht ca đon chng trình là T(N) = O(N 2 ) 17 Ni dung 1. ánh giá gii thut 3. Quy tc xác đnh đ phc tp 4. ánh giá các cu trúc điu khin 2. phc tp ca gii thut 18 Quy tc xác đnh đ phc tp Vic xác đnh đ phc tp ca mt gii thut theo hàm thi gian có th là vô cùng phc tp. Tuy nhiên mt s hàm thi gian có th xác đnh đ phc tp theo mt s quy tc đn gin sau Quy tc b hng s Quy tc ly max Quy tc cng Quy tc nhân 11/30/2010 7 19 Quy tc xác đnh đ phc tp Quy tc b hng s Nu đon chng trình P có thi gian thc hin T(N) = O(k*f(N)) vi k là mt hng s dng thì đ phc tp T(N) = O(f(N)) 20 Quy tc xác đnh đ phc tp Quy tc ly max Nu đon chng trình có thi gian thc hin T(N) = O(f(N), g(N)) thì đ phc tp là O(max{f(N), g(N)}) 21 Quy tc xác đnh đ phc tp Quy tc tng Nu đon chng trình thc hin 2 công vic T1 và T2 vi thi gian thc hin T1(N) = O(f(N)) và T2(N) = O(g(N)) thì T1(N) + T2(N) = O(f(N) + g(N)) on lnh P1 có đ phc tp f(N), đon lnh P2 có đ phc tp g(N). Nu thc hin P1 ri sau đó thc hin P2 thì đ phc tp ca c chng trình là f(N) + g(N) 11/30/2010 8 22 Quy tc xác đnh đ phc tp Quy tc nhân on chng trình P có thi gian thc hin T(N) = O(f(N)). Nu thc hin P trong thi gian K(N) vi K(N) = O(g(N)) thì đ phc tp s là O(g(N)* f(N)) 23 Quy tc xác đnh đ phc tp Mt s tính cht ca biu thc đ phc tp P(N) là đa thc bc k thì O(P(N)) = O(N k ) f(N) > 0 N, log a f(N) = log a b*log b f(N) => O(log a f(N)) = O(log b f(N)). phc tp ca gii thut cp logarit ca f(N) là O(logf(N)) phc tp là hàm hng, kí hiu O(1) Gii thut có đ phc tp cp 2 N , N!, N N là gii thut có đ phc tp hàm m log 2 N < N < N.log 2 N < N 2 < N 3 < 2 N < N! < N N vi N ln 24 Ni dung 1. ánh giá gii thut 3. Quy tc xác đnh đ phc tp 4. ánh giá các cu trúc điu khin 2. phc tp ca gii thut 11/30/2010 9 25 ánh giá các cu trúc điu khin Lnh gán <bin> = <biu thc> Thi gian ca thao tác bng thi gian thc hin biu thc vd: d = sqrt(b*b – 4*a*c): ph thuc hàm sqrt a = sin(x): ph thuc hàm sin 26 ánh giá các cu trúc điu khin Lnh r nhánh if (điu kin) //thi gian thc hin T 1 (N) Lnh 1; //thi gian thc hin T 2 (N) else Lnh 2; //thi gian thc hin T 3 (N) Thi gian thc hin T(N) = T 1 (N) + max(T 2 (N), T 3 (N)) 27 ánh giá các cu trúc điu khin Lnh vòng lp: while (điu kin) //thi gian thc hin T 0 (N) câu lnh; //thi gian thc hin T i (N) Thi gian thc hin: X(N): s ln lp T i (N): thi gian thc hin ln th i T 0 (N): điu kin lp Trong trng hp vòng lp không xác đnh đc s ln lp thì ta phi xét s ln lp trong trng hp xu nht 11/30/2010 10 28 Bài tp Tính thi gian thc hin và đ phc tp ca đon chng trình tính tng n giá tr do ngi dùng nhp vào t bàn phím s = 0; for (int i = 0; i < n; i++) { cin>>x; s = s + x; } 29 Bài tp Tính thi gian thc hin và đ phc tp ca đon chng trình tìm ma trn tích ca A kích thc NxK vi ma trn B kích thc 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 tp Da vào hàm thi gian ca gii thut đ đánh giá đon chng trình nào sau đây là tt hn đ gii bài toán tính vi N, k nguyên dng. Cho bit đ phc tp ca các đon chng trình [...]...11/30 /20 10 Cách 1 int GiaiThua(int N) { int P = 1; for (int i = 1; i . thut có đ phc tp cp 2 N , N!, N N là gii thut có đ phc tp hàm m log 2 N < N < N.log 2 N < N 2 < N 3 < 2 N < N! < N N vi N ln 24 Ni dung 1. ánh giá. 12 phc tp ca gii thut Ví d tính đ phc tp ca T(N) = (N + 1) 2 Chn c = 4, N 0 = 1 ta có (N + 1) 2 ≤ c*N 2 , N ≥ N 0 Vy đ phc tp ca hàm thi gian T(N) = O(N 2 ). phc tp ca T(N) = 3*N 3 + 2* N 2 Chn c = 5, N 0 = 1 ta có 3*N 3 + 2* N 2 ≤ c*N 3 , N ≥ N 0 Vy đ phc tp ca hàm thi gian T(N) = O(N 3 ) 11/30 /20 10 5 13 phc tp ca