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

Nội dung

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

TỪ KHÓA LIÊN QUAN

w