Guure

Winter Is Coming.

随笔分类 -  算法与数据结构

算法(第4版)-2.5 应用
摘要:2.5.1 将各种数据排序 · 交易事务 · 指针排序 · 不可变的键 · 廉价的交换 · 多种排序方法 · 多键数组 · 使用比较器实现优先队列 · 稳定性:能够保留数组中重复元素的相对位置 稳定:插入排序、归并排序 不稳定:选择排序、希尔排序、快速排序、堆排序 2.5.2 我应该使用哪种排序算法 阅读全文

posted @ 2016-11-27 02:19 Guure 阅读(375) 评论(0) 推荐(0)

算法(第4版)-2.4 优先队列
摘要:定义:一种支持删除最大元素和插入元素的数据结构。 经典实现:基于二叉堆数据结构。 2.4.1 API 1. 只要我们能够高效地实现insert()和delMin(),下面的优先队列用例中调用了MinPQ的TopM就能使用优先队列解决这个问题。 2.4.2 初级实现 1. 数组实现(无序):修改pop 阅读全文

posted @ 2016-11-27 02:06 Guure 阅读(508) 评论(0) 推荐(0)

算法(第4版)-2.3 快速排序
摘要:public class Quick { public static void sort(Comparable[] a) { StdRandom.shuffle(a); // 消除对输入的依赖 sort(a, 0, a.length - 1); } private static void sort( 阅读全文

posted @ 2016-11-27 01:36 Guure 阅读(384) 评论(0) 推荐(0)

算法(第4版)-2.2 归并排序
摘要:归并:将两个有序的数组归并成一个更大的有序数组。 归并算法:先(递归地)将它分为两半分别排序,然后将结果归并起来。 · 优点:保证将任意长度为N的数组排序所需时间和NlogN成正比; · 缺点:所需的额外空间和N成正比。 2.2.1 原地归并的抽象方法 public static void merg 阅读全文

posted @ 2016-11-26 00:44 Guure 阅读(789) 评论(0) 推荐(0)

算法(第4版)-2.1 初级排序算法
摘要:2.1.1 游戏规则 1. 排序成本模型:在研究排序算法时,我们需要计算比较和交换的数量。对于不交换元素的算法,我们会计算访问数组的次数。 2. · 原地排序算法:除了函数调用所需的栈和固定数目的实例变量之外无需额外内存的原地排序算法; · 其他排序算法:需要额外内存空间来储存另一份数组副本。 2. 阅读全文

posted @ 2016-11-25 22:13 Guure 阅读(432) 评论(0) 推荐(0)

算法(第4版)-1.5 案例研究:union-find算法
摘要:问题→ 动态连通性:当程序从输入中读取了整数对p q时,如果已知的所有整数对都不能说明p和q是相连的,那么则将这一对整数写入到输出中。如果已知的数据可以说明p和q 是相连的,那么程序应该忽略p q这对整数并继续处理输入中的下一对整数。 该问题的应用→ 网络,变量名等价性,数字集合等。 设计API→ 阅读全文

posted @ 2016-11-07 00:21 Guure 阅读(1008) 评论(0) 推荐(0)

算法(第4版)-1.4.10 展望
摘要:总结:本小节总结了编程领域中的两大错误。 重点: 1. 常见错误一:过于关注程序的性能。 · 常常会降低生产效率,因为它会产生复杂而难以理解的代码 · 如果降低成本带来的效益并不明显,那么对运行时间的改进就不值得了 2. 常见错误二:完全忽略了程序的性能。 · 浪费了大量的时间 3. 改进程序,使之 阅读全文

posted @ 2016-11-06 00:01 Guure 阅读(308) 评论(0) 推荐(0)

算法(第4版)-1.4.9 内存
摘要:总结:本小节讲述了Java的内存分配机制以及各种数据结构所使用的内存量。 重点: 1. 计算机中的电路很大一部分的作用就是帮助程序保存一些值并在稍后取出它们。 2. 计算机上的Java对内存的使用经过了精心的设计(程序的每个值在每次运行时所需的内存量都是一样的),但实现了Java的设备非常多,而内存 阅读全文

posted @ 2016-11-05 23:34 Guure 阅读(426) 评论(0) 推荐(0)

算法(第4版)-1.4.8 处理对于输入的依赖
摘要:总结:如题。 重点: 1. 处理对于输入的依赖的有效方法: · 更加小心地对我们所要解决的问题所处理的输入建模 · 对最坏情况下的性能的保证 在计算机系统中最坏情况是非常现实的忧虑,因为程序的输入可能来自另外一个(可能是恶意的)用户而非自然界。例如,没有使用提供性能保证算法的网站无法抵御拒绝服务攻击 阅读全文

posted @ 2016-11-05 21:18 Guure 阅读(365) 评论(0) 推荐(0)

算法(第4版)-1.4.7 注意事项
摘要:总结:如题。 重点: 1. 注意事项有如下几点: · 大常数 我们要对可能的大常数项保持敏感。 · 非决定性的内循环 内循环是决定性因素的假设并不总是正确的。 · 指令时间 每条指令执行所需的时间总是相同的假设并不总是正确的。 · 系统因素 某种垃圾收集器或是JIT编译器或是正在从因特网中进行的下载 阅读全文

posted @ 2016-11-05 16:14 Guure 阅读(288) 评论(0) 推荐(0)

算法(第4版)-1.4.6 倍率试验
摘要:总结:本小节讲述了倍率试验的实现和作用。 重点: 1. 倍率试验的实现: · 开发一个输入生成器来产生实际情况下的各种可能的输入。 · 运行程序,它能够计算每次实验和上一次的运行时间的比值。 · 反复运行知道该比值趋近于极限2^b。 这个实验对于比值没有极限的算法无效,但它仍然适用于许多程序,我们可 阅读全文

posted @ 2016-11-05 15:48 Guure 阅读(1281) 评论(0) 推荐(0)

算法(第4版)-1.4.5 设计更快的算法
摘要:总结:本小节通过具体的例子展示了如何设计更快的算法。 重点: 1. 我们会按照以下方式解决各种新的问题: · 实现并分析该问题的一种简单的解法。我们通常将它们称为暴力算法,例如ThreeSum和TwoSum。 · 考察算法的各种改进,它们通常都能降低算法所需的运行时间的增加数量级,例如TwoSumF 阅读全文

posted @ 2016-11-05 15:01 Guure 阅读(476) 评论(0) 推荐(0)

算法(第4版)-1.4.4 增长数量级的分类
摘要:总结:顾名思义~ 重点: 1. 运行时间随着问题规模增大的增长速度:指数级别 > 立方级别 > 平方级别 >> 线性对数级别 > 线性级别 >> 对数级别 > 常数级别 请结合图1.4.5 典型的增长数量级函数加以理解。 2. 大多数的Java操作所需的时间均为常数。 3. 对数的底数和增长的数量级 阅读全文

posted @ 2016-11-03 23:33 Guure 阅读(1953) 评论(0) 推荐(0)

算法(第4版)-1.4.3 数学模型
摘要:总结:本小节讲述了近似运算时间、增长数量级和成本模型的概念以及算法的分析方法。 重点: 1. Knuth的基本见地很简单--一个程序运行的总时间主要和两点有关: · 执行每条语句的耗时; · 执行每条语句的频率。 前者取决于计算机、Java编译器和操作系统,后者取决于程序本身和输入。 如果对于程序的 阅读全文

posted @ 2016-11-03 23:14 Guure 阅读(544) 评论(0) 推荐(0)

算法(第4版)-1.4.2 观察
摘要:总结:本小节讲述了观察的方法和步骤。 重点: 1. 定量观察:计算性任务的困难程度可以用问题的规模(输入的大小或是某个命令行参数的值)来衡量。 2. Stopwatch数据类型的elapsedTime()方法能够返回自它创建以来所经过的时间,以秒为单位。 3. 有说服力的猜想:程序在不同的计算机上运 阅读全文

posted @ 2016-11-03 16:12 Guure 阅读(382) 评论(0) 推荐(0)

算法(第4版)-1.4.1 科学方法
摘要:总结:本小节解释了何为科学方法。 重点: 1. 科学方法--假说演绎法: · 细致地观察真实世界的特点,通常还要有精确的测量; · 根据观察结果提出假设模型 · 根据模型预测未来的事件 · 继续观察并核实预测的准确性 · 如此反复直到确认预测和观察一致 2. 我们所设计的实验必须是可重现的,这样他人 阅读全文

posted @ 2016-11-03 15:32 Guure 阅读(234) 评论(0) 推荐(0)

算法(第4版)-1.3.4 综述
摘要:重点: 1. 深入理解支持泛型和迭代的背包、队列和栈非常重要,原因有三: · 我们将以这些数据类型为基石构造本书中的其他更高级的数据结构; · 他们展示了数据结构和算法的关系以及同时满足多个有可能相互冲突的性能目标时所要面对的挑战; · 我们将要学习的若干算法的实现重点就是需要其中的抽象数据类型能够 阅读全文

posted @ 2016-10-31 02:50 Guure 阅读(227) 评论(0) 推荐(0)

算法(第4版)-1.3.3 链表
摘要:总结:本小节讲述了链表的概念,以及用链表实现Stack、Queue和Bag的过程和优缺点。 重点: 1. 定义:链表是一种递归的数据结构,它或者为空(null),或者是指向一个结点(node)的引用,该结点含有一个泛性的元素和一个指向另一条链表的引用。 2. 我们首先用一个嵌套类来定义结点的抽象数据 阅读全文

posted @ 2016-10-31 02:36 Guure 阅读(341) 评论(0) 推荐(0)

算法(第4版)-1.3.2 集合类数据类型的实现
摘要:总结:本小节先给出了一个简单而经典的实现,然后从泛型、调整数据大小、对象游离、迭代方面讨论它的改进。 重点: 1. 定容栈: · 只能处理String值 · 要求用例指定一个容量 · 不支持迭代 2. 我们希望用以下代码在FixCapacityStack的构造函数的实现中创建一个泛型的数组: 由于某 阅读全文

posted @ 2016-10-31 02:09 Guure 阅读(327) 评论(0) 推荐(0)

算法(第4版)-1.3.1 API
摘要:总结:本小节介绍了泛型、自动装箱、迭代、Bag、Queue、Stack以及一个栈用例的经典例子--算术表达式求值。 重点: 1. 集合类的抽象数据类型的一个关键特性是我们应该可以用它们储存任意类型的数据。一种特别的Java机制能够做到这一点,它被称为泛型,也叫作参数化类型。 2. 在处理赋值语句、方 阅读全文

posted @ 2016-10-31 01:44 Guure 阅读(512) 评论(0) 推荐(0)