![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计与分析
文章平均质量分 77
小逸
这个作者很懒,什么都没留下…
展开
-
【无限长度】【绝对精度】的大数运算方法
说到加减乘除,那应该是计算机的基本运算了,计算机之所以叫“计算机”就是因为拥有这些运算能力。但是当任何小的问题扩大化,都会成为一个大问题。因为计算机硬件的天然计算能力是限定位数的。例如32位CPU的运算能力就是2的32次方以内,64位CPU就是2的64次方以内。这在大多数的时候都原创 2011-08-15 18:50:09 · 3382 阅读 · 2 评论 -
【算法分析与设计】最小生成树问题
最小生成树问题,主要的解法有两种,一种是Prim算法,不优化的时候是O(n^2)的时间复杂度,一般在稠密图的时候考虑使用。另一种是Kruskal算法,使用幷查集使用的复杂度是O(eloge),一般在稀松图的时候比较有利,所以一般Prim算法采用邻接矩阵,Kruskal一般采用邻接表。朴素的Prim算法(未使用堆优化)思路是:closedge 记录各节点到当前生成树的距离(到这棵生成树的最短原创 2012-02-11 12:37:24 · 2845 阅读 · 0 评论 -
【算法分析与设计】全排列问题
给出一个字符串“ABCDEF”,输出它的全排列,这是一个基础的数学问题,目前已知的比较好的算法是基于交换的。inline void swap(char &a,char &b){ char t=a; a=b; b=t;}void Perm(string arr,int n,int k=0)//一共n个元素,现在排到第k个了{ if(k==n)/*所有元素都已经排完,输出结果*/ {原创 2012-02-18 09:39:13 · 2545 阅读 · 0 评论 -
【算法分析与设计】广度优先搜索
图论的广度优先搜索经常用于对解空间的搜索,尤其是求某个解,且这个解具有最短步骤的时候,广度优先搜索是极佳的选择。1.首先应该注意的是解空间的组织,搜索算法的解通常被安排成多个步骤,每个步骤一条边,而从起点到终点的一条路径就构成了一个解。2.解空间树的存储问题,由于解空间的树,往往并不是二叉树,所以左右孩子的组织方式是不太适合的,所以一般采用记录父结点的方式,那么从终点到起点就一定可以找到一原创 2012-02-22 21:12:19 · 1325 阅读 · 0 评论 -
【算法设计与分析】最短路径的算法
暂不讨论人工智能的启发式算法,那么最短路径算法主要有Dijkstra、Bellman-Ford、Floyd,前两者是单源最短路径,Floyd是全源最短路径,当然单源算法也可以通过枚举实现全源算法。而近来颇为流行的SPFA算法应该算是Bellman-Ford算法的队列实现,三者主要区别如下:Dijkstra 算法的特点每次选择的边一定是最终最短路径上的边不允许出现负边原创 2012-02-02 22:21:28 · 4184 阅读 · 0 评论 -
【算法设计与分析】经典代码赏析【1】
什么样的代码才是好的代码?这是一个将永远继续下去的话题。就如艺术品从来都不仅仅是艺术,艺术级的代码从来都不只是技术问题。什么样的代码才是称得上“艺术级”的代码?没有标准答案。但也许如下几条或许能得到大多数人的认同:(1)简洁的,但简洁的背后蕴含深刻的道理。这里的简洁是指最后的呈现方式是简洁的,但简洁绝不仅仅是简单,而是一种将千头万绪料理得整整齐齐,清爽直接的力量。(2)复杂的,这貌似是和简原创 2011-08-22 23:52:45 · 5159 阅读 · 4 评论 -
【算法设计与分析】三个博弈论算法分析
主要讨论三个比较常见的博弈游戏Bash Game,Nim Game和Wythoff Game,较为领人惊叹的是,他们最后都是通过数论或者自然数性质完美解决:Bash Game:同余理论Nim Game:异或理论Wythoff Game:黄金分割(1)Bash Game:一堆n个物品,两人轮流取,每次取1至m个,最后取完者胜 比如10个物品,原创 2012-02-01 13:14:31 · 14148 阅读 · 1 评论 -
【算法设计与分析】最大子段和问题
最大子段和问题的简洁描述是:对于给定序列[ x1,x2,x3...]寻找它的某个连续子段,使得其和最大。如{ -1,5,-2,1,-7,-4,2,3,-1,2 }最大子段是{ 2,3,-1,2 }其和为6。这个问题可以从枚举、分治、动态规划,贪心这几个角度来解。(1)枚举解法思路:对于数组a[n],其连续的子段有 以a[0]开始的 , { a[0] }, { a[0],原创 2012-01-29 22:08:11 · 5484 阅读 · 0 评论 -
【算法设计与分析】全源最短路径的Floyd算法
首先给出Floyd算法的实现代码const int vexnum = 5;const int maxval = 65536;/*图中表示不可达的长度*/void Floyd(int G[][vexnum],int dist[][vexnum],int path[][vexnum]){ for(int i=0; i<vexnum; ++i) for(int j=0; j<vex原创 2012-01-18 22:19:11 · 1973 阅读 · 0 评论 -
【算法设计与分析】5个数7次比较排序的算法
找到最快的算法,一直是计算机界的目标之一,而排序就是其中最基本的算法。什么样的排序才是最快的呢?1.最少的比较次数,算法理论证明n个数排序,如果是基于比较的算法,至少需要 ㏒(n!) 向上取整数。下面给出小数目下,最少比较次数: n12345678㏒(n!)01357101316原创 2011-08-08 10:42:50 · 9572 阅读 · 6 评论 -
【算法分析与设计】——八皇后问题的详解
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。 这个问题简化描述就是:在8x8的棋盘上放8颗子,要求它们【不原创 2011-08-27 14:23:45 · 14687 阅读 · 5 评论 -
从斐波那契数列简单谈程序的几个层次
写一个生成斐波那契数列的程序,初学计算机迟早会写那么一次,至少看过别人的代码一次。一、小鸟层次int fibonacci_a(int n){ if( n== 0 || n==1 ) return n; else return fibonacci_a(n-1) + fibonacci_a(n-2);} 其实我相信100个程序员里面有80个能写出这样一个程序。原创 2012-06-14 21:35:39 · 1836 阅读 · 0 评论