Professional Documents
Culture Documents
Cu 1 (4 im): Gii phng trnh quy. a) Phng php truy hi: Bi 1: Gii phng trnh quy sau: T(n)= n =0 C1 T (n 1) +C 2 n>0
Gii Ta gii bng phng php truy hi Ta c T(n)= T(n-1) +C2 = (T(n-2)+C2) + C2= T(n-2) + 2C2 = ((T(n-3)+C2)+C2)+C2= T(n-3)+3C2 ........... = T(n-i) + iC2 Qu trnh kt thc khi n=i khi T(n)= T(0)+nC2=C1+nC2=O(n); Vy T(n)= O(n). Bi 2: Gii phng trnhi sau: n =1
C1 T(n)= n 2T ( ) +C 2 n 2
n >1
...... = 2iT(
n )+iC2n 2i
b) Phng php quy tng qut. T(n)= aT( b )+ d(n); * Nu d(n) l hm nhn: - Nu a>d(b) th NR(nghim ring)=O(nlogab)= NTN(nghim thun nht) T(n)= O(nlogba) - Nu a<d(b) th T(n)= O(nlog bd(b)) - Nu a=d(b) th T(n)= O(nlogbaLogbn)
n
Gii Ta c phng trnh dng tng qut v d(n)= n l mt hm nhn a =4; b= 2; d(b)= b= 2; a>d(b) Vy theo cng thc ta c T(n)= O(nlogab)= O(nlog24)= O(n2). Bi 2: Gii phng trnh: T(1)=1; T(n)= 4T(n/2)+n 2 Gii: Ta thy phng trnh dng chun. d(n)= n2 l mt hm nhn. a= 4; b= 2; d(b)=d(2)= 22=4; Nh vy a= d(b) Vy theo cng thc ta c: T(n)= O(nlogbaLogbn) = O(nlog24Log2n)=O(n2 Log2n) Bi 3: Gii phng trnh: T(1)=1 v T(n)= 4T(n/2)+n3 Gii: Ta c phng trnh dng chun. d(n)= n3 l mt hm nhn. a =4; b= 2; d(b)= d(2)= 8; Nh vy a<d(b); Theo cng thc ta c T(n)= O(nlogbd(b)) = O(nlog28)= O(n3) Vy T(n)= O(n3); Bi 4: Gii phng trnh T(1)= 1; T(n)= T(n/2)+1; Gii: Ta thy phng trnh dng chun. d(n)= 1 l mt hm nhn. a =1; b=2; d(b)=d(2)=1; nh vy a=d(b);\ Theo cng thc ta c T(n)= O(nlogbaLogbn) = O(nlog21Log2n)= O(Log2n); Vy T(n)= O(Log2n); * Nu d(n) khng phi l hm nhn:
phc tp:
1 T(n)= n T( ) +1 2
n=1 n >1
b) Max, Min
program TimMaxMin; uses crt; type Mang= array[1..100] of integer; var i,n,x,max,min: integer; A: mang; procedure TM2(M:Mang;d,c:integer;var max:integer;var min:integer); var max1,min1,max2,min2: integer; begin if (d= c) then begin max:= M[d]; min:= M[d]; end else begin
TM2(M,d,(d+c)div 2,max1,min1); TM2(M,(d+c)div 2 + 1,c,max2,min2); if(max1>max2) then max:= max1 else max:= max2; if(min1>min2) then min:= min2 else min:= min1; writeln(' max:= ',max); writeln(' Min:= ',min); end; writeln; end; BeGin clrscr; writeln(' CHUONG TRINH TIM MAX,MIN CUA DAY SO');
writeln(' Nhap so phan tu cua day n:= '); read(n); writeln; writeln; for i:=1 to n do begin writeln(' Phan tu thu ',i,' la: '); read(A[i]); end; writeln; writeln(' Ket qua: '); TM2(A,1,n,max,min); readln; readln; end.
phc tp T(n)=
0 1 n 2T ( ) + 2 2
Nu n= 1 Nu n= 2 Nu n>2
BEGIN clrscr; write('Nhap so phan tu can sap xep:');readln(n); writeln('Nhap cac phan tu:'); for i:=1 to n do begin write('a[',i,']=');readln(a[i]); end; sort(a,n); writeln('Day da sap xep la:'); for i:=1 to n do write(a[i]:3); readln; END.
* phc tp: 4
T(n)=
(n i) =
i =1
n1
n(n 1) = O(n2). 2
Cu 3 (2 im): Trnh by tng, thut ton: a) Phng php phn on (Quick Sort) * tng: Gi s v l mt gi tr kha m ta gi l cht. Ta phn hoch dy a[1]..a[n] thnh 2 mng con bn tri v bn phi.Mng con bn tri bao gm cc kha c gi tr nh hn cht. Mng con bn phi bao gm cc kha c gi tr ln hn hoc bng cht. - Sp xp mng con bn tri v bn phi cng theo cch trn. - Mt mng ch gm mt phn t hoc nhiu phn t c kha bng nhau th c th t. * Thut ton:
Chn cht: Function FindPivot(i,j:integer): integer; Var Firstkey: keytype; k: integer; begin k:= i+1; Firstkey:= a[i].key; While (k<=j) and (a[k].key= Firstkey) do k:= k+1; If k>j then Findpivot:= 0 Else If (a[i].key > Firstkey) then findpivot:= k Else Pindpivot:= i; End; - Phn hoch mng: Function Partition(i,j: integer; Pivot: keytype): integer; Var L,R: integer; Begin L:= i; R:= j; While L<=R do Begin While a[L].key<pivot do L:= L+1; While a[R].key>=pivot do R:= R-1; If L<R then Swap(a[L],a[R]); End; Partition:= L; End; - Th tc QuickSort: Procedure QuickSort(i,j:integer): Var Pivot: keytype; PivotIndext,k: integer; Begin PivotIndex:= Finpivot(i,j); If (PivotIndex<>0) then Begin Pivot:= a[pivotIndex].key; K:= partition(i,j,pivot); QuickSort(i,k-1); QuickSort(k,j); End; End;
Nu n= 1 Nu n>1
b. Tm dy con c tng cho trc. * tng: - Xc nh dy con (ai0,ai1,ai2...aik) sao cho ai0+ai1+ai2+..+aik=M bng cch chn ln lt ai0,ai1... - Chn ai0 t (a0,a1,...an-1) m ai0<M - Khi chn c (ai0,ai1,ai2...aik-1) th ta c th chn aik vi ik (ik-1,n-1) - Gi s dy s lu trong mng A -Dy ch s ca dy con c lu trong mng I * Thut ton:
Void SubSequences(int A[n];int M;int I[n]); { k= 0; I[0]= -1; int S=0; While (k>=0) { I[k]++; If (I[k]<n) { if (S+A[I[k]])<=M iF (S+A[I[k]])==M) for (i:=1;i<=k;i++) printf(I[i]); else { S= S+A[I[k]]; I[k+1]= I[k]; K++; } } Else { k--; S= S-A[I[k]]; } } }
c) Tm dy con chung di nht ca hai dy s: * tng: - Vi mi i{1..m}, j{1,..n}; Gi Lij l di ca dy con di nht ca a[1..i] v b[1..j] th Lmn chnh l di ca dy con c cn tm. - Nh vy ta cn tnh Lij * Thut ton:
Void Day_chung(a,b,m,n) { for (i=1;i<=m;i++) If (b1a[1..i]) L[i][1]= 1; Else L[i][1]=0; For (j=1;j<=n;j++) If (a[1]b[1..j]) L[1][j]= 1; Else L[1][j]= 0; For (i=2;i<=m;i++) For (j=2;j<=n;j++) { if (a[i]=b[j]) x=1; Else x=0; L[i][j]= Max{L[i][j-1],L[i-1][j], L[i-1][j-1] + x} } Return(L); }