[读书笔记]算法(Sedgewick著)·第一章(2)
接着上一篇,mindmap更新如下内容。

3.背包、队列和栈
这节主要讲述了这三种数据结构(Bag、Queue、Stack)的API、实现以及链表。Queue和Stack还含有删除元素的方法。并引出了泛型,也就是可以用它来存储任何类型的数据。在API中,类class Bag<Item> implements Iterable<Item>的表示就将Item定义为一个类型参数。在创建数据结构时,我们就可以用任何类型代替Item了。有了泛型,我们就只需要一份API来处理所有类型的数据了。这要大大提倡,虽然在一些具体操作上(如删除)API无法表现差异。
这里还提到了Java中的引用类型,即Boolean、Byte、Character、Double、Float、Integer、Long和Short分别对应着boolean、byte、char、double、float、int、long和short(前者为引用数据类型,后者为原始数据类型)。Java对于这两种类型的转换在使用泛型提供了自动装箱/拆箱。接着又写到了迭代(foreach)访问元素,即使用Java语言本身的机制而不依赖数据结构的具体实现。
这三种结构的特点简单描述一下。背包不能删除元素也忽略Add时的顺序。先进先出是队列的特点,而后进先出是栈的特点。书中还介绍了一个应用栈的经典算法——Dijkstra的双栈算术表达式求值算法。他使用了一个操作数栈和一个运算符栈来处理表达式,忽略左括号,在遇到右括号时弹出运算符和所需数量的操作数来进行运算,并将结果压入操作数栈。
用定容栈进行热身,开始实现这三种数据结构。最后得到泛型的可动态调整大小的结构,也介绍了Java的垃圾回收策略,并避免对象游离。当中穿插了怎样用链表作为数据单元。
在这节中的数据结构式整本书的基石,其研究步骤也是全书中研究方法的原型,依次为定义API、开发用例代码、描述一种数据结构并定义类的实例变量、描述算法并实现类的实例方法、分析算法。
4、算法分析

先通过一个记录程序运行实现的计数器的观察,来时间对于分析算法的意义。随后进入了数学时间,书中分别使用了标准比例尺和对数比例尺,在对数比例尺中出现了一条直线,其表达式为lg(T(N)) = 3lgN + lga,多么熟悉的式子,而以前并不知道它的意义是在对数比例下呈现。通过这条直线我们可以预计更大数值的运行实现。对数图像中的直线等价于我们对数据符合公式T(N)=aNb的猜想,这个公式称为幂次法则。许多自然和人工现象都符合这个法则。
这是不是说我们需要一个数学模型来描述算法运行时间呢?当然。度量程序运行时间的就是我们很熟悉的每条语句的耗时和频率,而执行最频繁的指令决定了程序执行的总时间,也就是一小部分指令。那么,我们就化繁为简,只考虑运行时间地增长数量级。忽略了个体机器运算能力的细节使得发表于数十年前的经典算法的性能理论在今天仍然使用。使用成本模型来评估算法的性质,比如访问数组元素的次数。如上就总结出了分析算法的步骤,即确定输入模型(问题规模)、识别内循环、确定成本模型、判断操作的执行频率。
在介绍了增长数量级后,我们把书中的算法分为2类。第一类是解决问题的简单方法,即暴力算法;第二类是降低算法所需时间地增长数量级的改进算法。书中也提醒我们一些需要注意的例外,比如大常数。当然,内存也是应该考虑的元素。最后提醒了一句,在生产代码时不要过于关注程序的性能,首要任务是写出清晰正确的代码。这是不是搬运工的意思?
[读书笔记]算法(Sedgewick著)·第一章(2)的更多相关文章
- [读书笔记]算法(Sedgewick著)·第一章(1)
到家放松放松之后就开始学习算法了,手里拿的是拿的是一本Robert Sedgewick的橙皮书<算法(第四版)>的.这本书与导论那本书的不同之处在于轻数学思想.重实现,也就是说这是一本很不 ...
- [读书笔记]算法(Sedgewick著)·第二章.初级排序算法
本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. public s ...
- 读书笔记 - javascript 高级程序设计 - 第一章 简介
第一章 简介 诞生时间 1995 最初用途 客服端验证 第一版标准 注意是标准 1997年 Ecma-262 一个完整的js实现由三部分组成 ECMAScript DOM 文档对象模型 BO ...
- 《深入浅出设计模式》读书笔记 C#版(第一章)
原始需求和设计 事情是这样开始的,公司需要做一套程序,鸭子,设计如下: 一个鸭子父类,多个派生类,三个可override的方法. 第一次需求变更 我们要会飞的鸭子!!!!! 所以我们做了如下的更改: ...
- unix环境高级编程-读书笔记与习题解答-第一篇
从这周开始逐渐的进入学习状态,每天晚上都会坚持写c程序,并且伴随对这本书的深入,希望能写出更高质量的读书笔记和程序. 本书的第一章,介绍了一些关于unix的基础知识,在这里我不想去讨论linux到底是 ...
- Unity Shader入门精要读书笔记(一)序章
本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...
- The Art of Multiprocessor Programming读书笔记 (更新至第3章)
这份笔记是我2013年下半年以来读“The Art of Multiprocessor Programming”这本书的读书笔记.目前有关共享内存并发同步相关的书籍并不多,但是学术文献却不少,跨越的时 ...
- 数据结构与算法 java描述 第一章 算法及其复杂度
目录 数据结构与算法 java描述 笔记 第一章 算法及其复杂度 算法的定义 算法性能的分析与评价 问题规模.运行时间及时间复杂度 渐进复杂度 大 O 记号 大Ω记号 Θ记号 空间复杂度 算法复杂度及 ...
- C++ Primer读书笔记(一)第一篇:C++概述,第一章:开始
1. 主要内容 介绍程序语言的核心思想和C++的基本概念. 印象比较深刻的就是分而治之(divide and conque)的分解思想. 2. 知识广场 1) C++ 文件后缀 cc, cpp,,cx ...
随机推荐
- Linux统计某文件夹下文件、文件夹的个数
统计某文件夹下文件的个数 ls -l |grep "^-"|wc -l 统计某文件夹下目录的个数 ls -l |grep "^d"|wc -l 统计文件夹下文件 ...
- WPF从入门到放弃系列第二章 XAML
本文是作者学习WPF从入门到放弃过程中的一些总结,主要内容都是对学习过程中拜读的文章的整理归纳. 参考资料 XAML 概述 (WPF):https://msdn.microsoft.com/zh-cn ...
- 在树莓派上部署asp.net
今天成功的在树莓派上部署asp.net呢.之前在unbuntu上测试成功了,结果今天操作的时候又不会操作了,主要对Linux太不熟悉了,找资料,资料又不多,这次赶紧记录下来,以备下次查阅. 我用的mo ...
- git reflog 和git log :no branch git 提交方式
git reflog 和git log的区别,外加git cherry-pick的一种用法 git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被 ...
- 【已解决】Vmware无法创建虚拟网卡的问题
最近因为各种需要,要在虚拟机里使用桥接方式连接.但是不管怎么操作,都无法添加虚拟网卡.连续好多天需要用到桥接上网,今儿多方搜索,找到了解决方案. 参考资料:http://tieba.baidu.com ...
- python 文件查找 glob
glob模块是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多.查找文件只用到三个匹配符:"*", "?&quo ...
- Python属性、方法和类管理系列之----属性初探
在学习dict的时候,肯定听过dict是Python中最重要的数据类型,但是不一定知道为什么.马上你就会明白原因了. Python中从模块.到函数.到类.到元类,其实主要管理方法就是靠一个一个的字典. ...
- 当页面编辑或运行提交时,出现“从客户端中检测到有潜在危险的request.form值”问题,该怎么办呢?
最近在学习highcharts时,关于其中的导出功能,本来是想把导出的图片存放在本地,发现只有在电脑联网的情况下才可以一下导出图片,后来查阅了一番资料,才发现highcharts中的导出默认的官网服务 ...
- sort()排序
var ary = [8,9,10,3], compare = function(a,b){ return b.age-a.age; }, g = [ { name:"jim", ...
- 如何用JavaScript在浏览器端获取图片的原始尺寸大小?
var img = $("#img_id"); // Get my img elem var pic_real_width, pic_real_height; $("&l ...