⺣ - רҵ·ĵϷƽ̨

ǰλãҳ > 算法设计与分析王晓东 - 百度文库

算法设计与分析王晓东 - 百度文库

  • 62 Ķ
  • 3
  • 2025/6/5 0:46:06

ind[0] = right; ind[1]=left; return false; }

صind[1]СxԪλãind[0]ǴxСԪصλá

ϰ3-3 a[0:n-1] nԪص飬 ǷǸһ㷨 λҪ㷨ºʱΪ ֻõ ĸռ䡣 㷨 󷴷

Algorithm exchange(a, k, n); Begin

Inverse(n,0,k-1); inverse(n,k,n-1) inversen,0,n-1 End.

Algorithm inverse(a, i, j); Begin

h=[(j-i+1)/2] ; For k=0 to h-1 do

Begin x=a[i+k]; a[i+k]=a[j-k]; a[j-k]= x end ; end

ϰ3-4 ںϲ㷨ķָУa[0;n-1] Ϊ [2飬ÿ ԪءȻݹضԷָõ źϲҪź һʵԵĺϲ㷨㷨ļ㸴ԡ

ʵԵĺϲ㷨£

public static void mergesort(int []a, int left ,int right) {

if (left < right ) {

int j = (int) Math.sqrt(right Cleft+1); if (j>1) {

for (int i=0; i

mergeall(a,left,right); } }

У㷨mergeallϲn źΡ£㷨mergeallҪOnlogn) ʱ䡣㷨ļʱ T(n)㣺 T(n)=O(1),n<=1

T(n)=n*T(n),n>1 T(n)=O(nlogn)

˵ݹʽĽΪ

ϰ3-5 S1,S2...Sk ϣÿ ȡֵΧ һ㷨 ʱڽ ֱ

Ͱ㷨˼ʵ

ϰ3-6 X[0:n-1] Y[0:n-1] Ϊ飬ÿлnźһ ʱ㷨ҳXY2nλ 1 㷨˼

һ⣺X[i1:j1] y[i2;j2] XYõ飬ҳͬj1-i1=j2-i2 ҳ2(i1-j1+1) λ

ע⵽X(i1)<=Y(j2) λmedianX(i)<=median<=Y(j2) ͬX(i1)>=Y(j2) Y(j2)<=median<=X(i1)

m1=(i1+j1)/2,m2=(i2+j2)/2 m1+m2=i1+i2+(j1-i1)/2+(j2-i2)/2 j1-i1=j2-i2 (j1-i1)/2+(j2-i2)/2=j2-i2 m1+m2=i1+j2

X(m1)=Y(m2) ʱmedian=X(m1)=Y(m2)

X(m1)>Y(m2) ʱmedian1 X(m1:j1) Y(j2:m2) λmedian=median1 X(m1)

2 £㷨ļʱΪT(2n) 㷨m1 m2 ѡȡԿ֪ڵݹʱXYĴСһ롣ˣT(2n) ݹʽ T(2n)=(1),n<=1 T(2n)=T(n)+O(1),n>=c

˵ݹ鷽̿ɵãT(2n)=O(logn)

ϰ3-7 GrayһΪ2^n СͬԪأÿԪضdzΪnλģ01Ԫǡֻ1λͬ÷βһ㷨nӦGray롣 ļΡ n=1 0 1 n=2 00 01 11 10 n=3

000 001 011 010 110 111 101 100

nλGrayΪG(n) ෴˳еΪG^-1(n)ļοԿG(n) ĹɣG(n+1)=OG(n)1G^-1(n)

ע⵽G(n) һnλG^-1(n) ĵ1nλͬѧɷ֤G(n) ɡɴ˹ƹG(n) ķη¡ public static void Gray(int n) {

if ( n == 1) { a[1] = 0; a[2] = 1; return; }

Gray(n-1);

for ( int k = 1<< ( n - 1), i = k; i > 0; i--) a[2*k-i+1]=a[i] + k; }

㷨нnλ01Ƕi洢 С ɼ֮outGrayС public static void out(int n) {

int m=1<

for (int i=1; i<=m; i++) {

String str=Integer.toBinaryString(a[i]); int s=str.length();

for ( int j=0; j

System.out.println(); }

̬滮

ϰ4-1 һ ʱ㷨ҳnɵеС

һbʹb[i]Ϊɨ貿ֵijΪеСֵ ˼ƵĶ̬滮㷨£ j:=0; b[0]:=-maxint; FOR i:=1 TO n DO IF a[i]>b[j] THEN

BEGIN j:=j+1; b[j]:=a[i]; END ELSE

BEGIN k:=1;

while a[i]>b[k] DO k:=k+1; b[k]:=a[i]; END;

ϰ4-2 Թ滮⣺ ΪǸ

һĶ̬滮㷨㷨ļ㸴ԡ

һµı⣬ӽṹʡ ⣺maxCkXk(1..i)AkXk<=j

ֵΪm(i,j) m(i,j)DZΪjѡƷΪ12iʱֵɱӽṹʣԽm(i,j ĵݹʽ£ m(i,j)=max{m(i-1,j),m(i,j-ai)+ci} j>=ai,

m(i,j)=m(i-1,j),0<=j,ai m(0,j)=m(i,0);m(i,j)=-*,j<0

˵ݹʽm(n,b) Ϊֵ㷨ļʱΪO(nb)

ϰ4-3 һnɵͼ3-2ʾһ㷨εĶ׵һ·ʹ·ܺ

f(uij)ΪijԪص·ֵ, aij Ԫ(i,j)ֵ֮ ݹʽ:

F(uij)=max{f(ui-1,j)+aij, f(ui-1,j+1)+aij} (i=1,n j=1,i)

һ˳ƣӶnn·n·Ϊnnܺ͵·nܺ͵ֵΪȷ𰸡 ݽṹ:

a[i,j].val: ϵ֣

a[i,j].f: ɣ11õܺ·ֵܺ type node=record val, f: integer; end;

var a:array [1.. maxn, 1..maxn] of node; procedure findmax; begin

a [1,1]. f :=a[1,1].val; for i:=2 to n do for j:=1 to i do begin a[i,j]. f:=-1;

if (j<>1) and (a [i-1,j-1].f+a[i,j].val > a [i,j].f) then a[i,j]. f:=a [i-1,j-1]. f+a[i,j].val; if (j<>i) and(a [i-1,j].f+a[i,j].val > a[i,j].f) then a[i,j]. f:=a[i-1,j]. f+a[i,j]. val end; max:=1; for i:=2 to n do

if a[n,i]. f> a[n, max] .f then max:=i; writeln (a [n, max]. f) end;

̰㷨

ϰ5-1 0-1

0-1УƷʱֵǡݼС0-1⣬һЧ㷨ҳŽ⣬˵㷨ȷԡ

  • ղ
  • Υٱ
  • Ȩ
ĵ10.00 Ԫ VIP
ߣ...

92ƪĵ

ĵ飺

ind[0] = right; ind[1]=left; return false; } صind[1]СxԪλãind[0]ǴxСԪصλá ϰ3-3 a[0:n-1] nԪص飬 ǷǸһ㷨 λҪ㷨ºʱΪ ֻõ ĸռ䡣 㷨 󷴷 Algorithm exchange(a, k, n); Begin Inverse(n,0,k-1); inverse(n,k,n-1) inversen,0,n-1 End. Algorithm inverse(a, i, j); Begin h=[(j-i+1)/2] ; For k=0 to h-1 do

οͿͨغɸƺŰ棩
ƪ
ʱؼۣ10 Ԫ/ ԭ:20Ԫ
VIP
ؼۣ29 Ԫ/ ԭ:99Ԫ
0.3 Ԫ/ ÿ150
ȫվɸ
VIP
ؼۣ29 Ԫ/ ԭ:99Ԫ
0.3 Ԫ/ ÿ150
ȫվɸ
עĵпܡֻĿ¼ݲȫ֮ǰעѸ޷ػ⣬ϵЭ㴦
΢ţfanwen365 QQ370150219
Copyright © ⺣ All Rights Reserved. ICP16052595-3 վͼ ͷQQ370150219 䣺370150219@qq.com