选自Algorithm Design第二章第8题

1 题目描述

你正在对各种型号的玻璃罐进行一些压力测试,以确定它们可以跌落且不会破裂的高度。

在特定类型的玻璃罐上,此实验的设置如下:你有一个有 n 个梯级的梯子,你想找到最高的梯级,你可以从那里放下一个罐子,罐子不会摔碎。我们称之为最高的安全梯级。

尝试二进制搜索可能很自然:从中间的梯级中放一个罐子,看看它是否损坏,然后根据结果从梯级 n/4 或 3n/4 递归尝试。但这有一个缺点,即你可能会在寻找答案时打破很多罐子。

另一方面,如果您的主要目标是保存罐子,则可以尝试以下策略。首先从第一个梯级放下一个罐子,然后是第二个梯级,依此类推,每次爬高一个,直到罐子破裂。通过这种方式,你只需要一个罐子 在它损坏的那一刻,您就有了正确的答案——但你可能必须将罐子丢n 次(而不是像二进制搜索解决方案中那样记录 n)。

所以这是一个权衡:如果你愿意打破更多的罐子,你似乎可以执行更少的下降。为了更好地理解这种权衡是如何在定量水平上进行的,让我们考虑如何在给定 k ≥ 1 罐的固定“预算”的情况下运行此实验。换句话说,你必须确定正确的答案——最高的安全梯级——并且在这样做时最多可以使用 k 个罐子。

1.1 问题1

假设您的预算为 k = 2 罐。 描述一种寻找最高安全梯级的策略,该策略要求您最多丢弃一个罐子 f(n) 次,因为某些函数 f(n) 的增长速度比线性增长慢。 (换句话说,应该是这样的 )

1.2 问题2

现在假设您有 k > 2 罐的预算,对于某些给定的 k。 描述使用最多 k 个罐子找到最高安全梯级的策略。 如果 fk(n) 表示根据您的策略需要丢弃 jar 的次数,那么函数 f1, f2, f3,... 应该具有这样的特性,即每个函数的增长速度都比前一个慢:  

2 解题思路

2.1 问题1

(1) 假设n是一个安全平方数,我们在的倍数位置上扔第一个罐子,直到它碎了为止

如果我们到最后一个(也就是n),罐子还没有碎,那么就都是安全高度。

否则假设它在的位置碎了,我们就知道最高安全梯级应该在之间,于是我们从开始一个一个梯级向上扔,直到碎了为止

第一个罐子的时间复杂度是

第二个罐子的时间复杂度也是

所以整体的时间复杂度是

(2)  假设n不是一个安全平方数,我们在的倍数位置上扔第一个罐子,直到它碎了为止(

否则假设它在的位置碎了,我们就知道最高安全梯级应该在之间,于是我们从开始一个一个梯级向上扔,直到碎了为止

第一个罐子的时间复杂度是

第二个罐子的时间复杂度是

所以整体的时间复杂度也是

2.2 问题2

我们假设

然后我们第一个罐子在以及它的倍数的位置扔下。

在这种情况下,我们最多扔,同时,我们把第二个罐子的搜索空间降低至

然后我们递归地看k-1个罐子的情况,根据假设,我们有,也即

将这个和第一个罐子的情况合并,有:,假设成立

算法导论习题(1):摔杯子相关推荐

  1. 算法导论习题—主方法求渐进紧确界、递归树方法

    算法导论习题-主方法求渐进紧确界.递归树方法 4.5-1 a. T(n)=2T(n/4)+1T ( n ) = 2 T ( n / 4 ) + 1T(n)=2T(n/4)+1 b. T(n)=2T(n ...

  2. 算法导论习题,思考题题解博主录

    算法导论最好结合课后习题来看,以查漏补缺,检验自己对知识的掌握和理解水平 我在看的过程中,参考了以下博主的博客 http://blog.csdn.net/longhuihu?viewmode=cont ...

  3. 算法导论习题—二叉搜索树、红黑树、区间树

    算法基础习题-二叉搜索树.红黑树.区间树 1.二叉搜索树: 2.红黑树: 3.区间树: 1.二叉搜索树: 设 T T T是一棵二叉搜索树,其关键字互不相同;设 x x x是一个叶结点, y y y为其 ...

  4. 算法导论习题C.2-9答案

    题目:你参加一个游戏.该游戏将奖品藏在了三个幕布之后.如果你选对了幕布,则可以赢得奖品.在你选择了一个幕布后,但是幕布还没有揭开之前,支持人会揭开另两个幕布中的一个空幕布(支持人知道哪个幕布后是空的) ...

  5. 算法导论 习题24.2-4 amp; 24.3-6 单源最短路径问题

    24.2-4:给出一个高效算法来统计邮箱无回路图中的全部路径数.分析所给出的算法. 24.3-6:设G=(V,E)为带权有向图,权函数W: E-> {0,1,....,W},其中W为某非负整数. ...

  6. 算法导论习题解答 16-1 (找零问题)

    考虑用最少的硬币找nnn美分零钱的问题.假定每种硬币的面额都是整数. a. 设计贪心算法求解找零问题,假定有25美分.10美分.5美分和1美分4中面额的硬币.证明你的算法能找到最优解. b. 假定硬币 ...

  7. 算法导论中英文版下载

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 算法导论 ...

  8. 算法导论第三版第二章思考题答案

    算法导论第三版第二章思考题答案 第二章思考题 算法导论第三版第二章思考题答案 2.1 2.2 2.3 2.4 汇总传送门 2.1 #include<iostream> using name ...

  9. 算法导论第三版2.3答案

    算法导论第三版2.3答案 2.3 算法导论第三版2.3答案 2.3-1 2.3-2 2.3-3 2.3-4 2.3-5 2.3-6 2.3-7 汇总传送门 2.3-1 划分: {3}, {41}, { ...

最新文章

  1. KubeSphere安装Mysql5.7
  2. 软件测试mysql常用语句_测试中常用到的SQL语句(Oracle)
  3. Sql语句里的递归查询
  4. [Python图像处理] 二十六.图像分类原理及基于KNN、朴素贝叶斯算法的图像分类案例
  5. [JSP暑假实训] 一.MyEclipse安装及JAVA基础知识
  6. c 连接mysql.mwb_CodeSmith连接mysql提示“找不到请求的 .Net Framework Data Provider”的解决方法...
  7. Linux 多线程开发-线程的结束pthread_kill和pthread_cancel
  8. 六:SpringCloud-Config
  9. python中 is 和== 的区别
  10. Transfer-Encoding: chunked
  11. 数据库 SQL语法二
  12. matlab实现信号与系统中卷积的计算的两种方法
  13. 语音信号处理的一些基础知识
  14. [转]PHP FFI详解 - 一种全新的PHP扩展方式
  15. python股票买卖问题_LeetCode-Python-714. 买卖股票的最佳时机含手续费
  16. 百个XSS-payload注入汇总
  17. [源码和文档分享]基于WIN32 API界面编程实现的华容道小游戏
  18. cad模型轻量化_UNISOL告诉你,CAD与VR能迸发出怎样的火花
  19. 原创 人脸检测 RetinaFace
  20. Cannot find module ‘worker_threads‘

热门文章

  1. 基于I2C协议的AHT20温湿度传感器的数据采集
  2. 实用工具Snipaste——论文阅读神器
  3. uln2003和2803两个有刷直流电机控制方案
  4. 安全之初——加解密、签名和证书理解
  5. 毫米波雷达前装「增速下滑」,行业TOP玩家「All in」4D成像
  6. 地理信息系统(GIS)系列——ArcGIS中的各种图层
  7. 常见排序算法的最好、最坏、平均时间复杂度、稳定性、是否基于比较
  8. ArcGIS VS QGIS——两者之间的27点比较(译)
  9. 自动化测试的最佳Python工具有哪些?
  10. 一篇文章牢记C/C++指针和引用区别