算法乱谈
aladdin_leon
这个作者很懒,什么都没留下…
展开
-
埃拉托色尼筛算法
还记得当时学习数据结构时老师留过一道作业题:编写程序打印出小于命令行参数所给定的整数的所有素数。当时我就是简单的利用穷举法实现的,呵呵,就是一个一个地进行判断。后来作业交了上去,也就不了了之了。老师并没有进行讲解,今天突然看到了应用数组解决这一问题的埃拉托色尼筛算法,恩!感觉很优美,省去了穷举法的大量的除法运算,下面我们就来看看其中的奥秘。 首先我再明确一下素数的概念:一个正...2006-12-26 14:28:22 · 388 阅读 · 0 评论 -
利用动态规划解决兑换问题
问题是这样的:某个国家一共发行了a1,a2,a3,...,ak种不同面值的钞票,为了方便起见,假设a1,a2,a3,...ak依次增大。现在手上有的钱数为n,请问要如何把兑换成a1,a2,a3,...,ak这些钞票,使得所用的钞票的量为最少。这个问题看上去很简单,举一个例子,如果有1元,5元,10元3种钞票,而要兑换107元,于是就有a1=1,a2=5,a3=10,n=107。那么我们...2006-12-26 15:13:50 · 234 阅读 · 0 评论 -
单循环链表解决约瑟夫环问题
这几天为了准备笔试忙着复习C语言,决定把当时学C时的一些经典问题再温习一下,当时啊,学的稀里糊涂的,呵呵,现在回头来仔细写一写代码,就算是纪念当时的个性十足的赵老师了吧! 约瑟夫问题的:编号为1,2,....,N的N个人按顺时针方向围坐一圈,每人持有一个密码(正整数),一开始任选一个正整数作为报数上限值M,从第一个人开始按顺时针方向自1开始顺序报数,报到M时停止报数。报M的人出列...2006-12-26 15:47:38 · 205 阅读 · 0 评论 -
Floyd最短路径算法
在图论中经常会遇到这样的问题,在一个有向图里,求出任意两个节点之间的最短距离。我们在离散数学、数据结构课上都遇到过这个问题,在计算机网络里介绍网络层的时候好像也遇到过这个问题,记不请了... 但是书本上一律采取的是Dijkstra算法,通过Dijkstra算法可以求出单源最短路径,然后逐个节点利用Dijkstra算法就可以了。不过在这里想换换口味,采取Robert Floyd提出的算法来...2006-12-26 16:35:38 · 212 阅读 · 0 评论 -
排序的故事--SHELL排序
SHELL是一种不需要辅助空间不稳定的排序法,在传统的教科书里面,SHELL排序法都是直接引用D.L.Shell在他1969年的原著《A High-Speed Sorting Procedure》中的办法:再要排序的数组中先把间隔为n/2的元素排好,然后把间隔为n/(2^2)的元素排好,再排间隔为n/(2^3),n/(2^4),... ,4,2,1的元素,最后就是一个依顺序排序好的结果。...2006-12-26 16:59:07 · 156 阅读 · 0 评论 -
排序的故事---插入排序
说起插入排序,其实它的工作原理十分简单,举例来说一下,按照从小到大顺序排列下面的一组数: 9 5 7 3 4 从第二个数起,把它之后的部分看成是未排列的部分,第一个元素是已排序的部分,然后依次把未排序的部分的第一个元素取出,插入到已排好的部分的正确位置,于是已排好部分的元素个数加一,未排好部分元素个数减一。一...2006-12-26 17:13:05 · 258 阅读 · 0 评论 -
关于数值自乘
如果n与m是正整数,那么m^n就是把m连乘n次,用到了n次乘法运算,这是一个很没有效率的算法,那么我们来进行一下改进。主要思想就是减少乘法的运算次数。 关键所在就是下面的定义式: 当n=0时 m^n=1 当n为偶数时 m^n=(m^k)^2 当n为奇数时 m^n=m*(...2006-12-26 19:40:37 · 483 阅读 · 0 评论