【练习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:无代码题,栈的思考题的更多相关文章

  1. EC读书笔记系列之12:条款22、23、24

    条款22 将成员变量声明为private 记住: ★切记将成员变量声明为private.这可赋予客户访问数据的一致性.可细微划分访问控制.允诺约束条件获得保证,并提供class作者以充分的实现弹性. ...

  2. 第03章 AOP前奏

    第03章 AOP前奏 提出问题 ●情景:数学计算器 ●要求 ①执行加减乘除运算 ②日志:在程序执行期间追踪正在发生的活动 ③验证:希望计算器只能处理正数的运算 ●常规实现 ●问题 ○代码混乱:越来越多 ...

  3. 第03章_基本的SELECT语句

    第03章_基本的SELECT语句 1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑诞生,如今,借由这台电脑发展起来的互联网已经自成江湖.在这几十年里,无数的技术.产业在这片江湖 ...

  4. 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 ...

  5. 记一次metasploitable2内网渗透之21,22,23,25端口爆破

    Hydra是一款非常强大的暴力破解工具,它是由著名的黑客组织THC开发的一款开源暴力破解工具.Hydra是一个验证性质的工具,主要目的是:展示安全研究人员从远程获取一个系统认证权限. 目前该工具支持以 ...

  6. 【Weiss】【第03章】增补附注

    基本上每章到增补附注这里就算是结束了. 根据设想,每章的这一篇基本上会注明这一章哪些题没有做,原因是什么,如果以后打算做了也会在这里补充. 还有就是最后会把有此前诸多习题的代码和原数据结构放整理后,以 ...

  7. 【Weiss】【第03章】练习3.25:数组模拟队列

    [练习3.25] 编写实现队列的例程,使用 a.链表 b.数组 Answer: 在这章一开头就已经写了个链表的队列例程了,所以实际上只要做b小题就可以. 数组模拟队列和链表的两点小不同是: ①.数组空 ...

  8. 【Weiss】【第03章】练习3.16:删除相同元素

    [练习3.16] 假设我们有一个基于数组的表A[0,1...N-1],并且我们想删除所有相同的元素. LastPosition初始值为N-1,但应该随着相同元素被删除而变得越来越小. 考虑图3-61中 ...

  9. 【Weiss】【第03章】练习3.26:双端队列

    [练习3.26] 双端队列(deque)是由一些项的表组成的数据结构,对该数据结构可以进行下列操作: Push(X,D):将项X插入到双端队列D的前端. Pop(D):从双端队列D中删除前端项并返回. ...

随机推荐

  1. Heartbeat(注意iptables和selinux的问题)

    安装 yum –y install heartbeat libnet配置 通过yum安装配置文件目录/etc/ha.d目录下没有配置文件需要从doc目录中复制三个文件.ha.cf.authkeys.h ...

  2. Typescript - 类型断言

    原文:TypeScript基本知识点整理 零.序言 类型断言,可以用来手动指定一个值的类型. 给我的感觉,和 java 中的强制类型转换很像. 常常和联合类型配合使用,如: // 错误示例 funct ...

  3. 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 ...

  4. 同时安装Python2,Python3如何解决冲突问题【官方解法】

    使用py -2或py -3命令来区分调用Python启动器 去掉参数 -2/-3如何运行? 每次运行都要加入参数-2/-3还是比较麻烦,所以py.exe这个启动器允许你在代码中加入说明,表明这个文件应 ...

  5. element ui table render-header自定义表头信息使用

    在使用vue自定义组件内容过程之中,我们绝大多数情况下都是通过预先写好不同的html模板,再通过props传入不同的值来渲染不同的模板.例如我们需要实现一个<v-title size='1'&g ...

  6. 【渗透】node.js经典问题

    1.循环问题 当循环调用 require() 时,一个模块可能在未完成执行时被返回.例如以下情况:a.js: exports.done = false; const b = require('./b. ...

  7. CSS3详解:border color

    继续我们的 ,大家觉得怎么样呢?

  8. ysoserial源码结构分析

    1.前言 之前也花了几天晚上熟悉了一下commonscollections系列的构造,那么学习一下这个项目是如何设计的也挺重要,多学习大佬如何写代码应该也能对自己的代码能力有提升吧~2333 2.项目 ...

  9. 桌面运维之Windows快捷键,每一个工程师都是“快捷键”的工程师!

    1.win快捷键 首先教大家win7新增的3D效果: Win + Tab 快速切换已打开的程序(和Alt+tab一样的效果) Win + Home 将所有使用中窗口以外的窗口最小化 Win + Spa ...

  10. sf-git机制

    为什么要专门写一篇关于sf科技公司的GIT管理机制呢?因为本周经历了两天的学习和考试,刚开始没在意,因为之前公司也用的GIT,所以没怎么看视频,就看了文档,练习考试时候才发现并非以前的那种git流程, ...