Resume
Cui Ce
Tel: (+86)13120398656
Email: cucmakeit@gmail.com
Cui Ce
Tel: (+86)13120398656
Email: cucmakeit@gmail.com
求一个数组中第k大的数,我第一印象是冒泡,因为只要冒泡k趟即可,第一趟冒泡第一大,第二次冒泡第二大,第k次冒泡第k大,时间复杂度为O(kn),n为数组长度。但是我们都知道快速排序是对冒泡的改进,降低冒泡的递归深度,使时间复杂度降低到O(nlgn),为什么不用快排呢?那么快排的时间复杂度又是多少呢?
因为快排每次将数组划分为两组加一个枢纽元素,每一趟划分你只需要将k与枢纽元素的下标进行比较,如果比枢纽元素下标大就从右边的子数组中找,如果比枢纽元素下标小从左边的子数组中找,如果一样则就是枢纽元素,找到,如果需要从左边或者右边的子数组中再查找的话,只需要递归一边查找即可,无需像快排一样两边都需要递归,所以复杂度必然降低。
最差情况如下:假设快排每次都平均划分,但是都不在枢纽元素上找到第k大
对于推荐系统的评价有很多的指标,但对于不同的应用采用相同的评价指标可能也会有截然不同的结果,对于同一个应用的不同评价指标对于评价推荐系统的贡献是不一样的。例如采用MAE和RMSE等针对评分预测的评价指标作用于TopN推荐的场景中,可能指标能反映的内容比较有限。
因此,在确定推荐系统应该以什么指标去做效果评价的时候,要先明确你的推荐系统做的是什么事情,使用者对推荐的哪方面内容最感兴趣。
GraphX利用Spark这样一个并行处理框架实现了类似Pregel的图计算模型,该计算模型由以下三个主要部分:
节点发送消息的函数
sendMsg:EdgeTriplet[VD, ED] => Iterator[(VertexId, A)]
(边元组) => Iterator[(目标节点Id, 消息)]
消息合并函数(功能类似于Hadoop中的combiner)
mergeMsg:(A, A) => A
(消息, 消息) => 消息
Pregel算法已经被集中抽象到GraphOps这个类中,下面就通过详解单源最短路径的例子来看看如何使用。
Spark API版本: 1.1.0
有的时候,我们需要生成一些Token作为标识:如认证后的标识符,资源的提取码等。一个比较常见的算法是生成一个GUID来作为Token,由于GUID的随机性和唯一性特点,作为Token是一个非常可靠的选择。
全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。GUID是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID 的总数达到了2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0。
以下总结几种生成GUID的算法:
|
|
kafka 最初由 Linkedin 公司开发,使用 Scala 语言编写,是一个分布式、分区、多副本、多订阅者的日志系统。 Spark Streaming 是大规模流式数据处理的新贵,将流式计算分解成一系列短小的批处理作业。由于 SparkStreaming 对网络流方式的支持, SparkStreaming+Kafka 的日志流式处理方式已越来越普遍。本文将讲解如何利用两者搭建出一套实时流处理系统,并详细列出实际搭建过程中遇到的问题及解决方式。
进入 zookeeper HOME
目录,执行 $ bin/zkServer.sh start
启动 zookeeper。
本文基于kafka 0.8.1。
https://www.apache.org/dyn/closer.cgi?path=/kafka/0.8.1.1/kafka_2.10-0.8.1.1.tgz
|
|
在数据分析和数据挖掘过程中,通常需要比较个体之间的相似度,比较常用的三种度量方法分别是:余弦相似度、皮尔森相关系数和修正的余弦相似度。
相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。用户一项目评分矩阵可以看作是n维空间上的向量,余弦相似性度量方法是通过计算向量间的余弦夹角来度量用户间相似性的。设向量x和y分别表示用户X和用户Y在n维空间上的评分,则用基于协同过滤推荐算法研究X和Y之间的相似性公式为:
余弦相似度未考虑到用户评分尺度问题,如在评分区间[1-5]的情况下,对用户X来说评分3以上就是自己喜欢的,而对于用户Y,评分4以上才是自己喜欢的。通过减去用户对项的平均评分,修正的余弦相似性度量方法改善了以上问题。计算公式为: