摘要: JDK5中的一个亮点就是将Doug Lea的并发库引入到Java标准库中。Doug Lea确实是一个牛人,能教书,能出书,能编码,不过这在国外还是比较普遍的,而国内的教授们就相差太远了。一般的服务器都需要线程池,比如Web、FTP等服务器,不过它们一般都自己实现了线程池,比如以前介绍过的Tomcat、Resin和Jetty等,现在有了JDK5,我们就没有必要重复造车轮了,直接使用就可以,何况使用也很方便,性能也非常高。Java代码packageconcurrent;importjava.util.concurrent.ExecutorService;importjava.util.concur 阅读全文
posted @ 2013-03-21 18:50 盖文 阅读(795) 评论(0) 推荐(1) 编辑
摘要: B- 树和B+-树是重要的两个用于数据检索的数据结构,广泛用在文件系统、数据库和数据检索中。【重申】没有“B’减’树”这样的树,在之前的’-’ 是个横杠杠B- 树类似于二分查找树。但不同于二分查找树,B 树可以有多个孩子节点,这样树的深度就不会太深,其次B 树是平衡树,即所有叶子节点到根节点路径长度一样,所有非叶子节点的孩子节点都满足一定条件(不少于、不多于m,m 为阶数),这样查找一个节点就不会便利太深。对B 树有这样的限制:非叶子节点有至少个、至多m 个子节点根节点可以至少有两个节点所有叶子节点在同一层有k 个子节点的非根节点恰好包含k-1 个关键码(key)满足上面四个要求的树就是B 树 阅读全文
posted @ 2013-03-20 01:00 盖文 阅读(378) 评论(0) 推荐(0) 编辑
摘要: 二分图:是这样一个图,它的顶点可以分类两个集合X和Y,所有的边关联在两个顶点中,恰好一个属于集合X,另一个属于集合Y。最大匹配: 图中包含边数最多的匹配称为图的最大匹配。完美匹配: 如果所有点都在匹配边上,称这个最大匹配是完美匹配。最小覆盖: 最小覆盖要求用最少的点(X集合或Y集合的都行)让每条边都至少和其中一个点关联。可以证明:最少的点(即覆盖数)=最大匹配数最小路径覆盖:用尽量少的不相交简单路径覆盖有向无环图G的所有结点。解决此类问题可以建立一个二分图模型。把所有顶点i拆成两个:X结点集中的i和Y结点集中的i',如果有边i->j,则在二分图中引入边i->j',设 阅读全文
posted @ 2013-03-17 22:34 盖文 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 不重复的关键在于爬虫记住爬行的历史.只有记住过去才可能不重复。爬虫记录历史的方式是散列表(也称为”杂凑表,’).每一条记录是否被抓取的信息存放在散列表的某一个槽位上。如果某网页在过去的某个时刻已经被抓取,则将其对应的槽位的值置I;反之置0,而具体映射到哪一个槽位,则由散列函数决定。 I . MD5签名函数 在介绍散列表前,首先简单了解一下MD5签名函数。MD5签名是一个散列函数,可以将任意长度的数据流转换为一个固定长度的数字(通常为4个整型数,即128位)。这个数字称为.‘数据流的签名”或者‘·指纹”.并且数据流中的任意一个微小的变化都会导致签名值发生变化。 将URL字符串数字化是通 阅读全文
posted @ 2013-03-16 15:37 盖文 阅读(277) 评论(0) 推荐(0) 编辑
摘要: Bellman-Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题。对于给定的带权(有向或无向)图G=(V,E),其源点为s,加权函数w是边集E的映射。对图G运行Bellman-Ford算法的结果是一个布尔值,表明图中是否存在着一个从源点s可达的负权回路。若不存在这样的回路,算法将给出从源点s到图G的任意顶点v的最短路径d[v]。Bellman-Ford算法流程分为三个阶段:(1)初始化:将除源点外的所有顶点的最短距离估计值d[v]←+∞, d[s] ←0;(2)迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其最短距离;(运行| 阅读全文
posted @ 2013-03-15 20:00 盖文 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,因为太常用,所以要练到写时不用想,10-15 分钟内打完,甚至关掉显示器都可以把程序打出来.1.最短路(Floyd、Dijstra,BellmanFord)2. 最小生成树(先写个prim,kruscal要用并查集,不好写)3.大数(高精度)加减乘除4.二分查找. (代码可在五行以内)5.叉乘、判线段相交、然后写个凸包.6.BFS、DFS,同时熟练hash表(要熟,要灵活,代 码要简)7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式.8. 调用系统的qsort, 技巧很多,慢慢掌握.9. 任意进制间的转换 阅读全文
posted @ 2013-03-13 23:24 盖文 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 在介绍最小生成树算法(MST)之前,简单说一下平均链接算法(average-link)的实现过程,平均链接聚类算法和单链接类似,多了计算聚类之间距离矩阵的步骤 实现步骤如下: 1,将元素各成一组,把这些组放入容器H 2,循环元素距离数组,根据两层下标得到将要比较的两个元素A,B 3,在H中分别查找含有A,B的组AH,BH。假如AH不等于BH(也就是A,B不同组), AH和BH的距离累加A,B的距离。 4,得到组间距离数组后,循环比较组间距离与阀值,小于阀值,则此两组合并成一组,合并之前把H中的两个作为比较的原始组删除。 ... 阅读全文
posted @ 2013-03-13 22:43 盖文 阅读(1862) 评论(0) 推荐(0) 编辑
摘要: 简介:本系列的第一篇为读者概要介绍了推荐引擎,下面几篇文章将深入介绍推荐引擎的相关算法,并帮助读者高效的实现这些算法。 在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法。它以其方法模型简单,数据依赖性低,数据方便采集 , 推荐效果较优等多个优点成为大众眼里的推荐算法“No.1”。本文将带你深入了解协同过滤的秘密,并给出基于 Apache Mahout 的协同过滤算法的高效实现。Apache Mahout 是 ASF 的一个较新的开源项目,它源于 Lucene,构建在 Hadoop 之上,关注海量数据上的机器学习经典算法的高效实现。集体智慧和协同过滤什么是集体智慧集体 阅读全文
posted @ 2013-03-13 22:33 盖文 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 推荐中的协同过滤算法简单说明下:首先,通过分析用户的偏好行为,来挖掘出里面物品与物品、或人与人之间的关联。 其次,通过对这些关联的关系做一定的运算,得出人与物品间喜欢程度的猜测,即推荐值。 最后,将推荐值高的物品推送给特定的人,以完成一次推荐。 这里只是笼统的介绍下,方便下边的理解,IBM的一篇博客对其原理讲解得浅显易懂,同时也很详细《深入推荐引擎相关算法 - 协同过滤》,我这里就不细讲了。 协同过滤算法大致可分为两类,基于物品的与基于用户的;区分很简单,根据上面的逻辑,若你挖掘的关系是物品与物品间的,就是基于物品的协同过滤算法,若你挖掘的关系是用户与用户间的,就是基于用户的协同过滤算... 阅读全文
posted @ 2013-03-13 19:33 盖文 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 本文将介绍三种动态hash方法。 散列是一个非常有用的、非常基础的数据结构,在数据的查找方面尤其重要,应用的非常广泛。然而,任何事物都有两面性,散列也存在缺点,即数据的局部集中性会使散列的性能急剧下降,且越集中,性能越低。 数据集中,即搜索键在通过hash函数运算后,得到同一个结果,指向同一个桶,这时便产生了数据冲突。 通常解决数据冲突的方法有:拉链法(open hashing)和开地址法(open addressing)。拉链法我们用的非常多,即存在冲突时,简单的将元素链在当前桶的最后元素的尾部。开放地址法有线性探测再散列、二次线性探测再散列、再hash等方法。 以上介绍的解决冲突的方法,存 阅读全文
posted @ 2013-03-13 15:13 盖文 阅读(191) 评论(0) 推荐(0) 编辑