君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理
上一页 1 ··· 29 30 31 32 33 34 35 36 37 ··· 106 下一页

2013年6月7日 #

摘要: 转载自 http://www.ruanyifeng.com/blog/上一次,我用TF-IDF算法自动提取关键词。今天,我们再来研究另一个相关的问题。有些时候,除了找到关键词,我们还希望找到与原文章相似的其他文章。比如,"Google新闻"在主新闻下方,还提供多条相似的新闻。为了找出相似的文章,需要用到"余弦相似性"(cosine similiarity)。下面,我举一个例子来说明,什么是"余弦相似性"。为了简单起见,我们先从句子着手。 句子A:我喜欢看电视,不喜欢看电影。 句子B:我不喜欢看电视,也不喜欢看电影。请问怎样才能计算上面 阅读全文
posted @ 2013-06-07 04:59 刺猬的温驯 阅读(316) 评论(0) 推荐(0) 编辑

摘要: 转载自 http://www.ruanyifeng.com/blog/这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题。有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才能正确做到?这个问题涉及到数据挖掘、文本处理、信息检索等很多计算机前沿领域,但是出乎意料的是,有一个非常简单的经典算法,可以给出令人相当满意的结果。它简单到都不需要高等数学,普通人只用10分钟就可以理解,这就是我今天想要介绍的TF-IDF算法。让我们从一个实例开始讲起。假定现在有一篇长文《中国的蜜蜂养殖》,我们准备用计算机提取它的 阅读全文
posted @ 2013-06-07 04:57 刺猬的温驯 阅读(730) 评论(0) 推荐(0) 编辑

摘要: 先讲两个很老的小故事。第一个故事。有一家日本最大的化妆品公司,收到了用户的投诉。用户抱怨买来的肥皂盒是空的。这家公司为了防止再发生这样的事故,很辛苦地发明了一台X光检查器,能够透视每一个出货的肥皂盒。同样的事故,发生在一家小公司。他们的解决方法是买一台强力的工业电扇,对着肥皂盒猛吹,被吹走的就是空肥皂盒。第二个故事。美国太空总署(NASA)发现在太空失重状态下,航天员无法用墨水笔写字。于是,他们花了大量经费,研发出了一种可以在失重状态下写字的太空笔。猜猜看,俄国人是怎么解决的?(答案在本文结尾处。)=====================这几天,我在看Unix,发现很多人在谈“Unix哲学” 阅读全文
posted @ 2013-06-07 04:54 刺猬的温驯 阅读(191) 评论(0) 推荐(0) 编辑

2013年6月6日 #

摘要: 获取元素有了前面的分析,获取元素的逻辑就非常清晰。首先,调用者传递key,从key的hashCode方法获得值后,调用hash函数做一些低位置换,保证hash值的均匀分布,之后和size-1按位与后得到数组的位置。然后取出对应位置的链表,遍历该链表,查找hash值相等,并且key的引用或者值相等的对象,然后返回。代码见下面:[java]view plaincopyprint?publicVget(Objectkey){if(key==null)returngetForNullKey();inthash=hash(key.hashCode());for(Entry<K,V>e=tab 阅读全文
posted @ 2013-06-06 05:39 刺猬的温驯 阅读(376) 评论(0) 推荐(0) 编辑

摘要: 现在,有了hash code,来考虑如何计算放入数组的位置。hash code值通常会很大,但是数组的大小有限,默认只有16,大的也不能超过2的30次方。所以,用模运算来保证在数组大小范围内是合理的,比如:index = hash code % array size.不过这有点慢,JDK采用了更快的算法。这个更快的算法源于一个数学规律,就是如果size是2的N次方,那么数X对size的模运算结果等价于X和size-1的按位与运算,也就是 X % size <=> X & (size -1).按位与只消耗一个CPU周期,当然快多了。现在就可理解为什么要故意把数组大小弄成2的N 阅读全文
posted @ 2013-06-06 05:37 刺猬的温驯 阅读(224) 评论(0) 推荐(0) 编辑

摘要: 散列计算就是计算元素应该放在数组的哪个元素里。准确的说是放到哪个链表里面。按照Java的规则,如果你要想将一个对象放入HashMap中,你的对象的类必须提供hashcode方法,返回一个整数值。比如String类就有如下方法:[java]view plaincopyprint?publicinthashCode(){inth=hash;intlen=count;if(h==0&&len>0){intoff=offset;charval[]=value;for(inti=0;i<len;i++){h=31*h+val[off++];}hash=h;}returnh;} 阅读全文
posted @ 2013-06-06 05:34 刺猬的温驯 阅读(251) 评论(0) 推荐(0) 编辑

摘要: Java的HashMap非常的常用,本篇研究它的实现算法,最后希望计算出内存占用,性能的量化数据,然后得出什么时候使用HashMap,什么时候不能滥用的结论。HashMap实际上是一个数组,数组里面的每个元素都是一个链表。每个元素在通过put方法放入HashMap中的时候,要按照如下步骤进行:1.根据该元素自身提供的hashcode计算出散列值,该散列值就是数组的下标2.将新元素放入该数组位置的链表中先来看一下数组的定义:[java]view plaincopyprint?/***Thetable,resizedasnecessary.LengthMUSTAlwaysbeapoweroftwo 阅读全文
posted @ 2013-06-06 05:30 刺猬的温驯 阅读(219) 评论(0) 推荐(0) 编辑

摘要: Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构。Java集合框架的基本接口/类层次结构:java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +--java.util.LinkedList [C] +--java.util.Vector [C] +--java.util.Stack [C]+--java.util.Set [I] +--java.util.HashSet [C] +--java.util.SortedSet [ 阅读全文
posted @ 2013-06-06 05:10 刺猬的温驯 阅读(303) 评论(0) 推荐(0) 编辑

摘要: Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMapCollection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些 Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。 所有实现Collection.. 阅读全文
posted @ 2013-06-06 04:56 刺猬的温驯 阅读(1163) 评论(0) 推荐(0) 编辑

摘要: 集合交集在数学上面的定义是:A和B的交集写作 "A∩B"。 形式上:x属于A∩B当且仅当x属于A,且x属于B。在Java集合类List里面也提供了一个内置的方法,求两个List集合的交集。方法如下:public boolean retainAll(Collection<?> c)子类必须实现该方法。下面是以子类ArrayList为例的一段代码:view sourceprint?01publicclassListDemo {0203/**04* @param args05*/06publicstaticvoidmain(String[] args) {07List 阅读全文
posted @ 2013-06-06 04:52 刺猬的温驯 阅读(7661) 评论(0) 推荐(0) 编辑

上一页 1 ··· 29 30 31 32 33 34 35 36 37 ··· 106 下一页