查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

长风明志的博客

不要也不能做下一个谁,应该且可以做第一个自己

 
 
 
 

日志分类

 
 
日志分类列表加载中...
 
 
 
 
 
 
 
博友列表加载中...
 
 
 
 
 
 
 
列表加载中...
 
 
 
 
 
 
 
圈子列表加载中...
 
 
 
 
 
 
 
 

广东省 深圳市 天蝎座

 发消息  写留言

 
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 
心情随笔列表加载中...
 
 
 
 
 
 
 

推荐系统小结

2014-7-3 12:24:41 阅读568 评论0 32014/07 July3

1、推荐引擎分类:

根据用户针对性:大众行为,个性化

根据数据源:人口统计学,基于内容,基于行为偏好(协同过滤)

根据模型方式:memory based,关联规则,model based

2、混合推荐:

线性加权、切换混合、分区浏览混合、分层(前一个输出为后一个输入?)

3、amazon的推荐,今日推荐,新品推荐,捆绑销售,别人购买/浏览的商品。推荐原因。

4、CF

用户偏好收集,显示/隐式,降噪,归一化。多行为可分别计算或加权组合计算。

相似度计算,欧式,转换后的欧式(1/(1+euc_dis)),cosine,皮尔森,tanimoto(类似cosine)。邻居计算可采用固定K或距离阈值。

推荐上,现有user-based,AMAZON使item-based流行起来,item远少于user数,计算量较小也不必平凡更新。但对于新闻,博客等,更好是采用user-based。非社交网站item-based更好,直接提供item的相似推荐且较好解释,社交网站上user-based是个不错选择。

精度与多样性,item-based与user-based经测算,只有50%的结果重合。单用户多样性上,user-based更胜,但整体的item coverage上,item-based应该更好,因为user-based容易集中在流行上。item-based可以考虑计算这个物品适不适合进行相似扩展推荐。

5、mahout

作者  | 2014-7-3 12:24:41 | 阅读(568) |评论(0) | 阅读全文>>

【转载】一个图像检索的例子

2013-12-20 19:53:19 阅读415 评论0 202013/12 Dec20

Image Classification Practical, 2011

Andrea Vedaldi and Andrew Zisserman

See most recent version of this assignment on vgg website.

Goal  

In image classification, an image is classified according to its visual content. For example, does it contain an airplane or not. An important application is image retrieval - searching through an image dataset to obtain (or retrieve) those images with particular visual content.

The goal of this session is to get basic practical experience with image classification. It includes: (i) training

作者  | 2013-12-20 19:53:19 | 阅读(415) |评论(0) | 阅读全文>>

让Java程序间隔一定时间重复执行

2013-12-15 20:28:55 阅读2816 评论0 152013/12 Dec15

最近做的小项目需要让Java程序间隔一定时间重复执行,方法很简单,使用Java的Timer、TimerTask定时执行即可:

以下是该方法的简单实现:

/**

* Java程序间隔一定时间执行

*/

import java.util.Timer;

import java.util.TimerTask;

public class Test {

private final Timer timer = new Timer();

private int seconds;

public Test(int seconds) {

this.seconds = seconds;

}

private void doSomething() {

System.out.println("I am doing something...");

}

public void start() {

timer.schedule(new TimerTask() {

public void run() {

doSomething();

}

},0,this.seconds*1000);         //每隔seconds秒运行一次函数doSomething()

}

作者  | 2013-12-15 20:28:55 | 阅读(2816) |评论(0) | 阅读全文>>

【转】单链表和之恋

2013-10-18 10:54:03 阅读205 评论0 182013/10 Oct18

单链表和之恋问题:

原题:两个单链表(singly linked list),每一个节点里面一个0-9的数字,输入就相当于两个大数了。然后返回这两个数的和(一个新list)。这两个输入的list长度相等。 要求是:

不用递归;要求算法在最好的情况下,只遍历两个list一次 ,最差的情况下两遍。

    分析:

遇到一个面试题,#首先,要澄清和理解题意,确保你的理解和面试官的本意一致。#题中的单链表,可不可以原地修改?是从高位到低位,还是 低位到高位?如果是从低位到高位,那么问题很简单,是不是?只要两个指针移动(因为是等长的),对应位置相加,同时记录是否有进位,产生的结果存入新的链 表中。

如果是从高到低,问题就复杂了,进位是万恶之源。这时,也许我们会想到reverse两个单链表(其实,这也是一道很好的面试题,如何做?考虑递归和递推两种算法),但这样做,是不是最好最坏情形都得遍历两次?好像不合题意。

如果新的链表的节点可以存一个或两个数字,那么,第一遍,将相应节点的数字相加,存入新的链表,并用一个flag标志整个操作中是否有进位。如果没 有,结了;否则,再扫描一遍新的链表,将有两个数字的进位存到上一个节点。如果新的链表是双向的,问题比较简单;如果新的链表还是单向的,这一步也会很复杂, 比如,10-〉9-〉9-〉12,如何转成1-〉1-〉0-〉0-〉2,本身也是一个很好的面试题。这时可能需要reverse链表再操作。

如果新的链表的节点只能存一个数字,那么能有什么办法?下面介绍一种高效的解决方案

作者  | 2013-10-18 10:54:03 | 阅读(205) |评论(0) | 阅读全文>>

设计模式3:装饰模式

2013-9-13 15:04:04 阅读125 评论0 132013/09 Sept13

装饰模式(Decorator): 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。

装饰模式UML设计图:

1.Component类

abstract class Component

{

public abstract void Operation();

}

2.ConcreteComponent类

class ConcreteComponent : Component

{

public override void Operation()

{

Console.WriteLine("具体对象的操作");

}

}

3.Decorator类

abstract class Decorator : Component

{

protected Component component;

public void Decorate( Component component)    /*装饰组件*/

{

this.component=component;

}

public override void Operation()

{

if(component !=null)

{

component.Operation();

作者  | 2013-9-13 15:04:04 | 阅读(125) |评论(0) | 阅读全文>>

设计模式1:简单工厂模式

2013-9-11 10:24:00 阅读186 评论0 112013/09 Sept11

简单工厂模式:使用一个单独的类来实例化对象,以后要增加或修改需要实例化的对象就在这个类中修改或增加。这个类便是我们说的简单工厂。

下面以实现一个”简单计算器“为例:

简单工厂设计模式UML图:

1.Operation类:

public class Operation

{

private double _numberA=0;

private double _numberB=0;

public double NumberA

{

get {return _numberA;}

set { _numberA=value;}

}

public double NumberB

{

get { return _numberB;  }

set { _numberB=value;  }

}

public virtual double GetResult()

{

double result=0;

return result;

}

}

2.加减乘除类:

class OperationAdd : Operation

{

public override double GetResult()

{

作者  | 2013-9-11 10:24:00 | 阅读(186) |评论(0) | 阅读全文>>

【2013编程之美初赛】 相似字符串

2013-4-13 18:32:08 阅读504 评论0 132013/04 Apr13

如果不考虑大数据情况,只求AC,这题非常简单。。。

时间限制: 4000ms 内存限制: 256MB

由于技术问题,导致比赛初期网站难以访问,我们深感抱歉。因此,本场比赛延长半小时,晋级复赛名额增加300(总时长2.5小时,本场比赛前800晋级复赛)。

描述

对于两个长度相等的字符串,我们定义其距离为对应位置不同的字符数量,同时我们认为距离越近的字符串越相似。例如,“0123”和“0000”的距离为 3,“0123”和“0213”的距离则为 2,所以与“0000”相比,“0213”和“0123”最相似。

现在给定两个字符串 S1 和 S2,其中 S2 的长度不大于 S1。请在 S1 中寻找一个与 S2 长度相同的子串,使得距离最小。

输入

输入包括多组数据。第一行是整数 T,表示有多少组测试数据。每组测试数据恰好占两行,第一行为字符串 S1,第二行为 S2。所有字符串都只包括“0”到“9”的字符。

输出

对于每组测试数据,单独输出一行“Case #c: d”。其中,c 表示测试数据的编号(从 1 开始),d 表示找到的子串的最小距离。

数据范围

1 ≤ T ≤ 100

小数据:字符串长度不超过 1000

大数据:字符串长度不超过 50000

样例输入3 0123456789 321 010203040506070809 404 20121221 211样例输出Case #1: 2 Case #2: 1 Case #3: 1小数据:

作者  | 2013-4-13 18:32:08 | 阅读(504) |评论(0) | 阅读全文>>

【2013编程之美资格赛】 树上的三角形

2013-4-13 18:28:54 阅读312 评论0 132013/04 Apr13

时间限制: 2000ms 内存限制: 256MB

描述

有一棵树,树上有只毛毛虫。它在这棵树上生活了很久,对它的构造了如指掌。所以它在树上从来都是走最短路,不会绕路。它还还特别喜欢三角形,所以当它在树上爬来爬去的时候总会在想,如果把刚才爬过的那几根树枝/树干锯下来,能不能从中选三根出来拼成一个三角形呢?

输入

输入数据的第一行包含一个整数 T,表示数据组数。

接下来有 T 组数据,每组数据中:

第一行包含一个整数 N,表示树上节点的个数(从 1 到 N 标号)。

接下来的 N-1 行包含三个整数 a, b, len,表示有一根长度为 len 的树枝/树干在节点 a 和节点 b 之间。

接下来一行包含一个整数 M,表示询问数。

接下来M行每行两个整数 S, T,表示毛毛虫从 S 爬行到了 T,询问这段路程中的树枝/树干是否能拼成三角形。

输出

对于每组数据,先输出一行"Case #X:",其中X为数据组数编号,从 1 开始。

接下来对于每个询问输出一行,包含"Yes"或“No”,表示是否可以拼成三角形。

数据范围

1 ≤ T ≤ 5

小数据:1 ≤ N ≤ 100, 1 ≤ M ≤ 100, 1 ≤ len ≤ 10000

大数据:1 ≤ N ≤ 100000, 1 ≤ M ≤ 100000, 1 ≤ len ≤ 1000000000

样例输入2 5 1

作者  | 2013-4-13 18:28:54 | 阅读(312) |评论(0) | 阅读全文>>

【2013编程之美资格赛】传话游戏

2013-4-6 13:30:16 阅读191 评论0 62013/04 Apr6

时间限制: 1000ms 内存限制: 256MB

描述

Alice和Bob还有其他几位好朋友在一起玩传话游戏。这个游戏是这样进行的:首先,所有游戏者按顺序站成一排,Alice站第一位,Bob站最后一位。然后,Alice想一句话悄悄告诉第二位游戏者,第二位游戏者又悄悄地告诉第三位,第三位又告诉第四位……以此类推,直到倒数第二位告诉Bob。两位游戏者在传话中,不能让其他人听到,也不能使用肢体动作来解释。最后,Bob把他所听到的话告诉大家,Alice也把她原本所想的话告诉大家。

由于传话过程中可能出现一些偏差,游戏者越多,Bob最后听到的话就与Alice所想的越不同。Bob听到的话往往会变成一些很搞笑的东西,所以大家玩得乐此不疲。经过几轮游戏后,Alice注意到在两人传话中,有些词汇往往会错误地变成其他特定的词汇。Alice已经收集到了这样的一个词汇转化的列表,她想知道她的话传到Bob时会变成什么样子,请你写个程序来帮助她。

输入

输入包括多组数据。第一行是整数 T,表示有多少组测试数据。每组数据第一行包括两个整数 N 和 M,分别表示游戏者的数量和单词转化列表长度。随后有 M 行,每行包含两个用空格隔开的单词 a 和 b,表示单词 a 在传话中一定会变成 b。输入数据保证没有重复的 a。最后一行包含若干个用单个空格隔开的单词,表示Alice所想的句子,句子总长不超过100个字符。所有单

作者  | 2013-4-6 13:30:16 | 阅读(191) |评论(0) | 阅读全文>>

#算法面试题# 陆续摘录。。。

2012-11-27 17:53:22 阅读228 评论0 272012/11 Nov27

1.找出所有的四元组(a,b,c,d),满足a^3+b^3=c^3+d^3 (a,b,c,d <= N)。要求O(N^2*logN)的时间,O(N)的空间。

答:先看另外一道很有趣的问题:给定两个排好序的数组A和B,两数组长度都为N,我们从两个数组各取一个元素求和,这样就得到了N^2个和,要求把这N^2个和按序输出,空间不能超过O(N)。方法是建立一个堆,开始时堆中的元素A[1]+B[1], A[1]+B[2], …, A[1]+B[N],每次从堆中取最小元素输出,然后看看这个元素是怎么来的,假设是A[i]+B[j],就把A[i+1]+B[j]插入堆。回到本问题,现在只是A,B数组都是1^3, 2^3, … N^3而已,用同样算法,如果发现相邻两次输出的值相同,说明找到了一组解。空间显然是O(N),因为共输出N^2个元素,每次堆操作是O(logN),所以时间是O(N^2*logN)

2.盒子中有n张卡片,上面的数字分别为k1,k2,...,kn。你有4次机会,每抽一次,记录下卡片上的数字,再将卡片放回盒子中。如果4个数字的和等于m。则你就赢得游戏,否则就是输。直觉上,赢的可能性太低了。请你给出程序,判断是否有赢的可能性。尽量提高方法的效率。

答:

这个题目最直接的方法就是四重循环遍历,n^4的时间复杂度,比较恐怖,但确实一个很好的起点。不用觉得很丢人,只要我们持续改进即可。

假设a,b,c是k1到kn中的三个数字,是否存在d使得,a+b+c+d=m?d在k1到kn中。和题目中的意思是一样的,变换等式如下:

作者  | 2012-11-27 17:53:22 | 阅读(228) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 我要留言
 
 
 
留言列表加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018

注册 登录  
 加关注