05 2011 档案

摘要:求一个数组中的最高和次高。 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)
摘要:问题描述: 问题地址:http://poj.org/problem?id=1458 查看两个字符串相同子窜的最长长度。 举例子:Sample Inputabcfbc abfcabprogramming contest abcd mnpSample Output420从这个例子中可以看出用简单的动态规划就可以了。状态转移的式子是if(node1[i-1]==node2[j-1]) { sum[i][j]=sum[i-1][j-1]+1; } else { if(sum[i][j-1]>sum[i-1][j]) sum[i][j]=sum[i][j-1]; else sum[i][j]=su 阅读全文
posted @ 2011-05-17 13:11 gui__li 阅读(225) 评论(0) 推荐(1)
摘要:问题描述:<p> 地址:http://poj.org/problem?id=1163 求从第一层到最后一层的和的最大值。路线是从只能向下面的左面或者后面走。73 88 1 02 7 4 44 5 2 6 5思路:刚开始想用贪心法来算。后头发现这是行不通。还是用枚举加上动态规划的算法解决的。int node[110][110];//来存储每个节点的数字。int sum[110[110]; //来记录从i到j的最大和。最后只需要比较sum[n][1]到sum[n][n]的最大值就可以了。具体代码如下:#include<stdio.h>int main(){ int node 阅读全文
posted @ 2011-05-16 16:39 gui__li 阅读(154) 评论(0) 推荐(0)