【Weiss】【第03章】练习3.22、3.23、3.24:无代码题,栈的思考题
【练习3.22】
a.提出支持栈的Push和Pop操作以及第三种操作FindMin的数据结构,其中FindMin
返回该数据结构的最小元素,所有操作在最坏情况下的运行时间都是O(1)。
b.证明,如果我们加入第四种操作DeleteMin,那么至少有一种操作必须花费Ω(logN)时间。
【练习3.23】
说明如何用一个数组实现三个栈。
【练习3.24】
在2.4节中用于计算斐波那契的递归例程如果在N=50下运行,栈空间有可能用完吗,为什么?
Answer:
【练习3.22】
a.最简单的想法就是再维护一个最小值域,有更小的值被Push入栈的时候,修改最小值。
但这种方法会导致当前的最小值Pop出栈的时候无法获得新的最小值。
相应地把这个最小值域扩展成一个辅助栈。
当新入主栈的元素大于当前最小值时,不作任何附加操作;当新入主栈的元素小于当前最小值时,拷贝一份压入辅助栈。
同理弹出时如弹出的是当前最小值,则辅助栈同时弹出;否则仅主栈弹出。
Push、Pop、FindMin的时间复杂度都是O(1)。
b.当一个操作集共同拥有Pop、Push、FindMin、DeleteMin的时候,它就可以通过比较的方法来执行一组元素的排序了。
确切地说,只要后三个操作共同存在即可。如共N个元素排序,则Push、FindMin、DeleteMin各需N次必然可以完成条件。
众所周知的结论是,以比较的方法来进行排序,其时间复杂度下界为Ω(NlogN),相除有:
执行一次Push+FindMin+DeleteMin的时间复杂度下界为Ω(logN)。
这说明这三个操作不能同时以O(1)时间复杂度共存,至少有一个的复杂度必须花费Ω(logN)。
【练习3.23】
其实自己想是没怎么想出来的,看了答案以后觉得答案的方法也是个坑爹方法,如下:
一个数组,就如同之前题目所模拟的,一个栈从左一个从右开始向中间走,这是两个栈。
第三个栈的起点在数组的中间,一开始,选择任意一个方向扩张,当受阻时,计算并将数据位移到当前数组空间的正中。
………………………………(╯‵□′)╯︵┻━┻
这算是解决办法么!一点效率也没有好不好!照这么说一个数组模拟一百个栈都可以了!
总之答案这么说也只能这样了……
【练习3.24】
N=50妥妥地溢出。
求斐波那契用递归就是指数型增长的时间复杂度。栈空间才多少,50次方下来几个T都不够用。
【Weiss】【第03章】练习3.22、3.23、3.24:无代码题,栈的思考题的更多相关文章
- EC读书笔记系列之12:条款22、23、24
条款22 将成员变量声明为private 记住: ★切记将成员变量声明为private.这可赋予客户访问数据的一致性.可细微划分访问控制.允诺约束条件获得保证,并提供class作者以充分的实现弹性. ...
- 第03章 AOP前奏
第03章 AOP前奏 提出问题 ●情景:数学计算器 ●要求 ①执行加减乘除运算 ②日志:在程序执行期间追踪正在发生的活动 ③验证:希望计算器只能处理正数的运算 ●常规实现 ●问题 ○代码混乱:越来越多 ...
- 第03章_基本的SELECT语句
第03章_基本的SELECT语句 1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑诞生,如今,借由这台电脑发展起来的互联网已经自成江湖.在这几十年里,无数的技术.产业在这片江湖 ...
- suse 12 二进制部署 Kubernetets 1.19.7 - 第03章 - 部署flannel插件
文章目录 1.3.部署flannel网络 1.3.0.下载flannel二进制文件 1.3.1.创建flannel证书和私钥 1.3.2.生成flannel证书和私钥 1.3.3.将pod网段写入et ...
- 记一次metasploitable2内网渗透之21,22,23,25端口爆破
Hydra是一款非常强大的暴力破解工具,它是由著名的黑客组织THC开发的一款开源暴力破解工具.Hydra是一个验证性质的工具,主要目的是:展示安全研究人员从远程获取一个系统认证权限. 目前该工具支持以 ...
- 【Weiss】【第03章】增补附注
基本上每章到增补附注这里就算是结束了. 根据设想,每章的这一篇基本上会注明这一章哪些题没有做,原因是什么,如果以后打算做了也会在这里补充. 还有就是最后会把有此前诸多习题的代码和原数据结构放整理后,以 ...
- 【Weiss】【第03章】练习3.25:数组模拟队列
[练习3.25] 编写实现队列的例程,使用 a.链表 b.数组 Answer: 在这章一开头就已经写了个链表的队列例程了,所以实际上只要做b小题就可以. 数组模拟队列和链表的两点小不同是: ①.数组空 ...
- 【Weiss】【第03章】练习3.16:删除相同元素
[练习3.16] 假设我们有一个基于数组的表A[0,1...N-1],并且我们想删除所有相同的元素. LastPosition初始值为N-1,但应该随着相同元素被删除而变得越来越小. 考虑图3-61中 ...
- 【Weiss】【第03章】练习3.26:双端队列
[练习3.26] 双端队列(deque)是由一些项的表组成的数据结构,对该数据结构可以进行下列操作: Push(X,D):将项X插入到双端队列D的前端. Pop(D):从双端队列D中删除前端项并返回. ...
随机推荐
- Heartbeat(注意iptables和selinux的问题)
安装 yum –y install heartbeat libnet配置 通过yum安装配置文件目录/etc/ha.d目录下没有配置文件需要从doc目录中复制三个文件.ha.cf.authkeys.h ...
- Typescript - 类型断言
原文:TypeScript基本知识点整理 零.序言 类型断言,可以用来手动指定一个值的类型. 给我的感觉,和 java 中的强制类型转换很像. 常常和联合类型配合使用,如: // 错误示例 funct ...
- JavaScript深入浅出-闭包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 function (){ var localVal ...
- 同时安装Python2,Python3如何解决冲突问题【官方解法】
使用py -2或py -3命令来区分调用Python启动器 去掉参数 -2/-3如何运行? 每次运行都要加入参数-2/-3还是比较麻烦,所以py.exe这个启动器允许你在代码中加入说明,表明这个文件应 ...
- element ui table render-header自定义表头信息使用
在使用vue自定义组件内容过程之中,我们绝大多数情况下都是通过预先写好不同的html模板,再通过props传入不同的值来渲染不同的模板.例如我们需要实现一个<v-title size='1'&g ...
- 【渗透】node.js经典问题
1.循环问题 当循环调用 require() 时,一个模块可能在未完成执行时被返回.例如以下情况:a.js: exports.done = false; const b = require('./b. ...
- CSS3详解:border color
继续我们的 ,大家觉得怎么样呢?
- ysoserial源码结构分析
1.前言 之前也花了几天晚上熟悉了一下commonscollections系列的构造,那么学习一下这个项目是如何设计的也挺重要,多学习大佬如何写代码应该也能对自己的代码能力有提升吧~2333 2.项目 ...
- 桌面运维之Windows快捷键,每一个工程师都是“快捷键”的工程师!
1.win快捷键 首先教大家win7新增的3D效果: Win + Tab 快速切换已打开的程序(和Alt+tab一样的效果) Win + Home 将所有使用中窗口以外的窗口最小化 Win + Spa ...
- sf-git机制
为什么要专门写一篇关于sf科技公司的GIT管理机制呢?因为本周经历了两天的学习和考试,刚开始没在意,因为之前公司也用的GIT,所以没怎么看视频,就看了文档,练习考试时候才发现并非以前的那种git流程, ...