
算法
文章平均质量分 82
ygqwan
这个作者很懒,什么都没留下…
展开
-
nyoj91 阶乘之和
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=91 不说这道题怎么难了,我是明明知道算法,但是我用代码实现时真的感觉好困难,特写此博客。 我自己写的代码: #includemain(){ int i,j,s=1,a[15],m,f; for(i=1;i<10;i++) { s=i*s; a[i]=s;原创 2012-10-20 21:03:12 · 974 阅读 · 0 评论 -
深搜之回溯法总结
回溯法是个好东西, 当自己对一个问题没有任何思路的时候就可以用回溯法, 虽然效率是一个严重的问题, 但是却能给问题一个形象的解释, 或者可以从回溯法想到一个不错的算法也不一定当遇到一个可以用到回溯法的时候需要按照如下步骤进行:1. 确定问题的一个解空间树, 这个解空间树至少包含一个你需要的那个解, 否则这个树就完全没有意义了2. 组织好这棵树, 弄明白这棵树的每一个节点代表什么原创 2013-11-10 22:04:55 · 2686 阅读 · 0 评论 -
基于用户的协作性过滤推荐系统(找出相似的电影)
#!/usr/bin/env python #coding=GBKimport chardetfrom math import sqrt #电影打分, ltl对a电影打了4.3分.....critics = {'ltl':{'a':4.3, 'b': 3.5, 'c': 4.7} ,'oyl':{'a': 4.3, 'b': 3.5, 'd': 3.0, '原创 2013-09-30 23:52:46 · 1665 阅读 · 0 评论 -
聚类算法反应人们想要的物品(tanimoto相关度)
也就是tanimoto相关度能够很好的解决01关系, 也就是是否关系, 比如是否看过某部电影; 而皮尔逊相关度能够很好的解决一些用程度衡量的, 比如为某部电影打分就是程度只是把距离函数改掉了:#coding:utf-8import osimport sysimport chardetfrom math import sqrtfrom PIL import Image, Ima原创 2013-10-04 22:03:13 · 1347 阅读 · 0 评论 -
Poj1149 PIGS (经典网络流)
顾客买猪问题建图的方法:当第i个猪圈第顾客K(不是每一个顾客都去打开每一个猪圈)一次被打开的时候, 就从超级源点连一条到顾客K的边, 权值为猪圈i里面猪的数量当第i个猪圈不是是第一次被打开的时候, 那么就将上一个打开这个猪圈的人连到当前顾客, 权值为正无穷将所有顾客都连一一条边倒超级汇点, 权值是顾客想买猪的数量//SPA#include #includ原创 2013-09-25 22:52:54 · 756 阅读 · 0 评论 -
Poj 3281 最大流入门
就是比二分图匹配多一个, 把牛放中间, 食物和饮料放两边, 然后就是用一个牛拷贝一份, 这样防止多分牛奶或者食物流到同一只牛的地方, 然后每一条边的权值是1//SPA#include #include #include #include #define CLR(arr, val) memset(arr, val, sizeof(arr))#pragma w原创 2013-09-25 20:39:43 · 833 阅读 · 0 评论 -
hdu3549 flow problem
第一次做网络流, 纪念一小下吧邻接矩阵表示:#include #include #include #include #pragma warning(disable:4996)using namespace std;#define CLR(arr, v) memset(arr, v, sizeof(arr))const int M = 20;int map[M原创 2013-09-24 09:33:32 · 834 阅读 · 0 评论 -
hdu2647 Reward(拓扑排序)
老板要给很多员工发奖金, 但是部分员工有个虚伪心态, 认为自己的奖金必须比某些人高才心理平衡输入若干个关系a ba cc b意味着a 的工资必须比b的工资高 同时a 的工资比c高; c的工资比b高当出现环的时候输出-1思路: 反向建图, 然后top排序分层次; 第一次的工资为888(最低), 第二层的工资 + 1, 后面一样#includ原创 2013-09-19 09:35:09 · 2377 阅读 · 0 评论 -
聚类算法之K-均值聚类
先看一张图这个算法思路很简单, 就是最开始的时候随便定 k 个点, 然后遍历每一个原图的点, 使得每一个点都归属与那k个点中的一个, 然后更新那k个点的位置(一般是中点)这个算法是解决当数据太多的时候层次聚类的算法太慢而设计的, 别的优点我就不知道了, 这个算法还可以调节k的大小, 比较方便, 属于人为干预性的, 而层次聚类就是属于自动型的代码中用到了上一篇文章所提供的原创 2013-10-04 19:58:44 · 1316 阅读 · 0 评论 -
聚类算法之层次聚类
分级聚类就是一棵树加入我们有如下一张图那么通过聚类之后形成一颗如下的树:现在就分好了级,而且还能看出距离关系, 很明显ab之间的距离比de之间的距离要短import osimport sysimport chardetfrom math import sqrtfrom PIL import Image, ImageDrawdef re原创 2013-10-04 15:02:03 · 1847 阅读 · 1 评论 -
基于用户的协作性过滤推荐系统(为用户推荐影片)
#!/usr/bin/env python #coding=GBKimport chardetfrom math import sqrt #电影打分, ltl对a电影打了4.3分.....critics = {'ltl':{'a':4.3, 'b': 3.5, 'c': 4.7} ,'oyl':{'a': 4.3, 'b': 3.5, 'd': 3.0}原创 2013-09-30 23:29:07 · 1349 阅读 · 0 评论 -
基于物品的协作性过滤推荐系统(为用户推荐影片)
前面的两篇是基于用户的推荐, 但是当物品很多的时候就显得很慢了, 所以就有了基于物品的推荐, 好处就是提前算好任何两件物品的相似度, 这样就可以节省大量的运算(只需要定期更新物品之间的关系)#!/usr/bin/env python #coding=GBKimport chardetfrom math import sqrt import urllibimport pyd原创 2013-10-01 13:11:06 · 1283 阅读 · 0 评论 -
hdu4720 三角形的最小圆覆盖
求一个三角形的最小圆覆盖两种情况:1. 是锐角及直角三角形, 那么这个圆就是外接圆2. 是钝角三角形, 那么这个圆的直径是这个最长边的中点double getDis(Point a, Point b){ return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));}//////////////原创 2013-09-11 19:47:41 · 2692 阅读 · 0 评论 -
左旋转字符串(字符串)
左旋转字符串(字符串)题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。思路: 由于两个要求,导致编码很麻烦了, 思路就是成段的和相邻的字符交换abcdef 2那么就用ab 和 cd交换变成 cdabef原创 2013-08-27 00:41:45 · 876 阅读 · 0 评论 -
快速排序 + 前k小数
找到一个中间的数字9;现在做的就是使左边所有的数字不大于9,右边所有的数字都不小于9 1. 那么在左边找到第一个比9大的数字,把他取出来并放到托管所1里面(意味着取数的地方留下了一个坑,这样比较形象),然后在右边找到第一个比9小的数字,把他放到托管所2里面(意味着取数的地方留下了一个坑);2. 将托管所里面的两个数字交换,这样就达到了左边的那个坑的数字比9(标准)小,右边那原创 2012-11-26 15:54:16 · 967 阅读 · 0 评论 -
hdu 2159 fate(二维完全背包)
题意是中文,不解释了,注意这个是完全背包就行了,还有就是注意初始化,还有就是用需要降维的,顺序是正序循环,和完全的01背包类似,但是我不知道怎么用三维的去做,有谁能够帮我一下呢?#include #include #include #include #include using namespace std;const int MAX = 105;#define max(a,b原创 2013-05-02 23:49:27 · 715 阅读 · 0 评论 -
二分查找
#include #include #include #include using namespace std;const int MAX =110;int yao[MAX];int erfen1(int left,int right,int x) //二分递归实现 { if(left>right) return -1; int middle=(left+right)/原创 2013-03-16 02:25:45 · 850 阅读 · 0 评论 -
用快速排序找中位数
这个很好理解, 就像找前K个数一样, 这个就像找前n/2个数, 不过这里说只是要中位数就没有必要找完了, 于是就可以大规模的剪枝;剪枝方法就是递归的时候对不可能有中位数的区间就直接减掉, 这个可是很大的一个剪枝, 效率急速上升#include #include #include using namespace std;const int mmax = 10000001;int a[原创 2013-12-20 10:39:03 · 8906 阅读 · 3 评论