随笔分类 -  算法

摘要:#include #include #include using namespace std; vector heap{ 3,1,2,5,7,8,4,9,6 }; void Max_Heapify(vector &heap, int root, int tail) { int FatherNode = root, &p = FatherNode; int lch = p *... 阅读全文
posted @ 2017-03-14 21:00 codinRay 阅读(211) 评论(0) 推荐(0)
摘要:void solve(int start,int end,int root) { // 前序和中序 -> 后序 // 每次调用solve()函数,传入pre-order的start,end,root if (start > end) // 递归边界 return; int i = start; while (i 前序 // 每次调用sol... 阅读全文
posted @ 2017-03-12 20:19 codinRay 阅读(330) 评论(0) 推荐(0)
摘要:int pre[MAXN]; int Find(int pos) { if (pre[pos] == pos) // pre是自己,代表为root节点 return pos; int r = pos; while (r != pre[r]) // 找到节点pos的root r = pre[r]; // 路径压缩 ... 阅读全文
posted @ 2017-03-09 19:46 codinRay 阅读(96) 评论(0) 推荐(0)
摘要:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 阅读全文
posted @ 2017-03-06 21:27 codinRay 阅读(244) 评论(0) 推荐(0)
摘要:输入一个m×n的地图(含有0和1两种状态,1不能走),起始点和目标点的坐标,找到最短路。 阅读全文
posted @ 2017-03-03 20:36 codinRay 阅读(345) 评论(0) 推荐(0)
摘要:二分快速幂 阅读全文
posted @ 2017-01-21 17:32 codinRay 阅读(109) 评论(0) 推荐(0)
摘要:求最小公倍数其实就是求最大公约数。为什么呢? 我们可以假想这两个数m和n,假设m和n的最大公约数是a。那么我们可以这样写: m = b * a; n = c * a; 所以m和n的最小公倍数就应该是a*b*c,就是m * n / a,其中m和n是已知的,而a就是那个需要求解的最大公约数。 所以结合辗 阅读全文
posted @ 2016-12-24 15:49 codinRay 阅读(385) 评论(0) 推荐(0)
摘要:之前一直只知道欧几里得辗转相除法,今天学习了一下另外一种、在处理大数时更优秀的算法——Stein 特此记载 1.欧几里得(Euclid)算法 又称辗转相除法,依据定理gcd(a,b)=gcd(b,a%b) 实现过程演示: sample:gcd(15,10)=gcd(10,5)=gcd(5,0)=5 阅读全文
posted @ 2016-12-16 20:30 codinRay 阅读(9748) 评论(0) 推荐(0)
摘要:题目:给出一个正整数n,打印出所有从1~n的素数(即质数); 1.傻瓜解法 这是理所当然的想法,按照素数的定义,除了1和它本身没有其他的因数,就是素数。 这种解法的缺点就是红色标注那里,这种循环规模n稍微大点,运行时间就会特别特别长。 2.普通解法--sqrt(n) 这里循环取到sqrt(n),效率 阅读全文
posted @ 2016-12-07 23:07 codinRay 阅读(8365) 评论(0) 推荐(0)