算法设计与分析习题

1.摆渡的士兵

设两个小男孩为A、B,士兵为1,2....12。先考虑士兵1。

     

 

四趟可以渡过去一个士兵,所以n个士兵需要4n趟。

2.交替放置的玻璃杯

  

 

  以两种杯子的交界为对称轴,左侧的杯子编号为2的倍数时与右侧对称位置的杯子交换。

  当n为奇数时,需要交换的次数是(n-1)/2;

  当n为偶数时,需要交换的次数是n/2。

3.标记单元格

 

依次类推,n每增加2,按图中规律增加。

n/2(n不为2)为奇数时,水平新增一个单元格,并在其左下方新增一个单元格;

n/2为偶数时,水平新增一个单元格,并在其左上方新增一个单元格。

4.设计减一算法,生成n元素集合的幂集

建立P(n)和P(n-1)幂集的递推关系。

P(n)的幂集等于P(n-1)的幂集+P(n-1)的幂集∪{n}。

8.对于插入排序来说,设计一个限位器避免每次迭代判断边界条件。

应该在带排序数组的第一个元素前面加上一个小于等于最小元素的元素。

效率相同。

习题4.2

1.应用dfs解决有向图的拓扑排序问题。

(a)出栈次序:e f g b c a d

     则排序为d a c b g f e

(b)有向图中有闭环,无解。

5.对1中的有向图应用源删除算法

先删除d 再删除a 删除b 删除c 删除g 删除f 删除e.

排序为dacbgfe

10.蛛网问题

对该有向图进行拓扑排序,左右对称可以只看左半边图。

方法是对所有前驱结点的路径求和。

S(1)—A(1)—B(1)—E(1)—G(1)—H(3)—O(11)—I(14)—C(15)—J(25)—D(40)—K(61)—F(141)。

共有141条路径

 

 

 

 

习题4.3

9.生成4位的二进制反射格雷码

a.0000,0001,0011,0010,0110,0111,0101,0100,

1100,1101,1111,1110,1010,1011,1001,1000

b.非递归算法求格雷码i

i           0     1     2     3     4     5     6     7

ii的二进制编码  0      1    10    11    100   101   110   111

格雷码         0000  0001  0011  0010  0110  0111  0101  0100

i

      i           8     9    10    11    12     13     14      15

ii的二进制编码 1000  1001  1010  1011  1100   1101   1110    1111

格雷码       1100  1101  1111  1110  1010   1011   1001    1000

习题4.4

3.折半查找

    a.四次

  b.3、27、42、74、85、98

  c.(4x6+3x4+2x2+1x1)/13=3.15次

    d.(4×12+3×2)/14≈3.86次

  

  10.假币问题

  11.

a.俄式乘法计算26×47

26×47=13×94=6×188=3×376=1×752

752+376+94=1222

b.没有

习题4.5

6.

a.n>2的32次方

b.当n趋于无穷大的时候,log log n/log n趋向于0。故选i

12.翻薄饼

 数组翻转问题

先查找到最大的薄饼,

若在最下面,则不需要操作;

若在最上面,则只需将整个数组翻转;

若在中间,则先将该饼以及它上面的饼整体翻转,将最大的饼翻转到最上面,然后再进行一次翻转翻到最下面。

最大的薄饼归位之后。将剩下的饼看做一个新的数组,重复上述操作,可实现题目要求。

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值