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

11/30/2010 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 3 á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í  Tính đúng đn  Tính đn gin  Thi gian thc hin 11/30/2010 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  Kích thc d liu  Trng thái d liu  Tc đc máy tính  Ngôn ng lp trình 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  Phép so sánh  Phép gán  Phép toán s hc  Phép 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 là kích thc ca d liu đu vào  Thi gian thc thi là mt hàm không âm T(N) ≥ 0, N ≥ 0 11/30/2010 3 7 á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 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 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 ca đon chng trình là so sánh và phép gán  S phép so sánh bng s ln lp ca 2 vòng lp: N 2  S phép gán max = A[i][j] đc thc hin ph thuc vào đ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*N 2 , trong đó c là mt hng s 9 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 11/30/2010 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ì T 1 (N) < T 2 (N) => thi gian thc hin T 1 ít hn thi gian thc hin T 2  Ta nói thi gian thc hin T 1 t l thun vi N và thi gian thc hin T 2 t l thun vi N 2  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  f(N) đc gi là đ phc tp ca T(N) nutn ti các hng s dng c và N 0 sao cho T(N) ≤ c*f(N)  N ≥ N 0  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, N 0 = 1 ta có (N + 1) 2 ≤ c*N 2 , N ≥ N 0  Vy đ phc tp ca hàm thi gian T(N) = O(N 2 )  Ví d tính đ phc tp ca T(N) = 3*N 3 + 2*N 2  Chn c = 5, N 0 = 1 ta có 3*N 3 + 2*N 2 ≤ c*N 3 , N ≥ N 0  Vy đ phc tp ca hàm thi gian T(N) = O(N 3 ) 11/30/2010 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  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 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 15  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 đc thc hin trong vòng lp  S phép so sánh (N – 1) + (N – 2) + … + 1 = N*(N – 1)/2   phc tp theo phép so sánh ca đon chng trình là T(N) = O(N 2 ) 11/30/2010 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   phc tp theo phép gán trong trng hp xu nht ca đon chng trình là T(N) = O(N 2 ) 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  Quy tc b hng s  Quy tc ly max  Quy tc cng  Quy tc nhân 11/30/2010 7 19 Quy tc xác đnh đ phc tp  Quy tc b 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 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  Nu đon chng trình có thi gian thc hin T(N) = O(f(N), g(N)) thì đ phc tp là O(max{f(N), g(N)}) 21 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 2 công vic T1 và T2 vi 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))  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 thì đ phc tp ca c chng trình là f(N) + g(N) 11/30/2010 8 22 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 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(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)).  phc tp ca gii thut cp logarit ca f(N) là O(logf(N))   phc tp là hàm hng, kí hiu O(1)  Gii thut có đ phc tp cp 2 N , N!, N N là gii thut có đ phc tp hàm m  log 2 N < N < N.log 2 N < N 2 < N 3 < 2 N < N! < N N 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 11/30/2010 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) else Lnh 2; //thi gian thc hin T 3 (N)  Thi gian thc hin T(N) = T 1 (N) + max(T 2 (N), T 3 (N)) 27 ánh giá các cu trúc điu khin  Lnh vòng lp: while (điu kin) //thi gian thc hin T 0 (N) 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 T i (N): thi gian thc hin  ln th i T 0 (N): điu kin lp  Trong trng hp vòng lp không xác đnh đc s ln lp thì ta phi xét s ln lp trong trng hp xu nht 11/30/2010 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 [...]...11/30 /20 10 Cách 1 int GiaiThua(int N) { int P = 1; for (int i = 1; i . thut có đ phc tp cp 2 N , N!, N N là gii thut có đ phc tp hàm m  log 2 N < N < N.log 2 N < N 2 < N 3 < 2 N < N! < N N vi N ln 24 Ni dung 1. ánh giá. 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, N 0 = 1 ta có (N + 1) 2 ≤ c*N 2 , N ≥ N 0  Vy đ phc tp ca hàm thi gian T(N) = O(N 2 ). phc tp ca T(N) = 3*N 3 + 2* N 2  Chn c = 5, N 0 = 1 ta có 3*N 3 + 2* N 2 ≤ c*N 3 , N ≥ N 0  Vy đ phc tp ca hàm thi gian T(N) = O(N 3 ) 11/30 /20 10 5 13  phc tp ca

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

Xem thêm: Cấu trúc dữ liệu - Phần 2 docx

TỪ KHÓA LIÊN QUAN