作业题

题目1:给你一堆螺母和螺栓,每个螺母都有一个相对应的螺栓,但是他们之间的对应关系已经打乱。你可以比较螺母和螺栓的大小关系,但是你无法比较螺母和螺母的大小关系,你也无法比较螺栓和螺栓的大小关系。设计一个算法,找出螺母和螺栓的对应关系。

算法思想:(基于快速排序)

  1. 挑选一个螺母a。
  2. 用螺母a将螺栓分成2堆,一堆比其大,一堆比其小。
  3. 找出与螺母a配对的螺栓b,并用螺栓b将螺母分成2堆。
  4. 重新选择一个螺母进行以上操作。

算法复杂度分析:(可自行参考快速排序复杂度分析)

平均情况下:C\left ( n\right )=2C\left ( n/2\right )+n,根据主定理  T\left ( n \right )=\theta \left ( nlogn \right ).

最差情况下:所有分裂点都趋于极端,即螺母和螺栓已经为升序。此时C\left ( n \right )=n+1+n+.....+3\mathbf{\epsilon }\theta (n^{2})

题目2:对玻璃瓶做强度测试,设地面高度为0,从0向上有n个高度,记为1,2,3,4......n,其中任何2个高度之间的距离都相等。如果一个玻璃瓶从高度i落到地上没有摔破,但从高度i+1落到地上摔破了,那么将玻璃瓶的强度记为i。

(1)假设每种玻璃瓶只有一种测试样品,设计算法来测出每种玻璃瓶的强度,以测试次数作为算法最坏情况下的时间复杂度量度,对算法复杂度作出估计。

(2)假设每种玻璃瓶有足够多的相同测试样品,设计算法使用最少的测试次数完成测试,该算法最坏情况下的时间复杂度是多少?

(3)假设每种玻璃瓶只有2个相同的测试样品(k=2),设计次数尽可能少的算法完成测试,你的算法最坏情况下的时间复杂度是多少?

(4)尝试将(3)的方法推广到其他任意给定的k(k>2)的情况,其中k代表测试样品的个数。

解:

(1)顺序从下到上测试,最差情况下测试样品强度为n,共测试n次,即T\left ( n \right )=O\left ( n \right )

(2)二分查找。T\left ( n \right )=O\left ( logn \right )

(3)用分治法的思想,将高度1,2,3.....n,分成\sqrt{n}组,每组\sqrt{n}个,第m组组内高度分别为:(m-1)\sqrt{n}+1,(m-1)\sqrt{n}+2,(m-1)\sqrt{n}+3,.....,(m-1)\sqrt{n}+\sqrt{n},每组高度为\sqrt{n},2\sqrt{n},3\sqrt{n},.....,\sqrt{n}\sqrt{n}

从下到上检查每组最后一个高度,如果玻璃瓶的强度处在第 i 组的高度值中,再依次从下到上检查 i 组内的高度。

时间复杂度T(n)=O(\sqrt{n})

(4)方法同三,将高度分为\sqrt[k]{n}组,每组\sqrt[k]{n}个,同理 时间复杂度:T(n)=\theta (\sqrt[k]{n})

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值