then⑵
endif
endfor
k←[k/2]
repeat
min←a
(1)
endmimdmin
16.0/1背包问题的回溯法求解。
procedurebknaPl(m,n,w,P,fw,fp,x)
//m是背包容量。
有n种物品,其重量与效益分别存在数组w(1:
n)和P(1:
n)中sp(i)/w(o≥P(i+1)/w(i+1)。
fw是背包的最后重量,fp是背包取得
的最大效益。
x(1:
n)中每个元素取0或1值。
若物品k没放人背包,则x
(k);0;否则x(k)=1//
integern,k,y(1:
n),i,x(1:
n);real,m,w(1:
n),P(1:
n),fw,fp,cw,cp;
cw←cp←o;k←1;fp←l//cw是背包当前重量;cp是背包当前取得的效益值//
loop
whilek≤nand⑴≤mdo//将物品、k放人背包//
cw←cw+w(k);cp←cp+P(k);y(k)←1;k←k+1
repeat
ifk>nthenfp←cp;fw←cw;k←n;x←y//修改解//
else⑵//超出m,物品k不适合//
endif
whilebound(cp、cw,k,m)≤fpdo//上面置了fp后,bound=fp//
whilek
0andy(k)
1do
k←k-1,//找最后放人背包的物品//
repeat
ifk=0thenreturnendif//找最后放人背包的物品//
y(k)←0;cw←cw-w(k);cp←cp—P(k)//移掉第k项//
repeat
k←k+1
repeat
endbknaPl
17.设计只求一个哈密顿环的回溯算法。
ProcedureHamiltonian(n)
{k←1;
x[k]←0;
Whilek>0do
x[k]←x[k]+1;
whileB(k)=falseandx[k]≤ndo
______
________
repeat
Ifx[k]≤n
thenifk=nthen{printx;return}
else{k←k+1;x[k]←0;}
endif
else______
________
endif
repeatend
}
procedureB(k){G[x[k-1],x[k]]≠1thenreturnfalse;fori←1tok-1doifx[i]=x[k]thenreturnfalse;endifrepeatreturntrue;}
18.设计一个算法在一个数组A中找出最大数和最小数的元素。
Voidmaxmin(A,n)intA[];intn;
{intmax,min,i;
max=A[1];
min=A[1];
for(i=2;i<=n;i++)
if(____
___)max=A[i];
elseif(A[i]____;
printf(“max=%d,min=%d\n”,max,min);
}
19.选择排序:
设数组中有N个数,取I=1,2,3,„„N-1,每次找出后N-I+1个数字中最小的与第I个数字交换位置。
程序如下:
uses crt;
var n:
array[1..10] of integer;
i,j,k,t,min:
integer;
begin
clrscr;
for i:
=1 to 10 do read(n[i]);
for i:
=1 to 9 do begin
min:
=30000;
for j:
=i to 10 do begin
if n[j] ___
____;
k:
=j;
end;
end;
t:
=n[i];
___
____;
n[k]:
=t;
end;
for i:
=1 to 10 do write(n[i]:
4);
end.
四.问答题
1.算法的重要的5个特征是什么?
2.什么是动态规划?
3.回溯程序的4种因素是什么?
4.请解释贪心法的基本思想,并用贪心法解决如下背包问题。
背包问题:
n=3,M=30,(p1,p2,p3)=(20,14,25),(w1,w2,w3)=(20,15,15)
5.请解释动态规划的基本思想,并写出用动态规划解决0/1背包问题所采用的递推方程式。
6.请解释动态规划的基本思想,并写出用动态规划解决多段图问题所采用的递推方程式。
7.请解释回溯法的基本思想,并写出用回溯法解决子集和数问题的状态空间树。
8.已知如下定义的数据结构,请画出它的逻辑示意图,并说明它是何种类型的数据结构。
DS=
D={1,2,3,4,5,6}
R={<1,2>,<1,3>,<2,3>,<3,6>,<3,5>,<5,4>,<6,2>,<4,3>,<5,6>}
9.若将数据序列D={1,2,3}输入堆栈,请给出所有可能的堆栈输出。
10.已知如下多段图,请用动态规划方法的向后处理法写出求解此问题的递推公式并完成对各结点的计算。
11.请用Prim方法求下图所示的最小生成树。
(请写出该方法的基本思想和主要中间过程)。
12.最佳原理的基本思想是什么?
13.利用分枝定界法求解流动推销员问题。
设给定5个城市的距离矩阵为
D==(dij)5×5
14.将所给定序列a[1:
n]分为长度相等的两段a[1:
n/2]和a[n/2+1:
n],分别求出这两段的最大子段和,则a[1:
n]的最大子段和有哪三种情形?
15.由0——1背包问题的最优子结构性质,可以对m(i,j)建立怎样的递归式?
16.对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径。
《算法设计与分析》练习题库参考答案
二、概念题:
请解释下列术语。
1.数据元素的集合。
2.队列是一个线性表,限制为只能在固定的一端进行插入,在固定的另一端进行删除。
3.对于算法a,如果存在一多项式p(),使得对a的每个大小为n的输入,a的计算时间为o(p(n)),则称a具有多项式复杂度
4.二叉树的层数i与该层上的结点数n的关系为:
n(i)=
。
5.如果可满足性约化为一个问题L,则称该问