算法
shazhifeng
这个作者很懒,什么都没留下…
展开
-
二分搜索算法(折半查找)原理以及递归(recuition),迭代(iteration)的两种实现源代码 ...
折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。【基本思想】将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右半部继...2010-03-18 10:34:41 · 322 阅读 · 0 评论 -
蚁群算法ACO(ant colony optimization)的原理以及实现源代码
之前说的算法基本上都比较枯燥的(废话,算法都很枯燥……),这次要介绍的蚁群算法(Ant Colony Algorithm)却是一种源于自然现象的算法,也是一种 meta heuristic,即与具体问题关系不大的优化算法,也就是它是一种用来在图中寻找优化路径的机率型技术。Marco Dorigo于1992年在他的博士论文中引入,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。小小的蚂蚁总是能够...2010-03-18 10:39:55 · 168 阅读 · 0 评论 -
汉诺塔算法的递归与非递归的C以及C++源代码
汉诺塔(又称河内塔)问题其实是印度的一个古老的传说。开天辟地的神勃拉玛(和中国的盘古差不多的神吧)在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。计算结果非常恐怖(移动圆片的次数)184467440737...2010-03-18 10:45:04 · 108 阅读 · 0 评论 -
DES加密标准的说明以及加密/解密函数的实现源代码
面是来自维基的关于DES的说明: 数据加密标准( DES )是一种加密演算法(一种加密信息的方法), 1976年被美国联邦政府的联邦信息处理标准(FIPS)所选中,随后既在国际上广泛流传开来。这个演算法因为包含一些机密设计元素,相关的短密钥长度以及被怀疑内含国家安全局(NSA)的后门而在开始是有争议的,DES因此收到强烈的学院派式的审查,并以此推动了现代的分组密码及其密码分析。这个演算法因为包含一...2010-03-18 10:49:47 · 176 阅读 · 0 评论 -
Stein算法的简单描述以及C++/Java的三种实现源代码
在欧几里德算法的简单描述以及C++与Java的各自实现代码中介绍的欧几里德算法是计算两个数最大公约数的传统算法,无论从理论还是从实际效率上都是很好的。但是却有一个致命的缺陷,这个缺陷在素数比较小的时候一般是感觉不到的,只有在大素数时才会显现出来。 一般实际应用中的整数很少会超过64位(当然现在已经允许128位了),对于这样的整数,计算两个数之间的模是很简单的。对于字长为32位的平台,计算两个不超过...2010-03-18 10:52:58 · 533 阅读 · 0 评论 -
欧几里德算法的简单描述以及C++与Java的各自实现(源代码)
欧几里德算法描述:欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:定理: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)的公约数假设d 是(b,a mod b)的公约数,则...2010-03-18 10:54:49 · 148 阅读 · 0 评论 -
约瑟夫环问题(Josephus)的两种解法(源代码)
算法描述: 有编号从1到N的N个人坐成一圈报数,报到M的人出局,下一位再从1开始, 如此持续,直止剩下一位为止,报告此人的编号X。输入N,M,求出X。下面给出两种解法,前面的是比较常规的解法,比较适合“名门正派”,而后面一种则非常巧妙……注意点:由于当某个人退出圆圈后,报数的工作要从下一个人开始继续,剩下的人仍然是围成一个圆圈的,可以使用循环表,由于退出圆圈的工作对应着表中结点的删除操作,对于...2010-03-18 10:56:03 · 363 阅读 · 0 评论 -
几种经典的Hash算法的实现(源代码)
哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。链表查找的时间效率为O(N),二分法为log2N,B+ Tree为log2N,但Hash链表...2010-03-18 10:59:01 · 295 阅读 · 0 评论