Coursera公开课普林斯顿Algorithms学习笔记
文章平均质量分 94
Coursera公开课 普林斯顿大学 Professor Robert Sedgewick and Kevin Wayne
Kevin_miu
简单的学习,简单地工作。
展开
-
【Algorithms公开课学习笔记1】 Union-Find 合并查找
Union-Find 合并查找动态连接性判断连接性的关键等价关系模型:如果有(a,b),(b,c),那么也会有(a,c)。其中()表示有连接。连通分量:最大的可连通对象集合,有两个特点:1)连通分量内部任意两个对象都是相连通的;2)连通分量内部的对象不与外部对象相连通。利用连通分量,可以方便地实现并查集的两个操作:查询请求和合并命令查找:检查两个对象是否在相同的...原创 2018-07-27 21:17:20 · 368 阅读 · 0 评论 -
【Algorithms公开课学习笔记2】 算法性能分析方法
Analysis of Algorithms 算法性能分析方法Observation观察使用编程语言实现一个算法,测试其运行时间是一件非常重要的事情。常用的有以下3中方法(针对Java程序)方法1:手动测量直接使用计时器来测量运行时间(估计没有人会接受这种方法)方法2:使用程序自动测量在java中Stopwatch类里面有elapsedTime()方法可以测...原创 2018-07-27 21:18:35 · 460 阅读 · 0 评论 -
【Algorithms公开课学习笔记3】 栈与队列
Stack and Queue 栈和队列0.前言本文是对数据类型的学习笔记,将会从接口(interface),实现(implement), 客户(client)等三个角度分模块来组织文章。接口:对数据类型、基本操作的描述(API) 实现:实现API的基本操作的实际代码 客户:在程序里调用API所定义的基本操作1.Stack 栈栈最基本的特点就是后进先出(LIFO...原创 2018-09-05 17:30:20 · 183 阅读 · 0 评论 -
【Algorithms公开课学习笔记4】排序算法part1——基础排序
Elementary Sorts 基本排序0.前言本文将会涉及以下几种基本排序方法:选择排序(selection sort),插入排序(insertion sort),希尔排序(shell sort),洗牌(shuffling),凸包(convex hull)等1.排序的规则在java中,如果想实现能够对任意数据类型排序的话,就必须要实现comparable接口。1....原创 2018-09-05 17:31:42 · 243 阅读 · 0 评论 -
【Algorithms公开课学习笔记5】排序算法part2——归并排序
Merge Sort 归并排序0.前言前面的文章已经分析了选择排序、插入排序、希尔排序等基础排序算法,本文将分析一个性能极高的排序算法——归并排序。在Java编程的时候,我们经常会使用到一个API:Arrays.sort(o),如果括号中的o是对象的话,那么该API就是调用归并排序算法(结合了插入排序)来完成排序的。顺带一提,如果括号里的o是java基本类型,那么该API就会调用快速排...原创 2018-09-11 10:31:07 · 347 阅读 · 0 评论 -
【Algorithms公开课学习笔记6】 排序算法part3——快速排序
Quick Sort 快速排序0.前言前面的文章分析了归并排序这个性能极高的排序算法,本文将继续分析另一个性能相当的排序算法——快速排序。快速排序还被誉为20世纪十大最佳算法之一。在Java编程中Arrays.sort(o),如果括号里的o是java基本类型,那么该API就会调用快速排序算法。1.快速排序原理快速排序运用了递归的思想:input:数组sso...原创 2018-09-11 10:34:10 · 223 阅读 · 0 评论 -
【Algorithms公开课学习笔记7】 排序算法part4——堆排序
HeapSort 堆排序0. 前言本文继续分析另一个很重要的高效排序算法——堆排序。不过,在此之前,需要先引入堆和优先队列的概念,这是堆排序的基础。1.优先队列(Priority Queue)基本概念顾名思义,优先队列是由队列演变而来的,包含最基本的插入和删除操作。优先队列的插入规则与队列一致,是插入(添加)到队列的末尾;删除规则比较特殊,是删除(在指定规则中)优先级最高的项。(最大项...原创 2018-09-21 15:39:59 · 203 阅读 · 0 评论 -
【Algorithms公开课学习笔记8】 符号表part1——二叉搜索树
BST 二叉搜索树0. 前言本文的主要内容是分析符号表这种数据结构,并着重介绍使用二叉搜索树来实现符号表的方法。1. Symbol Table 符号表基本概念符号表是一种键值对(key-value)的数据结构,其基本操作包括:插入一个键值对,根据键查找其对应的值。符号表在现实中最常见的应用有:DNS域名解析系统(如下图),routing table路由表,file system文件系统...原创 2018-09-21 15:41:03 · 300 阅读 · 0 评论 -
【Algorithms公开课学习笔记9】 符号表part2——平衡搜索树
Balanced Search Tree 平衡搜索树0. 前言上一篇文章,我们分析了二叉搜索树(BST传送门)。在二叉搜索树中,查找、插入、删除、ceiling和floor等操作的平均时间性能取决于树高。在极端情况下(如插入有序序列后),如果树高h过大,其时间性能将会变得很差。根据树的特点,通过平衡树操作可以有效地降低树的高度,从而达到理想的时间性能。这就是本篇文章的重点——平衡搜索树(BST...原创 2018-10-05 19:26:33 · 265 阅读 · 0 评论 -
【Algorithms公开课学习笔记10】 符号表part3——平衡搜索树的应用
Geometric Application of BSTs 平衡搜索树的几何应用0. 前言在前面的文章中,我们分析了符号表的许多基本操作,包括:查找、插入、删除等。现在我们新增两个操作:范围查找(range search) 和 范围统计(range count)。这两个操作中数据的SQL查询语句很常见。1. 一维范围搜索基本概念一维查找的几何解释如下:(结合下图)key是作为一维线段...原创 2018-10-05 19:25:27 · 187 阅读 · 0 评论 -
【Algorithms公开课学习笔记11】 符号表part4——哈希表
哈希表HashTable0.前言前面的文章我们分析了符号表的集中实现方式:有序链表、无序数组、二叉搜索树(BST)、平衡搜索树(红黑树法)等,通过下图回忆一下各种实现方法的性能对比。那么,除此之外,是否还存在性能更好的实现方法呢?答案是肯定的,就是本文将重点介绍的哈希表(HashTable)。1.哈希函数哈希表就是使用一个key-indexed的表来存储数据,其中该index是对key...原创 2018-10-07 12:59:47 · 390 阅读 · 0 评论 -
【Algorithms公开课学习笔记12】 符号表part5——符号表的应用
符号表的应用0.前言经过几篇文章的分析,我们已经清楚了符号表的几种实现方法了。本文将着重介绍符号表的实际应用。在本文的代码中,如果不特别强调,其符号表的实现方式都是红黑树来实现的。1.集合set集合最大的特征就是{in, not in}两种属性,因此非常适合做关键字筛选/过滤。关键字筛选/过滤在实际应用中非常广泛,例如垃圾邮件过滤、拼写纠正、浏览器痕迹等等。我们模拟一个场景:输入一个文件...原创 2018-10-07 13:00:45 · 273 阅读 · 0 评论