自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

arui的专栏

记录学习过程中的点滴

  • 博客(38)
  • 资源 (1)
  • 收藏
  • 关注

原创 《Java核心技术》复习笔记 - 第十一章 异常

《Java核心技术》复习笔记 - 第十一章 异常Java中的异常层次结构如下: Error类层次结构描述了java运行时系统内部错误和资源耗尽错误。应用程序不应该抛出这样类型的错误。如果出现了这样的内部错误,除了通告给用户,并尽力使程序安全的终止之外,再也无能为力了。这种情况很少出现。设计程序时,主要关注Exception层次结构。由程序错误导致的异常属于RuntimeExce

2014-03-04 20:02:05 860

原创 《Java核心技术》复习笔记 - 第十四章 多线程

待写

2014-03-03 20:22:08 794

原创 《Java核心技术》复习笔记 - 第十三章 集合

待写

2014-03-03 20:21:39 836

原创 《Java核心技术》复习笔记 - 第六章 接口与内部类

待写

2014-03-03 20:20:47 1012

原创 《Java核心技术》复习笔记 - 第五章 继承

待写

2014-03-03 20:20:05 890

原创 《Java核心技术》复习笔记 - 第四章 对象与类

待写

2014-03-03 20:18:56 944

原创 《Java核心技术》复习笔记 - 第三章 Java基本的程序设计结构

Charpter3  Java基本的程序设计结构1. 源代码的文件名必须与共有类的名字相同,并用.java作为扩展名。2. Java是一种强类型语言,java中一共有八种基本类型(primitive type),4种整形(byte,short,int,long),2种浮点型(float,double),1种用于表示Unicode编码的字符单元的字符类型char和用于表示真值的boolean类型。四

2014-03-03 20:08:15 1043

原创 《Java核心技术》复习笔记 - 前言

好久没碰java了,决定把《java核心技术》拿出来翻翻,但是为了以后复习不用再从头看那两本厚书了,于是决定把书中一些自己觉得重要的东西记录下来,以便快速查阅。参考资料:Java核心技术两卷(原书第8版)

2014-03-03 20:06:42 686

原创 子数组和最大值,以及不相交子数组其和之差的最大值问题

最大子数组和问题,这个大家都知道,求一个数组中和最大的连续子数组,编程珠玑上有讲过例如 1 2 3 4 -> 10 -1 -2 -3 -4 -> -1-1 2 3 -2 -> 5-2 3-1 4 -1 ->6有复杂度为O(n^3),O(n^2), O(nlgn)的代码,也有复杂度为O(n)的动态规划代码#include #include #define N 10

2014-03-02 21:39:25 1696

原创 0-1背包问题的动态规划求解

思路:设value_get[i][j]为把前i个物品装入容量为j的背包所能获得的最大价值需考虑能否装入物品i,以及是否装入物品i,递归式为:value_get[i][j]  = max{ value_get[i-1][j], value_get[i-1][ j-weight[i] ] + value[i] } c语言代码如下:/*********************

2014-02-26 15:18:56 692

原创 Latent Semantic Analysis

AbstractLSA,Latent Semantic Analysis通过对词-文档共现矩阵(term-document co-occurrence matrix)进行SVD分解,把单词和文档映射到一个latent semantic space,通过clustering可以得到term-term, document-document, document-term之间的相似关系。对于新来的查询

2013-08-14 20:37:46 1197

原创 利用Hadoop平台进行大规模(百万以上)中文网页聚类

这是我本学期课程《高级数据库》的一个作业,目的是让熟悉一下Hadoop平台,发出来希望对需要的人有点帮助。一、题目要求大规模(百万以上)中文网页聚类分布式计算平台:Hadoop数据输入:未经处理的原始网页数据输出:对每一个网页进行聚类标注输入数据说明:每一行为一个网页。Key (LongWritable) 每一个网页的全局ID号Value (Text) 网页内容

2013-01-27 21:22:03 3938 21

原创 希尔排序(Shell Sort)

维基百科:http://zh.wikipedia.org/wiki/希尔排序希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位步长的选择是希尔排序的重要部分。只要

2012-09-26 21:54:43 778

原创 堆排序(Heap Sort)

维基百科:http://zh.wikipedia.org/wiki/堆排序1、基本知识二叉堆一般用数组来表示,我们可以把它视为一颗完全二叉树。数据结构中学习树这一章节时,我们知道完全二叉树可以用数组来存储。堆的定义:(1)大根堆:父节点的值大于等于孩子结点的值(2)小根堆:父节点的值小于等于孩子结点的值父节点和孩子结点下标的计算(1)假设用数组A[1..n]来存储完

2012-09-26 20:44:06 602

原创 冒泡排序(Bubble Sort)

维基百科:http://zh.wikipedia.org/wiki/冒泡排序算法思想:不断的交换相邻的两个反序元素,使最小元素“上浮”或使最大元素“下沉”;每一趟“冒泡”都会确定一个最大的元素或最小的元素,同选择排序类似,算法总共只需进行n-1趟。将一个数组竖着放,低地址在上面,高地址在下面,所谓“上浮”就是较小的元素不断向低地址靠近,所谓“下沉”就是较大的元素不断向高地址靠近,这

2012-09-22 14:18:38 616

原创 插入排序(Insertion Sort)

维基百科:http://zh.wikipedia.org/wiki/插入排序算法思想:若数组A[n]的前n-1个数已经有序,我们只需把第n个元素插入到适当的位置即可。易分析得算法的时间复杂度为Ο(n^2)具体描述:从第一个元素开始,该元素可以认为已经被排序取出下一个元素,在已经排序的元素序列中从后向前扫描如果该元素(已排序)大于新元素,将该元素移到下一位置重复步骤3,直到找到已

2012-09-22 12:24:52 814

原创 选择排序(Selection Sort)

维基百科:http://zh.wikipedia.org/wiki/选择排序算法思想:给定一个待排序的数组A[1..n],以升序为例,我们先找出其中最小的元素,和A[1]交换;然后找出次小的元素和A[2]交换,依次进行下去,直到找到第n-1小的元素,置于A[n-1]处,最后一个元素必然是最大的,因而循环只用执行n-1次。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上

2012-09-22 11:50:01 493

原创 二分查找(Binary Search)

一、顺序查找(linear search)问题描述:在一个给定的序列A[]中查找指定元素v,若查找成功则返回元素在数组中的下标,否则返回-1。C++实现://简单线性查找 int linearSearch(int *a, int n, int key){ for(int i=0; i<n; i++) { if(a[i] == key)

2012-09-22 11:18:01 1021

原创 快速排序(Quick Sort)

维基百科:http://zh.wikipedia.org/wiki/快速排序算法思想:快速排序也是分治法的一个应用,在一个给定的序列中,选取一个主元pivot,通过“分区操作”partition把一个序列分成两个子序列,一个子序列的所有元素小于等于主元,另一个子序列中的所有元素大于等于主元,然后递归的对两个子序列进行快速排序。快速排序最主要的部分就是partitiion函数,由于parti

2012-09-19 17:15:15 754

原创 归并排序(Merge Sort)

归并排序维基百科:http://zh.wikipedia.org/wiki/归并排序归并排序(Merge Sort,又称合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。1、递归算法算法思想:

2012-09-17 19:41:31 692

原创 各种排序算法总结

一、常见的排序算法1、插入排序:http://blog.csdn.net/sysu_arui/article/details/80069622、冒泡排序:http://blog.csdn.net/sysu_arui/article/details/80071903、选择排序:http://blog.csdn.net/sysu_arui/article/details/8006909

2012-09-17 16:33:04 341

原创 图的广度优先搜索(Breadth First Search)

基本思想:首先访问初始点v,之后依次访问v的各个未成访问过的邻接点,然后分别从这些邻接点出发依次访问他们的邻接点,直至图中所有已被访问的顶点的邻接点都被访问到。图的广度优先遍历类似于树的按层次遍历的过程,要用到数据结构队列,下面直接给出实现代码。#include #include #include #include "graph.h"templatevoid BFS(c

2012-09-14 18:42:28 715

原创 图的深度优先搜索(Depth First Search)

算法思想:访问给定的起始点v,从v出发,访问它的一个不曾被访问过的邻接顶点w1;再从w1出发,访问w1的一个不曾被访问过的邻接顶点w2;…,如此下去,直至到达了一个顶点,它没有未访问的邻接顶点为止。退回一步到上一个被访问的顶点,看它是否还有未被访问的邻接顶点。若有,则访问该邻接顶点,且从它出发,进行前述的类似访问。若没有,则再退回一步进行搜索。当所有顶点均被访问,则过程终止。注意我们下面给

2012-09-13 19:18:44 5337

原创 图的邻接表实现

前面给出了图的邻接矩阵的实现,现在给出图的邻接表的实现。这里仍然采用vector来存储顶点表,顶点的插入比较简单,顶点和边的删除以及边的插入,实质上就是一系列的简单链表操作,下面直接给出代码,代码中有详细的注释。代码以有向带权图为例,对于无向图,非权图,代码只需作简单修改。1、Graph的实现#ifndef _GRAPH_H_#define _GRAPH_H_#include#

2012-09-13 18:59:47 1313

原创 图的邻接矩阵表示

一、基本概念1、图的定义图G由两个集合顶点集V和边集E组成,记为G = (V , E)2、邻接矩阵(1)表示顶点之间相邻关系的矩阵叫邻接矩阵。具有n个顶点的图G=(V,E)是具有下列性质的n阶方阵:A[i][j]=1,若(vi,vj)或是E(G)中的边;A[i][j]=0,若(vi,vj)或不是E(G)中的边;(2)若G是网络,则邻接矩阵可定义为:A[i][j]=w

2012-09-06 10:34:19 1553

原创 红黑树(Red BlackTree)的实现

前面我们讲解了简单二叉查找树、AVL树,伸展树,对于一棵高度为h的二叉查找树,其动态集合操作Search、Minimum、Maximum、Successor、Predecessor、Insert、Delete的运行时间为θ(h),树的高度决定了在树上操作的成本。一些常见的搜索树的高度:平衡二叉搜索树:O(lgn)1962年提出的AVL树:1972年提出的红黑树:      红黑

2012-09-04 12:41:07 2586

原创 伸展树(splay tree)实现

前面讲解了平衡二叉查找树,注意到一个结点被访问后,接下来很有可能被再次访问,所以可以采取把最近访问的结点上移(比如说移动到根结点),方便以下访问。这次要讲解的伸展树就是来解决该问题的。伸展树又称自适应查找树,它的各种操作平均复杂度为O(lgn),其复杂度边界是均摊的。虽然某次操作可能需要代价O(n),但是连续M次操作的代价为O(M*lgn)。伸展树的最核心的操作就是伸展,插入、删除、查找都

2012-08-31 11:08:27 722

原创 平衡二叉树(AVL)的另一种C++实现

平衡二叉树(AVL)的插入和删除详解(上):http://blog.csdn.net/sysu_arui/article/details/7897017平衡二叉树(AVL)的插入和删除详解(下):http://blog.csdn.net/sysu_arui/article/details/7906303前面详细介绍了平衡二叉树的插入和删除的实现,前面实现中结点使用的是一个值为-1、0、1的

2012-08-29 18:51:02 2491

原创 平衡二叉树(AVL)的插入和删除详解(下)

平衡二叉树(AVL)的插入和删除详解(上):http://blog.csdn.net/sysu_arui/article/details/78970171、测试代码为减小篇幅,只给出了主程序,其他函数模块请看(上)中的描述。#include #include #include using namespace std;int main(int argc, char *ar

2012-08-25 10:20:04 4580 1

原创 平衡二叉树(AVL)的插入和删除详解(上)

AVL树维基百科:http://zh.wikipedia.org/wiki/AVL树在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M

2012-08-22 19:02:16 21492 9

原创 二叉查找树的C++实现

二叉查找树的插入和删除详解请看:http://blog.csdn.net/sysu_arui/article/details/7865864前面详细讲解了二叉查找树插入和删除,现在给出完整的C++实现,代码如下:#include #include using namespace std;template class BinarySearchTree{ public: B

2012-08-21 18:11:43 2928

原创 二叉树的基本操作

二叉树作为一种非常重要的数据结构,今天对其做简单的回顾1、二叉树的定义typedef char ElementType;typedef struct BiTreeNode{ ElementType data; struct BiTreeNode* lchild; struct BiTreeNode* rchild;}BiTreeNode, *BiTree;2、

2012-08-14 17:22:00 29389 3

原创 二叉树的非递归遍历及层次遍历

二叉树的基本操作请看:http://blog.csdn.net/sysu_arui/article/details/7865876前面简答介绍了二叉树的基本操作,包括二叉树的建立,销毁,递归遍历,以及其他一些常见的递归算法,现在集中讨论一下二叉树的层次遍历和非递归遍历。二叉树的层次遍历要用到队列,前序、中序和后序非递归遍历要用到栈,这里我就不自己写队列和栈了,直接使用C++标准库中的容器适

2012-08-14 17:10:50 16886 2

原创 二叉查找树的插入和删除详解

二叉查找树是如下定义的:(1)  左子树不空,则左子树上的所有结点的值均小于根结点的值(2)  右子树不空,则右子树上的所有结点的值均大于根结点的值二叉查找树可以为空,二叉查找树是递归定义的,也就是说其左右子树也为二叉查找树。二叉查找树是一种动态查找表,可以进行动态地插入和删除。前面的定义中我们假定二叉查找树不含有相同元素。由定义可知二叉查找树的中序序列为一个递增序列常见的

2012-08-14 17:09:20 19381 3

原创 KMP算法

在朴素字符串匹配算法中,当匹配失败时,位移加一,也就是模式向后滑动一位,效率较低。我们能否在匹配失败时,利用已有的匹配信息(如当前文本的匹配位置,模式已经匹配的长度等)将模式向后滑动尽可能远的距离呢?受有限自动机字符串匹配算法启示,利用前缀后缀原理,假设当前字符匹配长度为q(P[1..q]),在匹配P[q+1]时失败了,这时只要找到一个满足Pk为Pq的真后缀的最大k值,我们就可以把模式向后滑动

2012-08-10 17:44:00 727

原创 利用有限自动机进行字符串匹配

原理我简单说两句,详细原理大家请参考《算法导论》第32章P563-P567,至于自动机原理,请参考其他编译原理书籍。说明:Pk=P[1..k],表示模式P的前缀,也就是其前k个字符。k=0时,P0表示空串,空串为任何串(包括空串)的前缀和后缀。初始状态下q=0,Pq=ε(空串,也就是匹配长度为0),这时给定字母表中的一个输入,状态就可能发生转换,比如说给定模式P的第一个字符,就会转移到状态

2012-08-10 17:24:42 4130 2

原创 Rabin-Karp算法 (拉宾-卡普)

Rabin-karp算法是朴素字符串匹配算法的一个特例。当字母表∑为d进制数时,即∑={0,1,2,…d-1}。如当d=10时字母表中的每个字符都是一个十进制数。我们在比较两个长度为m的子串时,可以把这两个子串当作整数进行比较,而不用逐个字符比较,从而在某种程度上减少算法时间。把一个由d进制数字组成的字符串转换成相应的十进制整数,这是大家曾经都写过的东西,一个可能的简单实现如下:int

2012-08-10 17:11:08 4911

原创 朴素的字符串匹配算法

一个字符串是一个定义在有限字母表∑上的字符序列。例如,ABCDABC是字母表∑ = {A,BC,D}上的一个字符串。字符串匹配问题就是在一个大的字符串T中搜索某个字符串P的所有出现位置。其中,T称为文本(或称主串,模式串),P称为模式(或称子串),T和P都定义在同一个字母表∑上。设文本为长度为n,用字符数组T[1..n]表示,模式串长度为m,m,用字符数组P[1..m] 表示。如果T[s+

2012-08-10 16:57:51 1316

hadoop kmeans中文网页聚类 实验文档

利用Hadoop平台进行大规模(百万以上)中文网页聚类的实验文档,里面有总体设计思路和源代码的一些说明

2013-01-27

空空如也

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

TA关注的人

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