【练习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. Android开发之《libyuv库的使用》

    转自:http://bashell.nodemedia.cn/archives/build-google-libyuv-with-ndk-for-android.html 官方网站:https://c ...

  2. Java找出两个链表的第一个公共节点

    题目描述输入两个链表,找出它们的第一个公共结点. 我的思路:因为是链表,长度都是未知的,不能盲目的两个一起开始自增判断. 首先需要得到 L1的长度 和 L2的长度,让较长的那个先走 (length1- ...

  3. netty源码分析(十八)Netty底层架构系统总结与应用实践

    一个EventLoopGroup当中会包含一个或多个EventLoop. 一个EventLoop在它的整个生命周期当中都只会与唯一一个Thread进行绑定. 所有由EventLoop所处理的各种I/O ...

  4. js 网页运行原理

    当我们打开一个网页的时候,浏览器会首先创建一个窗口,这个窗口就是我所知道的window对象,也就是整个Javascript运行所依附的全局变量. 为了加载网页文档,当前窗口又需要创建一个Documen ...

  5. node新人

    node  使用   http和express创建服务器环境 如 apache  iis等 不需要配置一堆文件  为啥使用node  省事  v8引擎  异步js 不影响浏览者浏览网站 redis   ...

  6. <USACO06NOV>玉米田Corn Fields

    状压emm 二进制真有趣 来自dp垃圾的欣喜 Description 农民 John 购买了一处肥沃的矩形牧场,分成M*N(1 <= M <= 12; 1 <= N <= 12 ...

  7. LeetCode43(字符串相乘)

    题目: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2", ...

  8. BTCU(高校区块链联盟)-联盟链第6讲作业

    // payment project main.go package main import ( "fmt" "strconv" "github.co ...

  9. js作用域其二:预解析

    文章目錄 解析机制 JavaScript是一门解释型的语言 , 想要运行js代码需要两个阶段 编译阶段: 编译阶段就是我们常说的JavaScript预解析(预处理)阶段,在这个阶段JavaScript ...

  10. 芮勇博士荣获2016年IEEE 计算机学会技术成就奖

    微软亚洲研究院常务副院长 芮勇 日前,电气电子工程师学会(the Institute of Electrical and Electronics Engineers, IEEE)计算机学会(Comp ...