摘要: 有没有想过这样的问题,计算机是如何把3维的模型显示到2维的屏幕上?照相机又是如何把3维的世界记录成2维的照片的? 发现了吗?世界被降维了!而投影矩阵( Projection Matrix )就是进行这步降维的关键,它就像是一张二向箔,将3维的世界变成一幅幅壮丽的二维画卷....... 有多种类型的投 阅读全文
posted @ 2016-05-16 09:13 wuminye 阅读(4203) 评论(0) 推荐(1) 编辑
摘要: 做软件开发的programers,大部分都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么还能保证下一段时间系统还能流畅的运行吗?我们还能保证下一个人能看懂我们的存储过程吗?要知道sql语句,我想我们有必要知道sqlserver查询分析器怎么执行我么sql语句的,我么很多人会看执行计划,或者用 profile来监视和调优查询语句或者存储过程慢的原因,但是如果我们知道查询分析器的执行逻辑顺序,下手的时候就胸有成竹,那么下手是不是有把握点呢?查询的逻辑执行顺序FROM ON JOIN WHERE GROUP BY WITH. 阅读全文
posted @ 2014-02-06 23:11 wuminye 阅读(434) 评论(0) 推荐(0) 编辑
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4815【题意】 n个题目,每题有各自的分数,A有50%的概率答对一道题目得到相应分数,B想要在至少P的概率上总分不低于A,问B至少要得到多少分。【分析】 最简单粗暴的做法是算出每个可能得到的总分的概率,原问题可以转化成在概率和=P。 但是计算所有可能的概率的复杂度是O(2n),不能满足我们的需求。细心分析可以发现问题可以分离出重叠子问题:f[i][j]表示前i个题目得到j分数的概率,于是类似背包问题,可以找出递推式: f[i][j]=f[i-1][j]*0.5 (score... 阅读全文
posted @ 2014-02-05 18:26 wuminye 阅读(525) 评论(0) 推荐(0) 编辑
摘要: 链接:http://codeforces.com/problemset/problem/388/B【题意】 给出一个整数K,构造出刚好含有K条从1到2的最短路的图。【分析】 由于是要自己构造图,当然构造的方法很多了,需要考虑简单性和可行性。出于简单考虑,图中从1到2的所有路径都是最短路,为了保证路径长度一样,在构图时就需要分层次,使得每一层的点距离上一层的点的距离都是一个单位。 那么如何使得路径条数刚好为K呢,这里涉及到相邻层次的点的链接方式。比如说每个点和上一层的所有点都有链接,那么这样总的路径数就是每层点的个数乘起来,但是这很难保证乘起来的值刚好是K,于是想到进制数的方法,可以构造出不同底 阅读全文
posted @ 2014-02-05 09:53 wuminye 阅读(619) 评论(0) 推荐(0) 编辑
摘要: 【简介】 解决LCA问题的倍增法是一种基于倍增思想的在线算法。【原理】 原理和同样是使用倍增思想的RMQ-ST 算法类似,比较简单,想清楚后很容易实现。 对于每个节点u , ancestors[u][k] 表示 u 的第2k个祖先是谁。很容易就想到递推式:ancestors[j][i]=ancestors[ancestors[j][i-1]][i-1]; 根据二进制原理,理论上 u 的所有祖先都可以根据ancestors数组多次跳转得到,这样就间接地记录了每个节点的祖先信息。 查询LCA(u,v)的时候: (一)u和v所在的树的层数如果一样,令u'=u。否则需要平衡操作(假设u更深), 阅读全文
posted @ 2014-01-24 14:25 wuminye 阅读(2003) 评论(0) 推荐(0) 编辑
摘要: 【简介】 解决LCA问题的Tarjan算法利用并查集在一次DFS(深度优先遍历)中完成所有询问。换句话说,要所有询问都读入后才开始计算,所以是一种离线的算法。【原理】 先来看这样一个性质:当两个节点(u,v)的最近公共祖先是x时,那么我们可以确定的说,当进行后序遍历的时候,必然先访问完x的所有子树,其中包含u、v,然后才会返回到x所在的节点。这个性质就是我们使用Tarjan算法解决最近公共祖先问题的核心思想。 如上图所示,找出根节点到u得关键路径P ,已遍历的点位于路径P中某个点的子树中,当遍历到u时v已遍历过(u的子树已遍历完),那么v必然存在于子树pk中,此时LCA(u,v)就等于现在v所 阅读全文
posted @ 2014-01-20 16:40 wuminye 阅读(1166) 评论(0) 推荐(0) 编辑
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586【题意】 给出一个N 个和N-1条边的连通图,询问任意两点间的距离。N 3 #include 4 #include 5 #include 6 using namespace std; 7 int n,m; 8 struct edge 9 { 10 int d,v,next; 11 edge(){} 12 edge(int _d,int _v,int _next) 13 { 14 d=_d;v=_v;next=_next; 15 ... 阅读全文
posted @ 2014-01-19 20:37 wuminye 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 【简介】 LCA(T,u,v):在有根树T中,询问一个距离根最远的结点x,使得x同时为结点u、v的祖先。 RMQ(A,i,j):对于线性序列A中,询问区间[i,j]上的最值。见我的博客---RMQ ---- ST(Sparse Table)算法。【LCA算法】 解决LCA问题有多种算法,一种是离线的 Tarjan算法 ,还有在线的倍增法 ,还有就是转换为RMQ问题的在线算法。【LCA转化为RMQ】 (一)对有根树T进行DFS,将遍历到的结点按照顺序记下,我们将得到一个长度为2N – 1的序列,称之为T的欧拉序列F 。 (二)每个结点都在欧拉序列中出现,我们记录结点u在欧拉序列中第一次出现的位. 阅读全文
posted @ 2014-01-19 15:30 wuminye 阅读(710) 评论(1) 推荐(1) 编辑
摘要: 【概述】 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j=n) break; 9 f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);10 } 查询:1 int query(int s,int e) //查询区间[s,e]的最值2 {3 int k=(int)((log(e-s+1.0)/log(2.0)));4 return max(f[s][k],f[e-(1<<k)+1][k]);5 } 阅读全文
posted @ 2014-01-18 10:49 wuminye 阅读(2141) 评论(3) 推荐(0) 编辑
摘要: 在二维平面中,只有点和线,点用两个浮点数数表示,而一条线由两个点确定。 1 const double EPS = 1e-8; //设置精度 2 const double PI = acos(-1.0); //圆周率 3 int sgn(double x) //判断负数 4 { 5 if(fabs(x) operator &(const Line &b)const ;31 };struct Point 该结构不仅可以表示一个点,还可以表示一个以原点为起点的向量。Point Point::operator -(const Point &b)const{ ret... 阅读全文
posted @ 2014-01-06 15:00 wuminye 阅读(530) 评论(0) 推荐(0) 编辑