水壶
来源:互联网 发布:小学生英语辅导软件 编辑:程序博客网 时间:2024/06/08 17:24
8-4 水壶
假设给定了n个红色的水壶和n个蓝色的水壶,它们的形状和尺寸都不相同。所有红色水壶中所盛水的量都不一样,蓝色水壶也是一样。此外,对于每个红色的水壶,都有一个对应的蓝色水壶,两者所盛的水量是一样的。反之亦然。
你的任务是将所盛水量一样的红色水壶和蓝色水壶找出来。为了达到这一目的,可以执行如下操作:挑选出一对水壶,其中一个是红色的,另一个是蓝色的:将红色水壶中倒满水;再将水倒入到蓝色的水壶中。通过这个操作,可以判断出来这两只水壶的容量哪一个大,或者是一样大。假设这样的比较需要一个时间单位。你的目标是找出一个算法,它通过执行最少次数的比较,来确定分组和配对问题。记住不能直接比较两个红色的或两个蓝色的水壶。
a)给出一个确定型的算法,它利用Θ(n^2)次比较来完成水壶的配对。
b)证明:对于一个可以解决本问题的算法,必须执行的比较次数的下界为Ω(nlgn)。
c)给出一个随机化的算法,其期望的比较次数为O(nlgn),并证明这个界是正确的。对你的算法来说,最坏情况下的比较次数是什么?
分析与解答:
a)先用朴素的方法,拿出第1个红色水壶,然后从n个蓝色水壶中去配对,需要Θ(n)次比较。重复上述操作,知道所有的红色水壶都完成了配对。总的时间复杂度为Θ(n^2)
b)采用决策树的方法进行分析,总共可能的配对有n!种,每次比较的产生的分支有3个(大于、相等或小于),若决策树的高度为h,则
由斯特林公式,可知高度h =Ω(nlgn),这就是比较次数的下界
c)由于每个红色的水壶和蓝色的水壶都有一个配对,因此理论上我们只需要分别将其进行排序即可。但是实际问题中,是不容许两个各红色或蓝色的水壶进行比较的,必须颜色不一样的水壶才能进行比较。因此需要一定的技巧。
整个排序的过程中采用快速排序的思想,现对最关键也是有所不同的PATITION部分,这个过程有点类似交叉验证,具体描述如下:
1. 从红色水壶序列中随机选择一个作为枢轴元素
2. 在蓝色水壶序列中查找和该红色水壶容量一样的那个作为枢轴元素
3. 利用红色水壶枢轴元素对蓝色水壶序列进行PATITION。
4. 利用蓝色水壶枢轴元素对红色水壶序列进行PATITION。
如此PATIION部分就完成了,期望的时间复杂度为Θ(n)。整个过程类似快排迭代进行即可完成排序。
整个时间的复杂度为:
即时间复杂度为O(nlgn)。最坏的情况下时间复杂度为O(n^2)。
- 水壶
- bzoj4242: 水壶
- 4242: 水壶
- 水壶再一次爆了!!!
- 水壶、茶叶罐和我
- uva571 - Jugs(水壶)
- BZOJ 4242 水壶
- bzoj 4242: 水壶
- 用类去封装花瓶,水壶,对象
- 闷水壶的冒险码头
- POJ 3414 Pots(水壶)
- [bzoj4242][最小生成树]水壶
- <算法导论>第八章4 水壶(Kettle)
- 去除热水壶里的污垢
- 算法进化历程之“水壶问题”
- 满满一水壶的寻常事
- 数据迁移工具--“水壶”(一)
- [网格最小生成树] BZOJ 4242 水壶
- PHP中的define与const
- 一步步学汇编(三)开始编写程序
- CSDN博客首页报错!!
- 行为编辑器
- android之首选项相关 Preferences(四)组织首选项
- 水壶
- integer相等判断
- iphone开发阶段总结(三)代码示例
- 一个项目涉及到的50个Sql语句(整理版) (2)
- 心术
- 嵌入式程序员应该知道的0x10个基本问题
- 数据结构——红黑树
- Tomcat Manager 的Sessions Administration之Guessed User name来源
- 托管代码和非托管代码