自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

清文的博客

编程渣,努力成为程序猿

  • 博客(31)
  • 收藏
  • 关注

原创 Java-正确使用equals和hashCode方法

基本摘抄自Java 中正确使用 hashCode 和 equals 方法 hashCode()和equals()定义在Object类中,这个类是所有java类的基类,所以所有的java类都继承这两个方法。1.equalsequals要遵守的通用约定(equals方法实现了等价关系): 1)自反性:x.equals(x)一定返回true 2)对称性:x.equals(y)返回true当且仅当y.

2016-01-27 14:09:43 5068

原创 数据结构实现之有序符号表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 565

原创 数据结构实现之有序符号表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 599

原创 数据结构实现之无序符号表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 1105

原创 数据结构实现之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 4028

原创 排序-Java系统库的排序算法

Java系统库中的主要排序方法java.util.Array.sort()。根据不同的参数类型,它实际代表了一系列排序方法: - 每种原始数据类型都有一个不同的排序方法; - 一个适用于所有实现了Comparable接口的数据类型的排序方法; - 一个适用于实现了比较器Comparator的数据类型的排序方法。Java的系统程序员选择对原始数据类型使用(三向切分的)快速排序,对引用类型使用归并

2016-01-24 19:59:07 2077

原创 数据结构实现之索引优先队列用例(多路归并)

下面的用例调用了IndexMinPQ的代码Multipway解决了多项归并问题:它将多个有序的输入流归并成一个有序的输出流。许多应用中都会遇到这个问题。输入可能来自于多种科学仪器的输出(按时间排序),或是来自多个音乐或电影网站的信息列表(按名称或艺术家名字排序),或商家交易(按账号或时间排序),或者其他。 如果有足够的空间,你可以把它们简单地读入一个数组排序,但如果使用了优先队列,无论输入有多长你

2016-01-24 17:36:46 1499

原创 数据结构实现之最大索引优先队列

具体索引优先队列的说明见数据结构实现之最小优先队列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 645

原创 数据结构实现之最小索引优先队列

在很多应用中,允许用例引用进入优先队列中的元素是有必要的。做到这一点的一种简单方式是给每个元素一个索引。 另外,一种常见的情况是用例已经有了总量为N的多个元素,而且可能还同时使用了多个(平行)数组来存储这些元素的信息。此时,其他无关的用例代码可能已经在使用一个整数索引来引用这些无关元素了。这些考虑引导我们设计了如下所示的API。 public class IndexMinPQ> 说明

2016-01-24 17:23:59 2721

原创 数据结构实现之最大优先队列(最大堆)

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 599

原创 数据结构实现之最小优先队列(最小堆)

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 803

原创 数据结构实现之并查集(使用按秩合并和路径压缩)

并查集可解决动态连通性问题网络,判断网络中的两个结点是否相同,连接两个结点,社交网络中的人与人之间是否存在关系变量名等价性,编程语言中一个对象可以有多个引用,如何判断两个给定的变量名是否等价(即是否引用一个对象)把所有输入整数看成不同的集合,如何判断两个整数属于同一个集合,并如果归并两个集合package xwq.dt;import xwq.util.StdIn;import xwq.ut

2016-01-23 00:35:30 759

原创 排序-归并排序-优化(插入排序+复制采用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 347

原创 排序-归并排序-基本

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 213

原创 排序-快速排序-最终优化(插入排序、中位数、三向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 462 1

原创 排序-快速排序-优化-使用三向切分(优化重复元素的情况

package xwq.sort;import xwq.util.In;import xwq.util.StdOut;/** * 使用三向切分优化快速排序 适用于待排序数组中存在许多重复元素的使用场景 1个方向用于记录比基准值小的元素 1个方向用于记录与基准值相同的元素 * 1个方向用于记录比基准值大的元素 与普通快速排序主要区别在partition的划分 * */public clas

2016-01-22 09:16:45 1176

原创 排序-快速排序-优化-基准值选择待排序数组的三个等距取样的中位数

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 1068

原创 排序-快速排序-优化-使用插入排序

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 568

原创 排序-快速排序-基本-随机化快速排序

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 409

原创 排序-基本排序-选择排序,插入排序,冒泡排序

选择排序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 211

原创 数据结构实现之队列

队列的定义 先进先出的数据结构队列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 228

原创 数据结构实现之栈

栈的定义 先进后出的数据结构栈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 235

原创 数据结构实现之Bag背包

背包的定义 背包主要是用来盛饭元素的容器,只支持添加操作,不支持删除操作。 背包的主要作用为统计元素的性质以及遍历元素。背包API Bag() 创建一个空背包 void add (Item item) 添加一个元素 boolean isEmpty() 背包是否为空 int size() 背包的容量 背包的实现package xwq.dt;import java.util.Ite

2016-01-19 23:28:53 2768 2

转载 算法导论-最短路径-Dijkstra算法+Bellman-Ford 算法

《算法导论》读书笔记之图论算法—Dijkstra 算法求最短路径 Bellman-Ford 算法及其优化

2016-01-16 21:32:48 497

原创 算法导论-堆排序+优先队列

定义二叉堆是一个数组,可以被看做一个近似的完全二叉树。 性质:含有n个元素的堆的高度是lgn。在最大堆中,最大元素该子树的根上;在最小堆中,最小元素在该子树的根上。建堆,向下调整堆,向上调整堆建堆 可以使用自底向上的方法利用过程maxHeapify(向下调整堆)把数组A[1-n]转换为堆。 伪代码 向下调整堆maxHeapify 伪代码 算法描述 3.向上调整堆 代

2016-01-16 16:25:12 311

原创 MIT算法导论-第12讲-最小生成树-Kruskal算法+并查集

基本思想Kruskal算法构造最小生成树的过程为:先构造一个只含 n 个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点,则它是一个含有 n 棵树的一个森林。之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,也就是说,将这两个顶点分别所在的两棵树合成一棵树;反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条权值最小的边再试

2016-01-15 22:56:26 373

原创 MIT算法导论-第12讲-最小生成树-Prim算法

问题定义输入:无向图G=(V,E),每条边有一个权重,另假设所有权值是不同的输出:一棵生成树,连接了所有顶点,权重总和最小。分析过程(http://www.cnblogs.com/numbersix/p/4909750.html)MST拥有最优子结构:去掉MST的一条边,MST分裂成两个子树T1、T2,则T1、T2分别是子图G1、G2的MST。子图G1只包含T1的顶点, 子图G2只包含T2的顶点,

2016-01-15 22:02:49 1783

原创 2016研一下学期规划

研一下就3门课程,时间很富足,自己多加加油,利用好这些时间,执行好这些规划。规划主要参考来自于小米内部培养之:服务端工程师入门与进阶 Java 版。一、准备实习面试1.剑指Offer未完成部分刷完。2.复习Java虚拟机,并发编程,算法。3.Java集合框架源码分析。二、技能篇1.代码质量,《Clean Code》和《重构》。2.熟悉 Linux 开发环境。Linu

2016-01-12 16:52:37 593

原创 MIT算法导论-第10讲-2-3树、红黑树

(本讲内容属于算法第四版,未参照算法导论上的内容)。平衡查找树之二三树(http://blog.csdn.net/caipeichao2/article/details/30089151)平衡查找树的目标是实现查找、插入、删除操作在最坏情况下的复杂度均为logN。本节将介绍二三查找树。二三树中有两种节点:二节点对应一个键,有两个子节点

2016-01-09 10:36:53 545

原创 MIT算法导论-第9讲-二叉查找树

一、二叉查找树1.定义对一颗二叉查找树的任何节点,该节点的左子树中的任何一个节点的值都小于等于该节点的值,该节点的右子树中的任何一个节点的值都大于等于该节点的值。2.删除结点叶子节点直接删除,非叶子节点选择左最大、右最小替换该节点(即左子树最小的节点或右子树最大的节点)。3.查找、插入、删除节点的时间复杂度最坏时间复杂度O(n):无左子树/无右子树一般时间复杂度O(lg

2016-01-07 20:43:46 820

转载 MIT算法导论-第13讲-平摊分析

总结:平摊分析是一种用来分析执行一系列类似操作的算法的工具,它对整个操作序列的真实代价限界。本章介绍了平摊分析的三种方法,分别是聚集分析、记账方法、势能方法。每种方法都通过分析栈操作和二进制计数器增1来举例分析。最后,本章用平摊分析的方法分析了表动态扩张和收缩的代价限界。 1.    聚集分析证明对所有的n,有n个操作所构成的序列的总时间在最坏情况下为T(n)。因此,每个操作的平均代价

2016-01-07 11:08:57 690

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除