算法
文章平均质量分 73
jimmee
这个作者很懒,什么都没留下…
展开
-
排序算法(一)
一般来说,排序算法有10种,今天先说4种,并给出基本的代码。如有错误,欢迎大家指正。如果大家比较忙,忙着去泡妞的话,可以直接跳到最后看我的小结部分。为了便于后面的讨论和理解,这里先做一个约定,就是把你要排序的元素假想为大小不一的一些球,这些球都放在一个容器里。排序的过程是把这些球拿出来按照一个指定的顺序的摆放(这里指定的顺序我们先定为升序,倒序是一回事)。同时预先定义两个方法,假定我们要比...2009-11-03 10:46:17 · 108 阅读 · 0 评论 -
字符串相似算法-(2) Levenshtein distance
编辑距离概念描述: 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitten一字转成sitting:sitten (k→s)sittin (e→i)sitting (→g)俄罗斯科学家Vladimir Levenshtein在196...2014-06-08 16:32:54 · 205 阅读 · 0 评论 -
字符串相似算法-(3) NGram Distance
就是N-Gram version of edit distance public float getDistance(String source, String target) { final int sl = source.length(); final int tl = target.length(); if (sl == 0 || tl ...2014-06-08 17:54:45 · 1010 阅读 · 0 评论 -
lucene的拼写检查的实现原理
1. 建索引时, 使用ngram的方式创建索引 SpellChecker的indexDictionary方法 private static void addGram(String text, Document doc, int ng1, int ng2) { int len = text.length(); for (int ng = ng1; ng &l...2014-06-08 18:19:32 · 203 阅读 · 0 评论 -
mapreduce的一些算法设计,优化等(1)
本系列是根据书籍《Data-Intensive Text Processing with MapReduce.pdf》和工作中的一些mapreduce使用做的笔记:本篇针对《Data-Intensive Text Processing with MapReduce》第三章: 1. local aggregation(局部合并) IN-MAPPER COMBINING,也就是...原创 2014-01-27 17:15:56 · 317 阅读 · 0 评论 -
mapreduce的一些算法设计,优化等(2)
1. 反序(order inversion)模式 通过反序模式,我们可以控制中间结果进入reducer的顺序,从而在reducer中先计算出一些结果(根据先进入reducer的中间结果计算出),而这些结果对于高效处理后续的数据很有意义。要使用反序模式,需要先将算法中的操作序问题转化为一般排序问题。 以共现矩阵为例,要计算相对频率问题。 (1)strip...原创 2014-01-28 15:50:34 · 150 阅读 · 0 评论 -
lucene索引创建的理解思路
虽然lucene4很早就出来,但是这里仍然以lucene3.0为基础,理解lucene索引创建的思路: 1. 要记录正向信息 field的数据,fdx,fdt,依次写每个field的即可 词向量,tvx,tvd,tvf tvf是真正存储的地方,tvx是每个文档一项,具体包含第一个field的位置,其他field只要记录与覅一个field的偏移量即可 2. ...2014-06-29 23:12:36 · 103 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议的实现分析(1)-准备工作
1. 协议实现方案: Yunhong Gu提出的rfc的草案 https://tools.ietf.org/html/draft-gg-udt-03 2. 实际工程中用到的实现 https://github.com/barchart/barchart-udt 3. 作为练习和原理的理解 http://svn.code.sf.net/p/udt-java/...原创 2014-03-27 12:52:44 · 467 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议的实现分析(2)-为什么要用udt
0. AIMD算法的简单回顾 (1) 慢开始阶段说明 开始时cwnd为1个最大报文段(MSS), 每当一个MSS收到确认, 则cwn增加1个MSS大小, 过程: 开始 ---> cwnd = 1 经过1个RTT后 ---> cwnd = 2*1 = 2 经过2个RTT后...原创 2014-03-28 08:00:04 · 328 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议的实现分析(3)-包结构说明
udt的包结构1. 数据包,基本结构如下: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...原创 2014-03-29 17:24:51 · 261 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议的实现分析(4)-发送和接收的算法
0. 计时器udt有四种计时器:ACK, NAK, EXP and SND1. 发送端的算法数据结构和变量:1)SenderLossList: 记录发送方丢失的包的列表,根据序号升序排列2)sendBuffer: 记录发送过的包和序号发送算法:1)如果丢失列表不为空,则重传这些packet包,并从丢失列表中移出,到5)2)若应用层有数据,则执行发送3) 进行检查 a. 若未确认的包...原创 2014-03-30 10:09:39 · 896 阅读 · 0 评论 -
协议-基于UDP的可靠数据传输协议的实现分析(5)-可靠性怎么保证
发送方的处理:1) 包发送确认后,由于还没有收到确认,先缓存2) 收到确认包后,从缓存中删除发送的包3) 接收方将丢失的包通知过来,或者超过一定的时候,若还没有收到确认的包,进行重传(注意,这个由接收线程触发)接收方的处理:1) 接收到包的数据,先将数据放到缓存中,a. 若有丢包现象,通知发送方,同时记录丢失的包 b.若是重传的包,从丢失的列表中删除2) 发送确认包3) 丢失的包,超时会让发送方...原创 2014-03-31 23:08:12 · 381 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议的实现分析(6)-链接的建立和关闭
1. 模式有client/server mode(客户端,服务器端模式) and the rendezvous mode(会合模式,可同时向对方发送请求)2. client发送的握手信息,信息有:1) UDT version: udt版本,主要用作兼容性处理2) Socket Type: STREAM (0) or DGRAM (1).3) Initial Sequence Number: 第...原创 2014-04-01 22:47:29 · 282 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议的实现分析(7)-流量和拥塞控制
流量控制 对于一个带宽1Gbps, RTT为100ms的网络来说 BDP=1,000,000,000*0.1/8=12,500,000字节=12207K=12M 传统TCP接收窗口大小=65535byte=64K, 显然满足不了 udt使用包大小1500byte, 默认接口窗口大小为8192, 因此接收窗口的大小为=1500*8192=12,288,000字节=12000K=11.7M 因此, ...原创 2014-04-02 20:53:46 · 361 阅读 · 0 评论 -
Lucene的数字范围搜索 (Numeric Range Query)原理
0. 全文索引的核心就是倒排索引. 1. 若数字不支持范围查询, 直接变成字符串查找即可 2. 如果要支持范围查询, 直接的字符串存储支持么? 目前lucene要求term按照字典序(lexicographic sortable)排列,然后它的范围查询根据tii找到范围的起始Term,然后把这中间的所有的Term展开成一个BooleanQuery。...原创 2014-04-05 16:08:54 · 731 阅读 · 0 评论 -
最简单的平衡树(红-黑树)的实现
在二叉搜索树(BST)的基础上,要实现一颗平衡树,可以使用2-3树的方式,2-3树的直接实现,相对比较复杂,因此算法的研究者们提出了红-黑树的实现方式。 package com.test;public class RedBlackTree<Key extends Comparable<Key>, Value> { private static f...原创 2015-09-04 08:04:47 · 219 阅读 · 0 评论 -
Java 并发之 ConcurrentSkipListMap 简述
JCIP 提到了在 Java 6 中引入了两个新的并发集合类 ConcurrentSkipListMap 和 ConcurrentSkipListSet。其实只要介绍一下 ConcurrentSkipListMap 即可(后面简称为 CSLM),因为我们都知道 JDK 中 Set 是基于 Map 实现的。简而言之,CSLM 是一个并发的、可排序的 Map,因此它可以在多线程环境中弥补 Concu...原创 2015-09-20 20:24:31 · 217 阅读 · 0 评论 -
字符串相似算法-(1) Jaro-Winkler Distance
Jaro-Winkler Distance 算法 这是一种计算两个字符串之间相似度的方法,想必都听过Edit Distance,Jaro-inkler Distance 是Jaro Distance的一个扩展,而Jaro Distance(Jaro 1989;1995)据说是用来判定健康记录上两个名字是否相同,也有说是是用于人口普查,具体干什么就不管了,让我们先来看一下Jaro Dis...原创 2014-06-08 12:05:25 · 544 阅读 · 0 评论 -
hadoop的mapreduce的join操作原理
1. 概述如果我们有如下的两个文件:person.txt(字段是id, name,addressId):1 tom 1002 jme 1013 kite 1024 jack 1005 tim 101address.txt(字段是id,name):100 ...原创 2014-01-23 16:23:39 · 539 阅读 · 0 评论 -
整理一下准备编写的笔记目录
工作6年,主要从事分布式服务器端开发(3年),做过垂直爬虫和搜索以及数据挖掘(2年),1年的产品的业务开发,学习过和使用过的东西,陆续会写笔记,在整理的同时,算是一种经验积累的记录吧。 tcp通信过程中的一些重要事项,udt的原理和源码分析,参看 http://jimmee.iteye.com/admin/blogs/2037451 系列图片处理垂直爬虫的注意点 ht...原创 2013-12-31 21:21:15 · 203 阅读 · 0 评论 -
排序算法(二)
接下来,我准备说一下快速排序,归并排序和堆排序。在讲快速排序和归并排序前,首先说一下分而治之的思想,就是说,先将要处理的问题简化,即将复杂的大问题分解为简单的小问题,然后分而治之。一般步骤如下:1)将问题分解为小的子问题。每个子问题与大问题同型,但规模更小。2)递归解决这些子问题。3)将子问题的解答合并获得大问题的解答。在这个策略下,实际编程时也是将工作分为这三步。大家要理解的是这种思想,例如...2009-11-03 22:31:20 · 67 阅读 · 0 评论 -
排序算法(三)
如果我们不采用比较的方式来实现排序,可以采用其他方式实现排序么?是的,可以。1.桶排序例如,我们有一个数组,里面的元素如下:索引:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14元素:0 3 3 0 1 1 0 3 0 2 0 1 1 2 0根据上面给出的数据,我们可以统计数组中每个不同的数出现的次数数字:0 1 2 3次数:6 4 2 3...2009-11-04 02:38:18 · 69 阅读 · 0 评论 -
开发语言、开发工具、数据结构和算法的关系
在当我们学会了一门语言的时候(也就是说,记住了该语言的语法,词法,还有一些常用的函数),就意味着已经掌握了编写程序的基本工具。无论用的是社么语言,都差不多。只是工具之间有长有短。比如说,delphi,VB之类做windows环境的应用程序很方便;用JAVA开发基于网络的程序很轻松。假如我们用C(C++)写一个记事本软件,估计要写数百行代码才能完成,而且不能保证没有大错误,而用delphi,,或VC...原创 2009-11-04 12:54:51 · 158 阅读 · 0 评论 -
基本数据结构的说明(一)
我这里主要是对基本的数据结构进行说明,包括数组,链表,栈,队列,树,图。1.数组和链表的说明数组的这个可以说是大家最广泛使用的数据结构了。数组的最主要的特点是可以支持随机存取,也就是说,我们查询一个值时,可以在O(1)时间内完成。如果我们在数组中删除一个元素,一般都是把后面元素向前移动,返回被删除的元素,如果插入一个新元素,我们把元素向后移动,留出一个空位,插入新元素。可见,删除和插入的时...2009-11-05 01:39:27 · 1285 阅读 · 0 评论 -
基本数据结构的说明(二)
2.栈和队列所谓的栈,是一个含有至少两个基本操作的抽象数据类型:插入新的元素;删除最近时间插入的元素。遵循FILO(First in,last out,先进后出)的原则。所谓的队列,也是一个含有至少两个基本操作的抽象数据类型:插入新的元素;删除最久时间插入的元素。遵循FIFO(First in,first out,先进先出)的原则。关于栈和队列的具体实现,我们即可以借助于数组,也可...2009-11-05 01:59:51 · 78 阅读 · 0 评论 -
基本数据结构说明(三)
3.树的说明树:T={K,R}。K是包含n个结点的有穷集合(n>0),关系R满足以下条件: (1)有且仅有一个结点k0∈K,它对于关系R来说没有前驱结点,结点k0称作树的根。 (2)除结点k0外,K中的每个结点对于关系R来说都有且仅有一个前驱结点。 (3)K中每个结点对于关系R来说可以有多个后继结点。我这里主要讨论的是二叉树,因为这个是用的最...2009-11-05 20:45:42 · 113 阅读 · 0 评论 -
基本数据结构的说明(四)
4.图图(Graph)G由两个集合V(Vertex)和E(Edge)组成,记为G=(V,E),其中V是顶点的有限集合,记为V(G),E是连接V中两个不同顶点(顶点对)的边的有限集合,记为E(G)。图一般可以采用三种方式来表示:使用一个二维数组;使用邻接表;使用边数组。图的遍历一般有深度优先的方式和广度优先的方式。所谓深度优先:从图中某个初始顶点v出发,首先访问初始顶点v,然后选择一个与...2009-11-06 00:14:38 · 107 阅读 · 0 评论 -
Java String字符串一些方法的性能说明及例子
1.length(),charAt(),substring()的运行时间是常量时间内完成。2.toLowerCase()和replace()的运行时间与字符串的大小是线性关系。3.compareTo()和startWith()需要的时间与所要解决问题所使用的字符数量成比例。在最佳情况下,是常量,在最坏的情况下,是线性的,但是indexOf可能很慢。4.字符串连接需要的时间与在结果中的字...2009-11-13 21:19:43 · 85 阅读 · 0 评论 -
Finding Duplicate Elements in an Array
I came across an interesting programming puzzle today, and I'd like to share a couple of variants on it.To start with, let's say we have an array A that contains some numbers. For simplicity, let'...原创 2009-11-13 21:32:05 · 182 阅读 · 0 评论 -
怎么判断链表中是否有环?
1.判断一个单向链表是否有环:给定链表的头指针:Node*head。设2个指针,一个指针每次移动1步,另一个指针每次移动2步,如果2个指针相遇那么说明有环,如果有一个指针到NULL了就说明没有环:bool CircleInList(Link* pHead){if(pHead == NULL || pHead->next == NULL)//无节点或只有一个节点并且无自环{...2009-11-13 22:22:01 · 209 阅读 · 0 评论 -
合并-查找算法
1. 查找-合并算法查找:检查两个对象是否属于同一个集合合并:用一个集合替代两个对象分别对应的集合。1.1. 快速查找数据结构:使用一个大小为N的数组id[],p和q是连通的如果他们对应的id值一样。例如:节点: i 0 1 2 3 4 5 6 7 8 9 初始: id[i] 0 1 2 3 4 ...2009-11-26 20:20:16 · 720 阅读 · 0 评论 -
埃拉托色尼计算素数序列
[code="java"]public class Primes { public static void main(String[] args) { int N = 25; boolean[] a = new boolean[N]; // 先标记所有的数都是素数 for (int i = 2; i < N; i++) a[i] = true; f...2010-03-04 22:53:30 · 77 阅读 · 0 评论 -
(转载)微软的22道数据结构算法面试题(含答案)
1、反转一个链表。循环算法。 1 List reverse(List l) { 2 if(!l) return l; 3 list cur = l.next; 4 list pre = l; 5 list...2010-03-06 10:47:31 · 105 阅读 · 0 评论 -
无向图深度优先算法
所谓深度优先:从图中某个初始顶点v出发,首先访问初始顶点v,然后选择一个与顶点v相邻且没被访问过的顶点w为初始顶点,再从w出发进行深度优先搜索,直到图中与当前顶点v邻接的所有顶点都被访问过为止。显然,这个遍历过程是个递归过程。对于一个无向图的深度优先访问,需要注意,每条边被访问了两次,对边的第一次访问v-w,存在两种情况:第一种直接进行w的递归调用,因为w没有访问过;第二种情况是w已经被访问过...2009-12-01 21:03:07 · 493 阅读 · 0 评论 -
[转]计算机视觉、机器学习相关领域论文和源代码大集合--持续更新
一、特征提取Feature Extraction:· SIFT [1] [Demo program][SIFT Library] [VLFeat]· PCA-SIFT [2] [Project]· Affine-SIFT [3] [Project]· SURF [4] [OpenSURF] [Matlab Wrapp...原创 2013-05-12 22:40:55 · 82 阅读 · 0 评论 -
各种排序算法比较:时间复杂度,空间复杂度
时间复杂度n^2表示n的平方,选择排序有时叫做直接选择排序或简单选择排序 排序方法平均时间最好时间最坏时间桶排序(不稳定)O(n)O(n)O(n)基数排序(稳定)O(n)O(n)O(n)归并排序(稳定)O(nlogn)O(nlogn)O(nlogn)快速排序(不稳定)O(nlogn)O(nlo...原创 2013-12-05 17:18:54 · 248 阅读 · 0 评论 -
JPEG 简易文档 V2.15【转载】
JPEG 简易文档 V2.15------------------------------ 初稿写于 2000.1.23 最后修订 2003.12.5 2007.7.16 作者: 云风 Email: cloudwu (a) gmail.com Homepage: ht...原创 2016-04-10 16:35:46 · 221 阅读 · 0 评论