- 博客(43)
- 资源 (2)
- 收藏
- 关注
原创 spark mlib中的随机梯度下降算法
线性回归是利用被称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析一般来说有最小二乘法与梯度下降算法可以把最小二乘法看作是数学家的算法,梯度下降算法看作是程序员的算法(毕竟是搜索嘛)算法具体的定义就不叙述了梯度下降算法就是让损失函数的值降导最小(有可能是局部最优解)梯度下降算法大致有两种一,批量梯度下降算法计算所有的数据,算出导数
2017-01-12 22:47:03 1267 1
原创 TF-IDF算法
概率 TF-IDF是一种用于资讯检索于咨询勘测的常用加权技术。TF-IDF是一种统计方法,用来衡量一个词对一个文件集的重要程度。字词的重要性与他在文件中出现的次数成正比增加,与他在文件集中出现的次数成反比下降。原理 TF:在一份文件中,词频(TF)是指某一个词的出现次数。这个数字通常会被归一化,防止他偏向唱的文件。(同一个词语在长的文件中可能具有更高的词频) IDF
2017-01-02 20:40:07 559
原创 spark官方文档
保存一下 http://www.apache.wiki/pages/viewpage.action?pageId=2883613
2016-12-26 20:39:06 513
原创 詹森不等式证明
詹森不等式是对凸函数的一个推导,由2推导到n凸函数性质:f(x)的二阶导数大于0,也就是f''(x)>0,在xf(ax+(1-a)y)证明:f(ax+(1-a)y)ax+(1-a)y-x=(1-a)(y-x)>0所以 x有x由拉格朗日中值定理有(f(ax+(1-a)y)-f(x))/((1-a)(y-x))=f'(z1)变形为:f(ax+(1-a)y)-f(x)
2016-12-23 13:21:38 11971
原创 先验概率与后验概率与似然估计
刚开始学习时一直弄不懂先后的概念,看了别人的博客明白了,现在我想以自己的语言总结一下(http://blog.csdn.net/tianguokaka/article/details/7704036#comments 优秀的博客)看官方语言的数学化解释实在无语,很多博客几乎都是照搬数学定义,渣渣没有数学大神那么牛,就以自己的语言表达一下条件概率:P(A|B)表示A在B发生的情况下的概率
2016-12-23 10:23:40 630
原创 scala下串行实现em算法
本人编写的一维em算法初学em算法时被各种公式吓到,学的过程也不是很顺利(本人数学渣渣),好不容易弄懂了大概,现在来编写个程序来检验下import scala.mathobject Main { val data=Array(1.0,1.3,2.2,2.6,2.8,5.0,7.3,7.4,7.5,7.7,7.9)//点的数据,这里数据只要一维,当然可以为n维 var means=
2016-12-22 22:35:19 746 1
原创 spark下实现并行kmeans算法
相比于本人上篇博客中scala实现的串行kmeans而已,这次的优点体现在并行的计算,并同时运行多组kmeans算法(选取不同的初值),选择其中效果最好的作为结果输出作为一个初学者,这次的编程让我初步的体会到了函数式编程的魅力,让我见识到了并行计算,学习的道路还有很长啊package zzlimport org.apache.spark.mllib.linalg.Vectorim
2016-12-22 19:33:45 4431 3
原创 scala实现Kmeans算法
好久没有写博客了,虽然并没有多少人看。kmeans的思想大家自己去查找,我就不一一叙述了。kmeans之所以不能达到全局最优,是因为他的cost函数是一个非凸的函数,找不到最低点那个位置。kmeans的初始位置很重要,本片博客采取的就是最基本的随机生成初始中心点(我很好奇,有些人的代码就是随机生成n和点,都不带判重的),比较 好的生成算法是kmeans++,保证初始点间的距离最远。这是我初学sca
2016-12-15 11:57:09 3807
原创 hdu5616(理解01背包很好的题目)
这题一看到不就是01背包吗?直觉想到对不对!!!有木有!!!然而,01背包我们都是正的扫一遍,这里需要反的再扫一遍,而且背包里面不一定非要存储背的物体的重量,还可以是记录这个背包有没有用过哈~~~首先要正的扫一遍,就是物品那端不放砝码,只在另一端放砝码,看有多少重量可以放到(这里记录的是该重量能否被访问到,所以不需要搞什么max)之后就是反着扫一遍,在上面处理的dp结果减去相应的砝码就ok
2016-03-29 21:14:50 1039 1
原创 汉诺塔系列专题(逐步理解递推递归)
最裸的汉诺塔:第一步:把n-1个盘子移到B柱第二步:把第n个柱子移到C柱第三步:把n-1个盘子移到C盘第一步和第三步是一样的,如果只需要求最少的步数,可以不管中间步骤,用递推直接写出即可核心代码a[1]=1;for(int i=2;i a[i]=2*a[i-1]+1;最裸的弄懂当然是远远不够的,现在我们来看一些变形hdu2175输入n,m,
2016-03-28 15:34:45 2976
原创 hdu3466
这一题咋一看没法下手,但其实是简单01背包的变种。没有思路的时候可以这么想想,可能会有思路。首先我们能判断出这是一个01背包问题,其次我们想如何把问题转为为我们最简单的模型。这时候我们要充分考虑我们最初的模型。for(i=0;ifor(j=m;j>=w[i];j--)dp[j]=max(dp[j-w[i]]+v[i],dp[j]);这是最初的模型,第二个for循环是从大到小,是为了
2016-01-10 16:43:42 589 1
原创 hdu2126
好久没写了。。。 这是道01背包的基础题,个人觉得比较有趣,有些小点需要注意。我们大家都知道-1背包最基本的模型,遇到01背包的问题要想好往上面转换。大家遇到这种题目可以想想建立什么样的dp数组,这个dp数组表示什么。最直白的背包大家都用一维(这个必须要,要是基础背包用二维的话,有点low,而且一维背包可以帮助你理解背包的层数,状态转移)。比如这题要求能放东西的方案,这个肯要用二维,确
2015-11-18 23:18:51 626
原创 poj2184(推荐)
题意:这是又是一道01背包的变体,题目要求选出一些牛,使smartness和funness值的和最大,而这些牛有些smartness或funness的值是负的,还要求最终的smartness之和以及funness之和不能为负。挺有意思的一个题。 这题有几点需要注意:1我们把smartness当作重量,funness当作价值,大家想想如果smart总是大于0,那不管fun的大小,这题就是个
2015-11-02 12:47:11 524
原创 floyd判圈算法
floyd判圈算法,很有意思的一个小技巧!两个人赛跑,在直线上,快的人会越来越远,而如果在圈中,快的人会追上慢的人。这点值得利用!比如,要处理某种问题,跟循环有关,当然我们可以记录每个数据,这肯定会跟占用内存。如果我们用floyd算法,一个是另一个渐变速度的两倍,那这样就能很好的判断循环的某些特性,很有意思。void solve(){ read_case(); int ans = k;
2015-09-23 21:56:35 417
原创 hdu3642(三维转二维扫描线)
比较有意思的一题,刚开始做这题的时候想到的low方法是扫描面,但这种肯定不对。。。想了一段时间,突然发现。。。枚举每个z点,就可以转化为二维上的问题。这题还有一点需要注意,不能简单的枚举每个z点,算每个面上的重叠面积,这点是错的,具体操作请看代码#include#include#include#include#define MAX 1200using namespace std;t
2015-09-17 23:31:41 539
原创 hdu1828(线段树+扫描线求周长)
这题不错,可以更加深入的了解线段树扫面线算法,大家之前可能做过扫描线求矩形面积,但因为求面积的某些局限性,一些细节不用写到就可以a,但求周长不行。首先,介绍下求周长的思路,从左往右在每一次插入一条边后,周长并的累加值==新增的横边+新增的竖边。我们可以发现,插入一条边之后,新增的横边的树木等于区间内连续线段的数目*新增横边的长度,新增的竖边等于插入前后覆盖长度的差值。插入一条出边之后,其实等同
2015-09-07 23:22:53 2089
原创 hdu1542(线段树+扫描线)
裸的扫描线,学习扫描线的题目。具体扫描线的原理我不讲了,我是看大神们的博客懂得,就算写也没大神屌。下面我给出我的代码,里面的注释是我认为比较重要的地方#include #include#include#includeusing namespace std;const int MAX=210;int N;double y[MAX];double sum=0;typedef stru
2015-09-05 22:37:47 430
原创 hdu1540(线段树区间合并)
这题是个很恶心的题,区间合并是比较裸的。但这题有的东西没有叙述清楚,题目上说的是一组数据,但测试数据却是多组数据,这题还有几点需要注意的,一是一个村庄可以被摧毁多次,当然如果你代码写得好,这点也是没关系的。我当时用b^=1来表示每次变化,但如果;连续摧毁两次,我的结果就相当于重建了,后来只有老老实实的写了。所以大家得注意到类似多多次摧毁的问题。后来都改过来了却一直1000多ms wa,我想可能是有
2015-09-05 22:28:24 950
原创 hdu3308(线段树,区间合并)
刚开始看到题目时吓到了。。。要求上升子序列,以为是道神题,但仔细一看原来是连续上升子序列,果断变为low题了。在网上看了一些大神的代码,感觉自己的代码简洁了不少,以前学c的一些小知识点也回顾了一遍,继续奋斗!#include #include#include#define lt(a) a<<1#define rt(a) a<<1|1#define md(a,b) (a+b)>>1usi
2015-09-04 17:37:46 362
原创 hdu3397(线段树区间合并)
是一道坑题。。。大致的思维很好想,只要你知道区间合并,这题的结点维护的变量略多,这题需要用到lazy标记。我用的是一个lazy,写了200行代码,好不容易把样例过了,结果wa。。。瞟了一眼别人的博客,发现大多数是用两个lazy标记,我那时候想到是我lazy这地方有缺陷,我也不想 用两个lazy,一来是麻烦,二来是我根本想不到为什么用两个lazy,套用别人的东西,下次 也 不会做。。就酱紫,调试了半
2015-09-04 17:30:37 474
原创 poj3667(线段树区间合并)
这是典型的线段树区间合并。知道lazy标记的同学比较好懂一点,这其中就用到了lazy标记。话不多说,上代码#include #include #includeusing namespace std;const int MAX=5*1e4+10;int M,N,a,b,c;typedef struct{ int lnum,rnum,mnum; int cover,lef
2015-09-03 22:46:52 326
原创 hdu5400
大水题,但wa了几次。。。思路:用一个数组保存相邻两数的差,然后过一遍数组,连续的b2可以,连续的b1之后再连续的b2也可以.。这题的个数用longlong,这个注意到了,我用len表示来连续的个数,sum+=(len+1)*len/2;我len用int保存,这里int会爆掉。。。逗比错误啊#include #include#includeusing namespace std;con
2015-08-19 12:55:50 292
原创 hdu5372(树状数组)
开始看这题时以为是线段树区间更新,误以为和poj2528差不多,然后上手打了。。。到末尾时发现有个点不一样,那就是删除,还要恢复到之前的状态,这个不会了。又从树状数组入手,发现用树状数组很简单。这题的主要思想,求得左端点大于等于左端点的线段的个数,然后再求得右端点大于该线段右端点的个数,然后两数相减得出答案,用两个树状数组维护即得到答案#include #include#include#in
2015-08-17 23:15:01 477
原创 poj2528(线段树区间更新)
这题是典型的线段树区间更新,不过有一个点需要注意,在建树之间需要把数据离散化,因为数据范围过大,直接建树会超内存,不信可以试试这里首先讲下如何把数据进行离散化。
2015-08-17 23:09:52 276
原创 ac自动机模板(hdu2222)
#include #include#include#includeusing namespace std;const int MAX=1e6+20;char str[MAX];struct node{ int count; struct node *next[26]; struct node *fail; void init() {
2015-08-16 10:19:34 324
原创 字典树模板(hdu1251)
真是不爽。。特么水的不能再水的题,g++#include #include#includeusing namespace std;char str[11];struct Trie{ Trie *child[26]; int num; Trie() { num=0; memset(child,NULL,sizeof(chil
2015-08-16 10:16:52 369
原创 hdu3374
这题有两个要求,一是求最大最小的位置,二是求最大最小出现的次数,次数是比较简单的。次数需要判断这个字符串本身是否是由重复字符串组成。这个比较好求,用kmp算法。求助next【】数组。用字符串长度了len减去next【】数组最后一个元素的长度即为组成字符串的子字符串的长度,极为cr,再判断这个长度为cr的字符串是否能构成原字符串。之后的就是求出最小#include #include#incl
2015-08-12 22:21:42 398
原创 kmp模板
/*pku3461(Oulipo), hdu1711(Number Sequence)这个模板 字符串是从0开始的Next数组是从1开始的*/#include #include using namespace std;const int N = 1000002;int next[N];char S[N], T[N];int slen, tlen;void getNe
2015-08-10 19:31:02 400
原创 poj1201(贪心+树状数组)
网上的题解都用啥差分约束系统。。。太高端,不会玩,额。。这题把数据按b的大小进行从小到大排序。然后每次取最右边的数据,用树状数组维护,真的是很方便#include #include#include#include#define mem(a) memset(a,0,sizeof(a))using namespace std;const int MAX=5*1e4+20;typedef
2015-08-09 19:51:29 636
原创 poj3268(线段树)
此题需要求某一区间内的出现最多次数的数的出现次数,此题有个好处就是它是非递减序列。题目的输入输出就让人想起了线段树。。。。每个节点需要保存三个值,一个是区间左边相同数的次数,一个数是区间右边相同数的次数,一个是最多出现次数的个数#include #include#include#include#define mem(a) memset(a,0,sizeof(a))using na
2015-08-09 19:45:45 377
原创 poj2886
此题需要了解反素数的知识,之前不了解反素数还想把1e5以内的数的因子个数全部打表。。。。此题还有一点,就是线段树的更新操作,删除某节点,这可能是大家之前没有接触到得#include #include#include#includeusing namespace std;const int MAX=5*1e5+20;typedef struct{ char name[1
2015-08-09 19:42:35 397
原创 hdu3015
此题和poj1990一样的思路,排序三次,之后的套上就行,一开始没用long long 导致wa了7 8次不开心#include #include#include#include#include#define mem(a) memset(a,0,sizeof(a))using namespace std;const int MAX=1e5+20;typedef struct{
2015-08-08 10:38:08 432
原创 hdu5358(尺取法)
这题若是按常规的思路肯定会超时,我们需要注意题目中给出的每一个条件,注意有log2这个条件,s(i,j)在[2^(k-1),2^k)之间时 log2(s(i,j))下取整+1的值是k,枚举k从1到34 ,求出对应的s(i,j)在[2^(k-1),2^k)之间时i+j的和,求这个的话,可以枚举起始点从1到n,用两个指针不断后移就行#include #include#include#includ
2015-08-08 10:37:14 838
原创 poj3321
刚见到此题时,我认为此题和poj2352star可以用类似的模型,然后写了一个程序,结果wa了,后来又仔细读了遍题目,发现之前题目理解错误。这题难点在于把树映射到数组中,然而树节点的序号并不能达到要求,我们可以求出每个节点管理的左值和右值,这里可以用dfs实现。知道左值与右值,就可以很快得出这点所管理的苹果的个数sum(right)-sum(left-1)。有个难点在于如何dfs,因为一个根节
2015-08-06 10:48:08 619 1
原创 hdu5328(不用dp)
这题咋一看会想到dp,但可以不用,可以开辟两个数组,一个数组表示给出的数组里面,相邻两数的差,另一个数组表示相邻两数的比值。然后只需要遍历这两个数组,找出连续相等的最大长度就行,这里还需要特殊考虑n为1的情况#include #include#include#includeusing namespace std;const int MAX=1e6+10;int T,n,a[MAX],b
2015-08-03 13:05:45 373 2
原创 hdu4417(单纯裸划分树)
来源:http://acm.hdu.edu.cn/showproblem.php?pid=4417题意:给一些数,数中有重复的。还有一些询问,问的是[L,R] 区间内有多少个数小于h,有多次询问。一般的方法肯定很容易超时,那这题就想到了划分树,接触过划分树的同学可能都知道用划分树查询区间内排列第k的数,这里只需把查询换为数值为k。用一个num表示小于等于k的数的个数,当k大
2015-08-03 12:54:35 441 2
原创 hdu5334
比赛时想了3小时,到4点有了思路,结果当时体力不够,思维不够严谨,一直wa。网上看大神题解后,发现大神的思维不是我等渣渣能想出来的,故此又重新拾起自己的思维,ac。遇到这种题目,大家一定要想,这种题目一定是有规律的,大家要善于发现规律。对此题,我一开始是枚举前10几个数,结果到第4的时候发现,4只能由1111这种四个一样数才能得出,故此思考数列中有相同的数会使子串个数减少某些固定的数。后来发现
2015-08-01 15:30:04 551 4
原创 hdu5316区间最值问题(附带题目意思详解) 一次ac
T组数据N个数字,M次操作op=0:找出L-R区间内的最大‘值’op=1:把a位置的数字换成b对最大‘值’的定义:取区间内的最大子序列,需要保证子序列的下标为奇偶交替的用线段树分别记录每个区间的.........s1.......奇数位开始,奇数位结束.........s2.......奇数位开始,偶数为结束.........s3
2015-07-29 19:58:15 914 3
原创 poj3264
题目大意:给一列数,给一些询问,问[a,b]内最大值-最小值是多少分析:比较简单的题目。以点建树,建树时,遇到叶子节点则读入,max = min = 读入值,否则用左右儿子的最大最小值来更新当前节点的最大最小值。查询就不多说了很裸的线段树,一次ac#include #include#includeusing namespace std;const int MAX=50010;
2015-07-16 20:02:14 467 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人