算法
zhaol92
这个作者很懒,什么都没留下…
展开
-
欧几里德算法
在《看数据结构与算法分析》一书时,看到了求最大公因数(Gcd)的算法——欧几里德算法,查询资料了解到此算法的原理如下:首先,该算法依赖一个重要的定理:gcd (a,b) = gcd ( b, a mod b)。此方法证明如下:a可以表示成a = kb + r,则r = a mod b假设d是a,b的一个公约数,则有d|a,d|b,而r = a - kb,因此d|r因此d也是(b,a mod b原创 2015-03-26 13:39:11 · 411 阅读 · 0 评论 -
大数相加算法
原理很简单,就是采用数组的形式保存每一位,然后相加(注意处理进位,以及输出结果的时候从非0开始输出)。具体代码如下(假设加数最大为100位的数字):#include <stdio.h>#include <string.h>#define M 101int add(char *str1,char *str2,char *sum);int main() { char str1[M],str2[原创 2015-03-31 22:07:57 · 587 阅读 · 0 评论 -
约瑟夫问题
问题来历(摘自百度百科):据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人原创 2015-04-27 21:03:20 · 492 阅读 · 0 评论 -
邻接矩阵的深度优先搜索
深度优先搜索遍历类似于树的先根遍历,是树的先根遍历的推广。 假设初始状态图中所有顶点未曾被访问,则深度优先搜索可从图中某个顶点V出发,访问此顶点,然后一次从V的未被访问的邻接点出发深度优先搜索遍历,直至图中所有和v有路径想通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至所有顶点都被访问为止。 有大神看到这个程序,请帮忙讲解下程序标注处的问原创 2015-04-27 22:25:02 · 1352 阅读 · 0 评论 -
邻接矩阵的广度优先搜索
广度优先搜索遍历类似于树的按层次遍历的过程。操作步骤: 假设从图中某顶点v出发,在访问了v之后一次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发一次访问他们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻结点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为起始点,,重复上述过程,直至所有顶点都被访问到为原创 2015-04-28 22:11:19 · 2251 阅读 · 0 评论 -
堆排序
一般的教科书上在heapsort函数构建堆的过程中写的是for(i = N / 2;i >= 0; i--) { PercDown(A, i, n);}实际上这个有丁点问题,数组是从下标0开始的,因此下标为i的结点的双亲为(i - 1) / 2;所以最后一个又孩子的结点的下标为(N - 1) / 2,读者可以亲自实验,因此应修正为:for(i = (N - 1) / 2;i >= 0; i原创 2015-05-05 22:54:58 · 568 阅读 · 0 评论 -
2015阿里研发实习 附加题
题目3:分布式系统中的RPC请求经常出现乱序的情况。 写一个算法来将一个乱序的序列保序输出。例如,假设起始序号是1,对于(1, 2, 5, 8, 10, 4, 3, 6, 9, 7)这个序列,输出是: 1 2 3, 4, 5 6 7, 8, 9, 10上述例子中,3到来的时候会发现4,5已经在了。因此将已经满足顺序的整个序列(3, 4, 5)输出为一行。要求: 1. 写一个高效的算法完转载 2015-08-21 09:52:14 · 357 阅读 · 0 评论 -
详解bitmap算法
转载出处:http://www.cnblogs.com/huangxincheng/archive/2012/12/06/2804756.html http://blog.csdn.net/hackerwin7/article/details/17585257 本文为两篇文章的综合版,方便理解! 在所有具有性能优化的数据结构中,我想大家使用最多的就是hash表,是的,在具有定位查找上具有O(1转载 2015-08-21 13:59:56 · 596 阅读 · 0 评论