【练习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. leetcode第22题:括号生成

    力扣上的题目可以大致分为以下种类: 对某种复杂规则的彻底解析,很有可能要构造状态机,充分考虑边界情况. 对某种数据结构及算法的应用. 对数学概念.遍历.动态规划等的综合应用. 通过分析,本题应该属于1 ...

  2. basecalling|vector mark|Assembly的难题|

    生物信息学 染色体可以据染色图谱判断染色体号码,1-22号染色体依次变短,它们影响机体发育,23号染色体决定性别.肿瘤是由于遗传密码变异造成的.因此,遗传密码的解读非常重要,但是因为遗传密码长度非常长 ...

  3. win7图片只显示图标不显示预览图解决方案

    问题描述: win7上图片只显示图标,不显示缩略图:不管是调节小图.中图还是大图或者其他均不显示:而且这种情况下使用截图工具截下来的图片都不自动带上扩展名:情况如下图: 解决方案: 打开计算机-> ...

  4. ERROR: Error in Log_event::read_log_event(): 'Found invalid event in binary log', data_len: 31, event_type: 35报错处理

    centos7系统MySQL5.7在用mysqlbinlog命令查询binlog日志时刚开始查询即自动终止查询,查了一下该日志有300M,于是仔细看发现有报错,见下图: 在网上查找经验贴http:// ...

  5. HAProxy此例简单介绍基于docker的HAProxy反代

    HAProxy拓展连接 此例简单介绍基于Docker的HAProxy反代 反代: 1.获取haproxy镜像  docker pull haproxy 2.写配置文件haproxy.cfg 1 glo ...

  6. PHP RabbitMQ 教程(三)

    发布/订阅 我们在上一节创建了一个工作队列,并假定队列对应的任务传送给了某个客户端.在这一章节我们会做一些完全不一样的东西–我们会发送一条消息到多个消费者,也称之为"发布/订阅"模 ...

  7. 烧钱时代终结!O2O还能玩啥花样?

    最终的最终,饱受亏损.烧钱玩补贴等争议的美团还是追随滴滴/快的.赶集/58的步伐,与大众点评愉快的在一起了!美团和大众点评作为O2O行业的领军企业,都因为不堪忍受持续地投入却不见回报的模式而不得不放低 ...

  8. 重大改革!Python,最接近人工智能的语言~将被加入高考科目!

    就在前几天,和一位浙江省高校的信息技术老师聊天,我得到了一个震惊的消息: 明年,浙江省信息技术教材将不会在使用晦涩难懂的VB语言,而是改学更简单易懂的Python语言.也就是说, Python语言将纳 ...

  9. Spring源码分析-BeanFactoryPostProcessors 应用之 PropertyPlaceholderConfigurer

    BeanFactoryPostProcessors 介绍 BeanFactoryPostProcessors完整定义: /** * Allows for custom modification of ...

  10. Docker 运行容器 CentOS7 使用systemctl 启动报错 Failed to get D-Bus connection: Operation not permitted

    原系统:Centos 7 Docker 版本:1.12.6 操作:安装并运行 Tomcat 问题:在创建好容器之后,并且进入系统运行启动tomcat [root@cd11558d3a22 /]# sy ...