摘要: 文 / 郑华随着互联网特别是社会化网络的快速发展,我们正处于信息过载的时代。用户面对过量的信息很难找到自己真正感兴趣的内容,而内容提供商也很难把优质的 内容准确推送给感兴趣的用户。推荐系统被认为是解决这些问题的有效方法,它对用户的历史行为进行挖掘,对用户兴趣进行建模,并对用户未来的行为进行预测, 从而建立了用户和内容的关系。视频网站同样也面临着信息过载的问题,比如YouTube目前有数十亿视频条目,而且每分钟都有近1500分钟时长的视频被上传,而专业视频网站 Hulu也有近20万的高质量视频,用户也很难从中找到自己真正感兴趣的内容;同时提高用户的观看和停留时间也非常重要,所以推荐系统对于视频网 阅读全文
posted @ 2013-03-18 02:25 busyfruit 阅读(364) 评论(0) 推荐(0) 编辑
摘要: 在学习算法的过程中,我们除了要了解某个算法的基本原理、实现方式,更重要的一个环节是利用big-O理论来分析算法的复杂度。在时间复杂度和空间复杂度之间,我们又会更注重时间复杂度。时间复杂度按优劣排差不多集中在:O(1), O(log n), O(n), O(n log n), O(n2), O(nk), O(2n)到目前位置,似乎我学到的算法中,时间复杂度是O(log n),好像就数二分查找法,其他的诸如排序算法都是 O(n log n)或者O(n2)。但是也正是因为有二分的 O(log n), 才让很多 O(n2)缩减到只要O(n log n)。关于二分查找法二分查找法主要是解决在“一堆数中找 阅读全文
posted @ 2013-03-18 02:23 busyfruit 阅读(235) 评论(0) 推荐(0) 编辑
摘要: PageRank是Google十年前提出的一种网页评级方法,也是Google用来衡量一个网站质量好坏的重要因素。利用 PageRank,Google不断地改善搜索结果的排序,打造出目前最受欢迎的搜索引擎。相继搜索业的蓬勃发展,互联网领域又出现了一只新秀——社会网 络(SNS)。如今,Facebook几乎代表了SNS的领航者。在F8大会上,来自Facebook的工程师介绍了关于news feed的算法,称之为Edge rank。Edge rank考虑了SNS网站用户之间的交互行为和交互的时效性,从而计算新鲜事出现权重,达到优化新鲜事排序、以及改变仅按时间排序的现状的目的。Edge rank算法的 阅读全文
posted @ 2013-03-18 02:15 busyfruit 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 问题某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新。现在要为该网站设计一种算法,在每次用户登录时显示其当前积分排名。用户最大规模为2亿;积分为非负整数,且小于100万。PS: 据说这是迅雷的一道面试题,不过问题本身具有很强的真实性,所以本文打算按照真实场景来考虑,而不局限于面试题的理想环境。存储结构首先,我们用一张用户积分表user_score来保存用户的积分信息。表结构:示例数据:下面的算法会基于这个基本的表结构来进行。算法1:简单SQL查询首先,我们很容易想到用一条简单的SQL语句查询出积分大于该用户积分的用户数量:select 1 + count(t2.uid) as ra 阅读全文
posted @ 2013-03-18 02:13 busyfruit 阅读(172) 评论(0) 推荐(0) 编辑
摘要: Dijkstra的计算过程就是在维护一张表,形如:vknowndpv1T00v2F2v1v3F3v4v4T1v1v5F3v4v6F9v4v7F5v4每一次循环要从d中找出最小者,于是PairHeap、FibHeap、BinaryHeap等等就派上用场了。本文我们采用PariHeap,至 于为什么请看链接3。当需要更改(减小)d的值时,需要从PairHeap上找到相应的节点再执行DecreaseKey操作,于是我在链接2的基础之上 为PairHeap增加了Find操作。base.h#ifndef _BASE_H #define _BASE_H #include<stdio.h> #i 阅读全文
posted @ 2013-03-18 02:12 busyfruit 阅读(190) 评论(0) 推荐(0) 编辑
摘要: GL游戏规则:有个列相当长的格子(格子总数不超过10的四次方),某些格子里面放了棋子(棋子总数足够多)1.如果格子里面有棋子,就可以少拿走其中一颗,同时在这个格子的左边两个格子里面各放一颗;2.如果连续两个格子里面都有棋子,可以分别从两个格子中都拿走一颗,并在她们右边的格子里面放入一颗输入初始状态,反复使用规则1,2输出终止状态(停机状态)一. 每个格子至多只有一颗棋子二. 相邻两个格子不能都有棋子例如下图,格子里面的棋子数分别为为:2,3,5 ;终止状态为1, , ,1, , , , ,1这是一道ACM的程序书上看到的一道题,当时书上面说的是用 斐波那契 数列来求解,此步骤简单,但是只能求得 阅读全文
posted @ 2013-03-18 02:10 busyfruit 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 人类和蚂蚁的区别是什么?蚂蚁没有互联网。相对于拥有创造性思维的人类,蚂蚁看起来不过是依赖于本能的生物。不过,斯坦福大学两位科学家发现,蚂蚁比我们想象的要聪明的多,虽然它们没有发明互联网,但是却懂得互联网上的算法。在斯坦福大学网站上,讲述了这个有趣的发现。生物学教授 Deborah Gordon 在观察亚利桑那州的农田蚁时,发现了它们在寻食时的特别行为,于是找到了计算机科学家 Balaji Prabhakar 探讨这件事情。Balaji Probhakar 虽然是网络文件传输方面的专家,但是并没有立刻意识到这跟计算机有何关联。到了第二天,灵感突然来袭,他突然想到,蚂蚁的行为和互联网上文件传输竟然 阅读全文
posted @ 2013-03-18 02:08 busyfruit 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 第一篇 Formal models for expert finding in enterprise corpora. In SIGIR ’06举例:doc1 梁斌是做机器学习的,也是学机器学习的doc2 机器学习课程助教梁斌doc3 梁斌参加了暑期实践doc4 梁斌做了微博寻人P(梁斌|d1) = 1/3 //考察文档产生专家的能力,即d产生梁斌的能力p(梁斌|d2) = 1/4p(梁斌|d3) = 1/3p(梁斌|d4) = 1/2p(机器学习|d1) =2/3 //考察文档产生query的能力p(机器学习|d2) =1/4p(机器学习|d3) =0p(机器学习|d4) =0P(机器学习| 阅读全文
posted @ 2013-03-18 02:06 busyfruit 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 以下是实验设计设计一个一维的数据,14个数据,7个成一组,一个高斯分布,整体数据隐含了2个高斯分布。系统最初给出第一个数属于z0的概率0.9,最后一个数属于在z1的概率0.9,其余数据不可判定。迭代到最后,自动识别前7个数属于z0,后7个数属于z1。实验代码include "stdio.h"#include "stdlib.h"#include "stdint.h"#include "math.h"double PI = 3.1415926;double Gauss(const double px,const do 阅读全文
posted @ 2013-03-18 02:05 busyfruit 阅读(170) 评论(0) 推荐(0) 编辑
摘要: K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法,总体来说KNN算法是相对比较容易理解的算法。其中的K表示最接近自己的K个数据样本。KNN算法和K-Means算法不同的是,K-Means算法用来聚类,用来判断哪些东西是一个比较相近的类型,而KNN算法是用来做归类的,也就是说,有一个样本空间里的样本分成很几个类型,然后,给定一个待分类的数据,通过计算接近自己最近的K个样本来判断这个待分类数据属于哪个分类。你可以简单的理解为由那离自己最近的K个点来投票决定待分类数据归为哪一类。Wikipedia上的KNN词条中有一个比较经典的图如下:从上图中我们可以 阅读全文
posted @ 2013-03-18 02:03 busyfruit 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 在象通讯系统中的机站这样的复杂嵌入式系统中,对于内存管理模块的效率具有很高的要求,因此内存管理模块的算法很有讲究。讲究在于,不仅要考虑算法 的效率,还要兼顾算法是否会带来大量的内存碎片以及如何进行内存碎片合并。正因如此,这类嵌入式系统软件大多会对内存管理模块根据业务特点进行适当的优 化。优化的方式无外乎引入内存池,或对堆管理模块引入新的算法加以优化,然而这些方法除了引入了一定的算法复杂度外,仍存在不小的改善空间。借此,作者想提出一种面向业务流的内存管理算法与大家共同探讨。为了讨论的方便性,我们假设某虚拟系统存在如下的业务流顺序图。图中的三个模块只是代表性的,它们即可以指以消息为通讯手段的三个任 阅读全文
posted @ 2013-03-18 02:00 busyfruit 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 蓄水池算法问题描述要求从N个元素中随机的抽取k个元素,其中N无法确定(N是个流,可能无穷大)。这种应用的场景一般是数据流的情况下,由于数据只能被读取一次,而且数据量很大,并不能全部保存,因此数据量N是无法在抽样开始时确定的;但又要保持随机性,于是有了这个问题。所以搜索网站有时候会问这样的问题。这里的核心问题就是“随机”,怎么才能是随机的抽取元素呢?我们设想,买彩票的时候,由于所有彩票的中奖概率都是一样的,所以我们才是“随机的”买彩票。那么要使抽取数据也随机,必须使每一个数据被抽样出来的概率都一样。解决方案解决方案就是蓄水库抽样(reservoid sampling)。主要思想就是保持一个集合( 阅读全文
posted @ 2013-03-18 01:58 busyfruit 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 关于无锁队列的实现,网上有很多文章,虽然本文可能和那些文章有所重复,但是我还是想以我自己的方式把这些文章中的重要的知识点串起来和大家讲一讲这个技术。下面开始正文。关于CAS等原子操作在开始说无锁队列之前,我们需要知道一个很重要的技术就是CAS操作——Compare & Set,或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCHG 汇编指令。有了这个原子操作,我们就可以用其来实现各种无锁(lock free)的数据结构。这个操作用C语言来描述就是下面这个样子:(代码来自Wikipedia的Compare And Sw 阅读全文
posted @ 2013-03-18 01:33 busyfruit 阅读(400) 评论(0) 推荐(0) 编辑
摘要: 字符串匹配的算法当属KMP最为著名了,人人皆知,但是KMP算法是如何做到高效率字符串匹配的呢? 我们首先来看看一般的暴力的字符串匹配算法,对于串s和模式串pattern,依次枚举s中的每一个字符作为起点与pattern尝试进行匹配,直到遇到 不匹配的字符的时候,取下一个s中的字符作为起点与模式串pattern重新进行匹配。我们知道这样的时间复杂度是O(n*m)的,显然效率很不好。 从上面暴力匹配的过程我们可以知道,当暴力进行匹配的时候,遇到不匹配的字符,不一定要从s的下一个字符重新与模式串进行匹配,那么我们如何做到这一点呢?这就要用到KMP中神奇的next数组了。 next数组记录的是模... 阅读全文
posted @ 2013-03-18 01:28 busyfruit 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串。你可以委婉地问你的MM:“假如你要向你喜欢的人表白的话,我的名字是你的告白语中的子串吗?”解决这类问题,通常我们的方法是枚举从A串的什么位置起开始与B匹配,然后验证是否匹配。假如A串长度为n,B串 阅读全文
posted @ 2013-03-18 01:26 busyfruit 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 百度公司2013面试经典笔试题1、用简单语言描述进行数据库操作的步骤;2、什么是MVC结构,并简要介绍各层结构作用;3、Windows客户端:请简述win32下线程间与进程间同步互斥的机制与区别;4、Windows客户端/浏览器:Winsock网络通信IO模型有几种,请给出一种的使用场景及原因;5、安全相关:请简述栈溢出的原理和预防手段;6、给定两个排好序的数组,怎样高效判断这个两个数组是否存在相同的数字;7、有1000桶酒,其中1桶有毒,而且一旦吃了,毒性会在第二天发作。现在我们用小老鼠进行实验,要在两天内找出那桶毒酒,问最少需要多少只老鼠,为什么;8、请用C语言实现字符串反转函数函数原型: 阅读全文
posted @ 2013-03-18 01:17 busyfruit 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 找工作前写了篇blog说要做些常见的笔试面试题,像单链表反转啊字符串反转啊之类的题目,但是只写了一篇单链表反转就没再继续写下去,因为觉得实 在没什么好写的,不过都是一些简单的指针操作罢了,但是还是有很多新手问这个问题,而且我在腾讯二面的时候也被要求实现这个函数,那我也写一篇blog介 绍一下字符串反转吧。 C语言中所谓的字符串不过是字符数组,后跟一个0x00字符标识结尾,所以反转起来很容易,只要一个循环依次将第一个字符和最后一个字符交换, 第二个字符和倒数第二个字符交换……如果最中间有两个字符(即需要反转的字符串长度为偶数),那就交换,如果最中间有一个字符(即需要反转的字符串长度为 奇数),. 阅读全文
posted @ 2013-03-18 01:14 busyfruit 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 不是local的,cst 6am == pst 2pm的skype电面。没问背景,直接做题。3个题:旋转有序数组 没重复元素 找最小元股票那个题,买一次,卖一次,求买进那天、卖出那天、最大利润batman, 就是n个人,batman认识所有人,所有人都不认识batman,返回batman的id,没有的话返回-1。给了个api是bool AknowsB(int a,int b)关于第3题:我说了思路 如果a认识b则b不可能是batman,否则a不可能是batman然后写代码,一共写了3段,不断优化。 第一段,用了个vector<bool>标识是否可能是batman,再用一个vecto 阅读全文
posted @ 2013-03-18 00:53 busyfruit 阅读(138) 评论(0) 推荐(0) 编辑
摘要: KDD杯的中心,所有的数据,任务和结果。UCI机器学习和知识发现研究中使用的大型数据集KDD数据库存储库。UCI机器学习数据库。AWS(亚马逊网络服务)公共数据集,提供了一个集中的资料库,可以无缝集成到基于AWS的云应用程序的公共数据集。生物测定数据,在 虚拟筛选,生物测定数据,对化学信息学,J.由阿曼达Schierz的,有21个生物测定数据集(有效/无效的化合物)可供下载。加拿大开放数据,许多政府和地理空间数据集的试点项目。因果关系工作平台的数据存储库。数据源手册,指南公开数据,由皮特·沃登,奥莱利(2011年1月)。Data.gov.uk,英国(伦敦数据存储的公开数据 )。Dat 阅读全文
posted @ 2013-03-18 00:48 busyfruit 阅读(4381) 评论(0) 推荐(0) 编辑
摘要: 九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十题(本文最初发表于本人blog内,现整编于此)引言 以下是整理自8月下旬至10月份内的各大公司的笔试面试三十题(注:所有题目基本上全部为软件开发方向,题目来源:网络收集),相信一定能给正在参加各种校招的诸多朋友多少帮助,学习参考或借鉴(如果你手头上有好的笔试/面试题,欢迎通过微博私信:http://weibo.com/julyweibo,或邮箱:zhoulei0907@yahoo.cn发给我,或者干脆直接评论在本文下;同时,若你对以下任何一题有任何看法.想法.思路或建议,欢迎留言评论,大家一起讨论,共同享受思考的乐趣,谢谢)。九月十月百. 阅读全文
posted @ 2013-03-18 00:33 busyfruit 阅读(363) 评论(0) 推荐(0) 编辑