算法第四版
清文
低调前行
展开
-
数据结构实现之Bag背包
背包的定义 背包主要是用来盛饭元素的容器,只支持添加操作,不支持删除操作。 背包的主要作用为统计元素的性质以及遍历元素。背包API Bag() 创建一个空背包 void add (Item item) 添加一个元素 boolean isEmpty() 背包是否为空 int size() 背包的容量 背包的实现package xwq.dt;import java.util.Ite原创 2016-01-19 23:28:53 · 2813 阅读 · 2 评论 -
数据结构实现之最小索引优先队列
在很多应用中,允许用例引用进入优先队列中的元素是有必要的。做到这一点的一种简单方式是给每个元素一个索引。 另外,一种常见的情况是用例已经有了总量为N的多个元素,而且可能还同时使用了多个(平行)数组来存储这些元素的信息。此时,其他无关的用例代码可能已经在使用一个整数索引来引用这些无关元素了。这些考虑引导我们设计了如下所示的API。 public class IndexMinPQ> 说明原创 2016-01-24 17:23:59 · 2779 阅读 · 0 评论 -
数据结构实现之索引优先队列用例(多路归并)
下面的用例调用了IndexMinPQ的代码Multipway解决了多项归并问题:它将多个有序的输入流归并成一个有序的输出流。许多应用中都会遇到这个问题。输入可能来自于多种科学仪器的输出(按时间排序),或是来自多个音乐或电影网站的信息列表(按名称或艺术家名字排序),或商家交易(按账号或时间排序),或者其他。 如果有足够的空间,你可以把它们简单地读入一个数组排序,但如果使用了优先队列,无论输入有多长你原创 2016-01-24 17:36:46 · 1557 阅读 · 0 评论 -
排序-Java系统库的排序算法
Java系统库中的主要排序方法java.util.Array.sort()。根据不同的参数类型,它实际代表了一系列排序方法: - 每种原始数据类型都有一个不同的排序方法; - 一个适用于所有实现了Comparable接口的数据类型的排序方法; - 一个适用于实现了比较器Comparator的数据类型的排序方法。Java的系统程序员选择对原始数据类型使用(三向切分的)快速排序,对引用类型使用归并原创 2016-01-24 19:59:07 · 2097 阅读 · 0 评论 -
数据结构实现之无序符号表SequentialSearchST(使用链表实现)
API 方法 说明 运行时间增长数量级 void put(Key key,Value val) 将键值对存入表中(若值为空则将键key从表中删除) N Value get(Key key) 获取键key对应的值(若键key不存在则返回null) N void delete(Key key) 从表中删去键key(及其对应的值) N boolean co原创 2016-01-25 22:05:52 · 1114 阅读 · 0 评论 -
数据结构实现之有序符号表BinarySearchST(使用有序数组的二分查找)
API 方法 说明 运行时间增长数量级 void put(Key key,Value val) 将键值对存入表中(若值为空则将键key从表中删除) N Value get(Key key) 获取键key对应的值(若键key不存在则返回null) logN void delete(Key key) 从表中删去键key(及其对应的值) N boolean原创 2016-01-25 22:23:33 · 610 阅读 · 0 评论 -
数据结构实现之有序符号表BST二叉查找树
API 方法 说明 运行时间增长数量级 void put(Key key,Value val) 将键值对存入表中(若值为空则将键key从表中删除) logN,最坏N Value get(Key key) 获取键key对应的值(若键key不存在则返回null) logN,最坏N void delete(Key key) 从表中删去键key(及其对应的值)原创 2016-01-27 11:12:46 · 573 阅读 · 0 评论 -
数据结构实现之Splay伸展树
Splay Tree 是二叉查找树的一种,它与平衡二叉树、红黑树不同的是,Splay Tree从不强制地保持自身的平衡,每当查找到某个节点n的时候,在返回节点n的同时,Splay Tree会将节点n旋转到树根的位置,这样就使得Splay Tree天生有着一种类似缓存的能力,因为每次被查找到的节点都会被搬到树根的位置,所以当80%的情况下我们需要查找的元素都是某个固定的节点,或者是一原创 2016-02-03 23:27:13 · 1482 阅读 · 0 评论 -
数据结构实现之Table(符号表,内部存储key-value对)
符号表主要应用于查找。无序符号表API public class ST 无序符号表API ST() 创建一张符号表 void put(Key key,Value val) 将键值对存入表中(若值为空则将键key从表中删除) Value get(Key key) 获取键key对应的值(若键key不存在则返回null) void delete(Key key) 从表原创 2016-01-25 21:44:45 · 4062 阅读 · 0 评论 -
数据结构之哈希表
具体介绍见MIT算法导论-第7,8讲-哈希表Java 集合之 HashMap详细介绍(源码解析)和使用示例HashMap详细介绍(源码解析)和使用示例下面给出两种实现1.基于拉链法的散列表package xwq.dt;import xwq.util.StdIn;import xwq.util.StdOut;public class SeparateChainingHashST<Key,Value>原创 2016-02-10 23:38:45 · 707 阅读 · 0 评论 -
数据结构之红黑树与平衡二叉树
红黑树Java 集合系列之 TreeMap详细介绍(源码解析)和使用示例 代码来自算法第四版 红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。 红黑树实际上是由2-3-4树转换而来,红黑树能够以O(log2 n) 的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据原创 2016-02-05 00:27:58 · 709 阅读 · 0 评论 -
数据结构之B树B+树
结构之法 算法之道-从B 树、B+ 树、B* 树谈到R 树 作者:July、weedge、Frankie。编程艺术室出品。 说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成。MySQL索引背后的数据结构及算法原理 本文以MySQL数据库为研究对象,讨论与数据库索引原创 2016-02-03 23:37:44 · 579 阅读 · 0 评论 -
数据结构之AVL树
文字介绍和图片来自http://www.cnblogs.com/skywang12345/p/3577479.html1.AVL介绍AVL树是高度平衡的而二叉树。它的特点是:AVL树中任何节点的两个子树的高度最大差别为1。 2.AVL的实现2.1 结点定义//结点定义 private class AVLNode { Key key; Value val;原创 2016-02-04 16:01:41 · 778 阅读 · 1 评论 -
数据结构实现之最大索引优先队列
具体索引优先队列的说明见数据结构实现之最小优先队列package xwq.dt;import java.util.Iterator;import java.util.NoSuchElementException;import xwq.util.StdOut;import xwq.util.StdRandom;/** * 使用二叉堆实现的索引最大优先队列 * class IndexMaxPQ是原创 2016-01-24 17:25:37 · 656 阅读 · 0 评论 -
数据结构实现之最小优先队列(最小堆)
package xwq.dt;import java.util.Comparator;import java.util.Iterator;import java.util.NoSuchElementException;import xwq.util.StdIn;import xwq.util.StdOut;/** ***************************************原创 2016-01-23 00:38:36 · 822 阅读 · 0 评论 -
数据结构实现之栈
栈的定义 先进后出的数据结构栈API stack();构造函数 int size();栈容量 boolean isEmpty();栈是否为空 void push(Item item);入栈 Item pop(); 出栈 Item peek(); 获取栈顶元素栈的实现 使用单链表实现,并支持迭代查询package xwq.dt;import java.util.Iterator;原创 2016-01-21 00:29:40 · 251 阅读 · 0 评论 -
数据结构实现之队列
队列的定义 先进先出的数据结构队列API queue();构造函数 int size();队列容量 boolean isEmpty();队列是否为空 void enqueue(Item item);入队 Item dequeue(); 出队 Item peek(); 获取队头元素队列的实现 使用单链表实现,并支持迭代查询package xwq.dt;import java原创 2016-01-21 00:33:08 · 239 阅读 · 0 评论 -
排序-基本排序-选择排序,插入排序,冒泡排序
选择排序package xwq.sort;import xwq.util.In;import xwq.util.StdOut;public class SelectSort { public static void sort(int a[]) { for (int i = 0; i < a.length - 1; i++) { int pos = i原创 2016-01-22 09:00:38 · 221 阅读 · 0 评论 -
排序-快速排序-优化-使用插入排序
package xwq.sort;import xwq.util.In;import xwq.util.StdOut;import xwq.util.StdRandom;/** * 使用插入排序对快速排序进行优化 * 大数组使用快速排序递归切分,小数组使用插入排序 * @author batman * */public class QuickSortInsert { //M的最原创 2016-01-22 09:08:54 · 587 阅读 · 0 评论 -
排序-快速排序-优化-使用三向切分(优化重复元素的情况
package xwq.sort;import xwq.util.In;import xwq.util.StdOut;/** * 使用三向切分优化快速排序 适用于待排序数组中存在许多重复元素的使用场景 1个方向用于记录比基准值小的元素 1个方向用于记录与基准值相同的元素 * 1个方向用于记录比基准值大的元素 与普通快速排序主要区别在partition的划分 * */public clas原创 2016-01-22 09:16:45 · 1186 阅读 · 0 评论 -
排序-快速排序-优化-基准值选择待排序数组的三个等距取样的中位数
package xwq.sort;import xwq.util.In;import xwq.util.StdOut;/** * 使用三取样partition优化QuickSort */public class QuickSortMid { public static void sort(int a[]) { partition(a,0,a.length-1);原创 2016-01-22 09:12:21 · 1119 阅读 · 0 评论 -
排序-快速排序-基本-随机化快速排序
package xwq.sort;import xwq.util.In;import xwq.util.StdOut;import xwq.util.StdRandom;/** * 快速排序 * 基本版本,随机化快速排序 * Compilation: javac QuickSort.java * Execution: java QuickSort input.txt *原创 2016-01-22 09:04:47 · 424 阅读 · 0 评论 -
排序-归并排序-基本
package xwq.sort;import xwq.util.StdIn;import xwq.util.StdOut;public class MergeSort { public static void sort(Comparable a[]) { Comparable[] acopy = new Comparable[a.length]; sort(原创 2016-01-22 11:23:11 · 224 阅读 · 0 评论 -
排序-归并排序-优化(插入排序+复制采用System.arraycopy)
package xwq.sort;import xwq.util.StdIn;import xwq.util.StdOut;/** * 优化后的归并排序 * 使用插入排序优化 * copy操作由原来的循环复制改为使用 * java API:System.arraycopy(Object src,int srcPos,Object dest,int destPos,int length)原创 2016-01-22 11:24:51 · 360 阅读 · 0 评论 -
排序-快速排序-最终优化(插入排序、中位数、三向partition)-以后快排就用这个了
package xwq.sort;import xwq.util.In;import xwq.util.StdOut;/** * 使用 * 1、插入排序 * 2、三取样获取基准值 * 3、三向切分 三项 * 优化快速排序 * @author batman * */public class QuickSortOptimal { //插入排序数组大小,M的最佳值是和系统相关的原创 2016-01-22 09:19:01 · 470 阅读 · 1 评论 -
数据结构实现之并查集(使用按秩合并和路径压缩)
并查集可解决动态连通性问题网络,判断网络中的两个结点是否相同,连接两个结点,社交网络中的人与人之间是否存在关系变量名等价性,编程语言中一个对象可以有多个引用,如何判断两个给定的变量名是否等价(即是否引用一个对象)把所有输入整数看成不同的集合,如何判断两个整数属于同一个集合,并如果归并两个集合package xwq.dt;import xwq.util.StdIn;import xwq.ut原创 2016-01-23 00:35:30 · 770 阅读 · 0 评论 -
数据结构实现之最大优先队列(最大堆)
package xwq.dt;import java.util.Comparator;import java.util.Iterator;import java.util.NoSuchElementException;import xwq.util.StdIn;import xwq.util.StdOut;/** **************************************原创 2016-01-23 00:40:44 · 610 阅读 · 0 评论 -
一致性Hash
理解一致性哈希算法(consistent hashing)关于TreeMap和一致性hash原创 2016-02-23 20:35:08 · 305 阅读 · 0 评论