matematykaszkolna.pl
Złożoność algorytmów Mariusz: Oblicz złożoność czasową podanych algorytmów Chodzi mi o dokładną złożoność bo asymptotyczną mają mniej więcej taką samą const maxA=2000 type TElem=integer; (*Może byc wasz ulubiony typ byleby miał wyróżnione pole kluczowe które można by było porównywać*) TArray=array[1..maxA]of TElem; THArray=array[1..maxA div 2+1]of TElem; (*Algorytm 1*) procedure p1(l,r:integer;var A:TArray); var x:TElem; i,j:integer; b:boolean; begin x:=A[l]; i:=l; j:=2*i; b:=false; while((j<=r)and(not b))do begin if((j<r)and(A[j]<A[j+1])then j:=j+1; if(x<A[j])then begin A[i]:=A[j]; i:=j; end else b:=true; end; A[i]:=x; end; procedure p2(n:integer;A:TArray); var i:integer; begin for i:=n div 2 downto 1 do p1(i,n,A); end; procedure p3(n:integer;A:TArray); var x:TElem; i:integer; begin p2(n,A); for i:=n downto 2 do begin x:=A[1]; A[1]:=A[i]; A[i]:=x; p1(1,i−1,A); end; end; (*Algorytm 2*) procedure p1(var A:TArray; p,q,r:integer); var i,j,k,n1:integer; B:THArray; begin n1:=q−p+1; for k:=p to q do B[k−p+1]:=A[k]; i:=1; j:=q+1; k:=p; while((i<=n1)and(j<=r))do begin if(B[i]<=A[j])then begin A[k]:=B[i]; i:=i+1; end else begin A[k]:=A[j]; j:=j+1; end; k:=k+1; end; while(i<=n1) do begin A[k]:=B[i]; i:=i+1; k:=k+1; end; end; procedure p2(n:Integer;A:TArray); var l,m,r,s:integer; begin s:=1; while(s<=n)do begin l:=1; while(l+s<=n)do begin m:=l+s−1; if(l+2*s−1<n)then r:=l+2*s−1 else r:=n; p1(A,l,m,r); l:=l+2*s; end; s:=s*2; end; end; (*Algorytm 3*) procedure p1(var A:TArray;l,r:integer); var x,y:TElem; i,j:integer; begin x:=A[(l+r)div 2]; i:=l; j:=r; repeat while(A[i]<x)do i:=i+1; while(x<A[j])do j:=j−1; if(i<=j)then begin y:=A[i]; A[i]:=A[j]; A[j]:=y; i:=i+1; j:=j−1; end; until(i>j); if(l<j)then p1(A,l,j); if(i<r)then p1(A,i,r); end;
13 wrz 08:45