随笔分类 -  算法的一些了解

对一些算法进行一些研究以及了解
摘要:1:先将大数据量大文本的东西粗略的处理一下,大致分一下类,然后再在这个基础上细分,不要一上来就细分。2:数学在计算机里面是很有用的,要多加练习。粗浅的认识为算法。3:sourceinsight是个很好的代码查看器 4:要经常查看自己写的代码,这样可以更好的改进自己的代码水平。 阅读全文
posted @ 2012-08-14 23:01 gui__li 阅读(166) 评论(0) 推荐(0)
摘要:开发一个搜索引擎,要有下载网页,索引,网页质量,网页与关键词的相关性四个方面。 第一个下载网页方面是网络爬虫的问题,是个DFS和BFS的交叉性的问题。 索引是建立颗粒度和快速查找的依据,也是布尔代数的基础。 网页质量是采用了Pagerank算法。民主表决,很多人链接的网页,这个网页的质量就高。 链接数矩阵和等值矩阵不断迭代,然后逼近真正的网页质量,据检测,经过10次之后,大致变化就不大了。 网页和关键词的相关性---采用了TF-IDF的方法,理论为:将关键词拆分,然后拆分的词的频率*权值的和。信息论的依据还有相关的公式。信息量越多,TF-IDF值越大,而在命中的文献中平均出现的次... 阅读全文
posted @ 2012-08-07 23:09 gui__li 阅读(197) 评论(0) 推荐(0)
摘要:数学之美以浅显易懂的方式向我讲述了很多现在前沿性的问题。为我阐释了很多复杂的问题其实很简单,分成几个阶段,然后每个阶段再仔细研究。 从文字和语言vs 数字和信息中两者之间的联系。都是用来记载信息的。用于交流的。 自然语言处理和通信方式的相同,从规则的计算的复杂性然后转到统计规则的必然,然后统计中如何选取更好的模版。 统计语言模型先用大方面介绍了选取概率比较的大的结果,然后是条件概率,并且对概率小于一定阀值的概率事件做平滑处理。 然后接着谈到中文分词,具体到了中文分词中的概率统计。提出了一个词的颗粒性概念。 隐含马尔可夫模型,通信中的一个模型,用到了自然语言处理,这个是从编码到解码的统计概率.. 阅读全文
posted @ 2012-08-05 22:45 gui__li 阅读(218) 评论(0) 推荐(0)
摘要:来自:http://zhidao.baidu.com/question/51730260.htmlRSA算法非常简单,概述如下: 找两素数p和q 取n=p*q 取t=(p-1)*(q-1) 取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1) 取d*e%t==1 这样最终得到三个数: n d e 设消息为数M (M <n) 设c=(M**d)%n就得到了加密后的消息c 设m=(c**e)%n则 m == M,从而完成对c的解密。 注:**表示次方,上面两式中的d和e可以互换。 在对称加密中: n d两个数构成公钥,可以告诉别人; n e两个数构成私钥,e自己保留,不让 阅读全文
posted @ 2012-07-25 14:31 gui__li 阅读(442) 评论(0) 推荐(0)
摘要:http://www.cnblogs.com/tgkx1054/archive/2012/07/24/2607399.html 对于其中的这句话:如果要同时找出最大值和最小值,则比较次数最少并不是2*n-2,而是,我们可以将一对元素比较,然后把较大者于max比较,较小者与min比较,这样就只需要。 3/2*n这个算法是先将奇数位和偶数位的数据比较交换,奇数位保存大数,偶数位保存小数,然后奇数位再比较交换,偶数位再单独比较交换。然后就只需要3/2n 还可以2*logn log为2为底,n的对数 阅读全文
posted @ 2012-07-24 23:53 gui__li 阅读(144) 评论(0) 推荐(0)
摘要:1)确定密钥的宽度 2)随机选择两个不同的素数p和q,他们的宽度是密钥宽度的二分之一。 3) 计算出p和q的乘积n。 4)在2和n的函数之间随机选择一个数e,e必须和n的函数值互素,整数e用做加密密钥(n的函数=(p-1)*(q-1)) 5) 从公式ed恒等于1mod n的函数 中求出解密密钥d。 6)得公钥(e,n),私钥(d,n) 7) 公开公钥,但不公开私钥 8)将明文P(假设p是一个小于n的整数)加密为密文C,计算方法为: c=(p的e次方)mod n 9)将密文C解密为明文P,计算方法为: P=(c的d次方)mod n 然而只... 阅读全文
posted @ 2012-07-23 21:46 gui__li 阅读(377) 评论(0) 推荐(0)
摘要:应该采用选择树,而选择树有胜者树还有败者树,更加常用的是败者树。败者树的第二个节点是次优的节点。第一个节点是全优节点。 图在相册里面。  阅读全文
posted @ 2011-06-08 21:01 gui__li 阅读(221) 评论(0) 推荐(0)
摘要:快速排序: 这个思想不仅可以用于排序,还可以用于求第k个数字。 代码: QuickSort(int*arr , int left,int right) { If(left>=right) Return; Intpivot,i,j; Pivot=left; I=left; J=right; While(i<=j) { While(arr[i]<=a[pivot]&&i<=j)i++; If(i>j) break; While(arr[j]>a[pivot]&&i<=j)j--; If(i>j) break; Swap 阅读全文
posted @ 2011-06-08 20:38 gui__li 阅读(188) 评论(0) 推荐(0)
摘要:先来分析一下o(n*n)的算法:第一种:插入排序:插入排序的时候可以一边比较一边交换。顺便运用了冒泡的思想。代码:For(i=1;i<=n;i++) For(j=I;j>0;j--){If(array[j]>array[j-1]) Swap(array[j],array[j-1]);} 优化算法: 先找i的位置,找的时候就把那些需要往后面移动的就移动了,这个时候是一次赋值操作,所以比较快。 再一步优化:的时候可以用二分查找那个I的位置。二分查找代码: While(left<=right) { Middle=(left+right)/2; If(temp<array 阅读全文
posted @ 2011-06-07 20:38 gui__li 阅读(213) 评论(0) 推荐(0)
摘要:分割数组,使得分开的数组的和差不多。将一个数组分成和差不多的两个数组。数组个数为2n个。 Arr[i][k]=true;的定义是i个元素的和为k的存在。 For(i=1;i<=2*n;i++) { for(k=min(n-1,i-1);k>=0;k--) for(j=sum/2;j>=0;j--) if(j>a[i]&&arr[k-1][j-a[j]==true) arr[k][j]=true; }对于循环。如果两个循环变量没有什么关系,我觉得调换循环的次序应该没有什么问题的。 求两个数字的和为指定的一个数字。 最快的算法是:先对数组进行排序。o(nlg 阅读全文
posted @ 2011-06-03 11:08 gui__li 阅读(198) 评论(0) 推荐(0)
摘要:总的来说是深度遍历。以根为节点建立并查集。比如说求p,v的lca。当访问到p的时候检查v是否已经访问过。如果访问过,那么他们的lca就是v现在所在的并查集里面的元素。如果没有访问到。那么等到v访问到的时候可以操作一下。 充分利用了递归这个操作,所以不必要保存以前的东西,自然而然的就将u里面的所有的子节点子孙节点都和并到一块去了。 这个想了比较长的时间。 这个是伪代码 LCA(u) {Make-Set(u)ancestor[Find-Set(u)]=u对于u的每一个孩子v {LCA(v)Union(u)ancestor[Find-Set(u)]=u}checked[u]=true对于每个(u,. 阅读全文
posted @ 2011-06-02 16:33 gui__li 阅读(289) 评论(0) 推荐(0)
摘要:求一个数组中的最高和次高。 if(h>h1) { h2=h1;h1=h; } else if(h>h2) { h2=h; } 阅读全文
posted @ 2011-05-31 10:13 gui__li 阅读(141) 评论(0) 推荐(0)
摘要:矩阵乘法:最初版。也是最简单明了的版本。 for(i=0;i<n;i++) for(j=0;j<n;j++) for(k=0;k<n;k++) a[i][j]+=a[i][k]*a[k][j]; 稍微的改进: 算法上可以用分治法来进行处理,假设n是2的倍数。将其分成4个小矩阵。这样可以减少乘法的次数,改用加法。算法效率基本稍微提高到。logn*(v的3次方) 还有一种改进是用先求的一些数字,用过这些数字组合来进行减少乘法加法的个数。进而达到减少算法时间的目的。 阅读全文
posted @ 2011-05-19 09:57 gui__li 阅读(259) 评论(0) 推荐(0)
摘要:推荐算法里面最为流行的就是协同过滤算法。 先说一下协同过滤算法的定义:根据用户过去对物品的评价。来寻找与用户兴趣相同的用户组。然后由这些用户组的评价比较高的一些东西来向用户做出一定的推荐。 优点:即时的实时的获取最新的数据。矩阵比较稀疏的时候比较困难。算法的精准度会有所下降。 缺点:仅仅考虑了评分矩阵。有点局限。 应用背景:因为现在大量的用户愿意提供自己的姓名,年龄,性别,教育背景等信息。这是协同过滤存在的基础吧。还有就是用户要多评价。所以很多系统现在做的很多措施都是鼓励用户去评价。 协同过滤算法: 首先它会有个评分矩阵:m*n.m代表用户个数。n代表商品的数目 结合了一下两种论文. 阅读全文
posted @ 2011-05-17 20:45 gui__li 阅读(1083) 评论(0) 推荐(0)