常用算法分析
文章平均质量分 76
QiaoRuoZhuo
这个作者很懒,什么都没留下…
展开
-
算法进化历程之“水壶问题”
《算法导论》中提到的经典水壶问题。采用了三个不同的版本来实现,喜欢快速排序及其变例的朋友应该会喜欢。原创 2014-10-25 18:05:29 · 2852 阅读 · 0 评论 -
稀疏矩阵的三元组顺序表存储表示及基本操作
/*Name: 稀疏矩阵的三元组顺序表存储表示及各种 Copyright: Author: 巧若拙 Date: 27-10-14 21:28Description: ------------------------------------------------------------------------------在实际应用中,我们经常碰到这样一类矩阵,它们的非零原创 2014-10-27 21:32:39 · 24997 阅读 · 3 评论 -
稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结
详细介绍了三元组存储稀疏矩阵的快速转置算法,重点介绍矩阵乘法的三种不同实现,尤其最后一种快速乘法,先把其中一个矩阵转置,再各行对应元素相乘,思想新颖,代码简洁,值得一看。原创 2014-10-27 21:24:54 · 11351 阅读 · 4 评论 -
稀疏矩阵的十字链表存储表示
除了用三元组顺序表来存储压缩矩阵,我们还可以用链表结构来存储,实际上后者应用更广泛,因为当非零元素的数目较大时,三元组的时间复杂度实在太高。链表结构中最常见的是十字链表,在十字链表中,稀疏矩阵每一行用一个带头结点的循环链表表示,每一列也用一个带头结点的循环链表表示。在这个结构中,除头结点外,每个结点都代表矩阵中的一个非零元素,它由5个域组成:行域(row),列域(col),数据域(data),向下域(down)和向右域(right)。原创 2014-10-29 21:35:49 · 3822 阅读 · 0 评论 -
杭州电子科技大学Online Judge 之 “漂浮的气球(ID1004)”解题报告
漂浮的气球比赛又开始了!最刺激的莫过于看着气球徐徐升起。告诉你一个秘密,法官们最乐于猜测哪种颜色的气球最受欢迎。当比赛结束时,他们要计算每种颜色的气球数量,并选出数量最多的气球颜色。今年,他们打算把这有趣的工作交给你。原创 2014-11-03 21:46:42 · 3134 阅读 · 0 评论 -
拓扑排序 详解 + 并查集 详解 + 最小生成树(MST)详解
拓扑排序详解 +并查集详解 + 最小生成树(MST)详解【普利姆算法 +优先队列优化 & 克鲁斯卡尔算法】 本人QQ :2319411771 邮箱 : cyb19950118@163.com 若您发现本文有什么错误,请联系我,我会及时改正的,谢谢您的合作! 本文为原创文章,转载请注明出处 本文链接 :http://www.cnblo转载 2014-11-26 13:55:20 · 1075 阅读 · 0 评论 -
Prime算法求最小生成树 (邻接矩阵)
实现了 Prime算法求最小生成树 (邻接矩阵)的普通算法和最小堆优化算法。原创 2014-11-26 14:03:20 · 3380 阅读 · 0 评论 -
拓扑排序之变量序列代码
假设有n个变量(1<=n<=26,变量名用单个小写字母表示),还有m个二元组(u,v),分别表示变量u小于v。那么,所有变量从小到大排列起来应该是什么样子的呢? 例如有4个变量a,b,c,d,若以知a<b,c<b,d<c,则这4个变量的排序可能是a<d<c<b。尽管还有可能其他的可能,你只需找出其中的一个即可。原创 2014-11-17 20:24:50 · 1100 阅读 · 0 评论 -
有序链表的合并
有序链表的合并是单链表的基本操作之一,本文分别用递归和非递归两种方式实现两个有序链表(不含头结点)的合并。原创 2014-11-22 18:11:43 · 1058 阅读 · 1 评论 -
Prime算法求最小生成树 (邻接表)
实现了 Prime算法求最小生成树 (邻接表)的普通算法和最小堆优化算法。原创 2014-11-26 18:36:42 · 2320 阅读 · 0 评论 -
迷宫寻址中深度优先搜索的递归和非递归算法比较
本文只探究迷宫寻址中深度优先搜索的递归和非递归算法比较,其他相关代码详见《迷宫问题(巧若拙)》http://blog.csdn.net/qiaoruozhuo/article/details/41020745原创 2014-11-12 15:52:20 · 2012 阅读 · 0 评论 -
高精度浮点数运算
本程序实现了高精度浮点数的加法,减法,乘法,乘方和除法运算,有效数字精确到MAX。 为了便于进位,本程序采用了较为独特的数据结构,即把浮点数分成整数和小数部分,分别存储在两个不同的数组中。其中整数部分数字存储在ValInt[MAX-lenInt...MAX) ,小数部分数字存储在ValDec[1...lenDec],ValDec[0]用来存储进位或借位。这样在计算中补齐0的时候不需要移动数组元素,只需移动下标即可,大大提升了效率。原创 2014-11-08 10:13:20 · 6405 阅读 · 2 评论 -
一起来算圆周率(转载)
一起来算圆周率自古计算圆周率是数学界一项流行运动,各大数学家争相破记录以名垂青史。想象有人为圆周率15年如一日地算,算的不是圆周率而是寂寞啊!自有圆周率,计算比的是数学;后有现代数学,计算比的是寂寞;自从有了计算机,计算变成程序员们(另一种)练手的健康活动:锻炼编程技术之余可比肩历史伟人,看官也来一发吧!不懂数学没关系,计算圆周率并不需要多少数学知识,你需要的只是一些编程基础、一点数据结构转载 2014-11-07 13:25:26 · 1653 阅读 · 0 评论 -
初探圆周率算法(转载)
最近两天在看圆周率的算法,网上流传这么一个经典的算法, 1 #include stdio.h > 2 long a = 10000 ,b = 0 ,c = 2800 ,d,e,f[ 2801 ],g; 3 void main() 4 { 5 printf( “ %d “ ,b); 6 for (;b != c;)转载 2014-11-07 13:21:55 · 802 阅读 · 0 评论 -
算法进化历程之“根据二叉树的先序和中序序列输出后序序列”
通过对一个作业“根据二叉树的先序和中序序列输出后序序列”的思考,详细分析了不断改进算法的过程。其中通过移动指针确定被处理序列段边界的方法确实让人感觉到算法之美。原创 2014-10-08 22:50:54 · 1772 阅读 · 1 评论 -
向量旋转算法集锦(转载)
/* Name: 向量旋转算法集锦 Copyright: 始发于goal00001111的专栏;允许自由转载,但必须注明作者和出处 Author: goal00001111 Date: 28-12-08 23:28 Description: 向量旋转算法:将具有n个元素的向量a向左旋转r个位置。 例如 :将字符串"abcdefghij"旋转成"defg转载 2014-10-21 09:15:03 · 759 阅读 · 0 评论 -
(转载)一种简单而有趣的数据结构——并查集
一种简单而有趣的数据结构——并查集作者:goal00001111(高粱) 一个秘密生物武器落到某地区,导致当地村民丧失部分记忆,只认得自己最熟悉的人,而忘记自己是哪个村子的人了。大家汇集到一个广场,寻找自己同村的亲人。很不幸你就是其中的一员,记忆中只认得你的爸爸,妈妈还有妹妹了,然后爸爸又认出了叔叔,叔叔找到了婶婶,这样你们的家庭成员就逐渐扩大起来。 寻亲工作仍在继续,转载 2014-09-29 20:20:12 · 1301 阅读 · 0 评论 -
赫夫曼编码(优先队列实现)
采用优先队列把一个普通线性表改造成赫夫曼树,再进行赫夫曼编码,得到一个同时记录了明文和对应编码的密码本。使用优先队列(最小堆)构造赫夫曼树是一种高效的方法,比每次都遍历整个线性表要快很多。我在构造密码本时确保密码本数组递增排序,这样每次插入新结点时可以折半查找插入,效率较高。有序的密码本在把明文编码成密文时也可以大大提高查找效率。原创 2014-09-28 12:25:39 · 1549 阅读 · 0 评论 -
迷宫问题
分别实现了广度优先搜索和深度优先搜索最短路径算法,还给出了深度优先搜索路径(非最短路径)的递归和非递归两种算法。 地图的设计可选择机器随机设计和人工设计,还可以进行人工修改地图。原创 2014-11-11 22:37:33 · 1183 阅读 · 0 评论 -
图的割点(邻接矩阵实现)
在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。求割点与桥的算法是R.Tarjan发明的,本文用邻接矩阵存储图的信息,实现了递归和非递归两种算法。 感觉非递归算法或许有更好的表达,但一时想不出来,请大牛指点,谢谢!原创 2014-11-21 21:11:01 · 1568 阅读 · 0 评论 -
浅议“删除向量(数组)中多余元素”的基本操作及其优化
浅议“删除向量(数组)中多余元素”的基本操作及其优化巧若拙 向量(数组)是一种紧凑的数据结构,向量的各种基本操作代码简单,容易理解,但由于在执行“插入”和“删除”操作时,需要移动大量元素,尤其在删除多个元素时,可能会产生大量重复移动,效率低下。本文以“删除一个有序向量中多余的值相同的元素”为例,分析“删除向量中多余元素”的基本操作及其优化方法。一,基本思想:该算法的基本思想原创 2014-09-09 09:31:18 · 1818 阅读 · 0 评论 -
根据先中序序列或后中序序列确定二叉树
根据后中序序列生成二叉树:从后序序列中找到二叉树(或者子树)的根结点,然后在中序序列找到该根结点,根结点将中序序列分成左右两部分,左边为左子树,右边为右子树。根据中序序列确定左子树的长度,确定左子树中最右下根结点在后序序列中的位置,从而可以确定左右子树在后中序序列中的范围,然后递归的生成左右子树。原创 2014-10-03 11:36:52 · 2851 阅读 · 0 评论 -
杭州电子科技大学Online Judge 之 “确定比赛名次(ID1285)”解题报告
算法分析: 本题是拓扑排序的典型应用。由于顶点数量不多,可以采用邻接矩阵来存储图信息,这样算法比较简单,只需要搜索n次,每次把序号最小的入度为0的顶点存储到拓扑序列中就行了。算法思路比较清晰,代码也比较简洁,但时间复杂度和空间复杂度都较高。另一种方法是采用邻接表存储图信息。由于题目要求输出时编号小的队伍在前,所以在入栈时一定要保证先让序号最小的入度为0的顶点在栈顶,这样根据后进先出的特点,可以把序号最小的顶点存储到拓扑序列中。我采用折半插入排序的方法,把入度为0的顶点按递减序排序,然后对图进行深度优先原创 2014-11-19 14:37:43 · 2211 阅读 · 0 评论 -
最短路径算法集锦
列举了深度优先搜索的递归和非递归算法,Dijkstra最短路径算法, 基于Bellman-Fort最短路径算法的改进型广度优先搜索算法, Floyd-Warshall最短路径算法的原始版和变化版 本文是阅读《啊哈!算法》后的学习笔记,代码与教材中有些差异,若有错误请指正,谢谢!原创 2014-11-13 22:27:28 · 1312 阅读 · 1 评论 -
拓扑排序之变量序列算法分析
分别用邻接表和边表集两种数据结构存储图的顶点和边信息。分别用深度优先搜索和广度优先搜索实现了拓扑排序。对拓扑排序感兴趣的同学可以参考下。原创 2014-11-17 20:57:21 · 1033 阅读 · 0 评论 -
图的割点(边表集实现)
在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。求割点与桥的算法是R.Tarjan发明的。本文用边表集存储图的信息,实现了递归和非递归两种算法。原创 2014-11-21 08:27:03 · 1841 阅读 · 0 评论 -
汉诺塔问题非递归算法集锦
汉诺塔问题博大精深,我稍微搜集整理了一下,就得到如此多方法,还有好些方法一时不能理解,没有贴出来,请广大网友共同探讨,分享更多更好的方法。原创 2014-11-30 16:13:37 · 6306 阅读 · 4 评论 -
单链表逆置
单链表逆置是链表的基本操作之一,我分别用递归和非递归两种方式实现单链表(不含头结点)的逆置,代码还是比较简洁的,欢迎批评指正。原创 2014-11-22 17:00:02 · 1286 阅读 · 0 评论 -
最小优先队列基本操作
最小优先队列基本操作:void Insert(MinPQue *q, ElemType x);//把元素x插入队列S中ElemType MinKeyword(MinPQue q);//返回队列S中具有最小关键字的元素(即vec[0])ElemType ExtractMin(MinPQue *q);//删除并返回队列S中具有最小关键字的元素(即vec[0])void ChangeKey(MinPQue *q, int pos, ElemType k);//将第pos个元素的关键字值改为kint Se原创 2014-11-24 22:35:46 · 909 阅读 · 0 评论 -
最小生成树( 克鲁斯卡尔算法)
使用克鲁斯卡尔算法最小生成树,采用的数据结构是三元组边表集,采用了快排和并查集,代码很简洁,效率也高。和前面两个求最小生成树算法一样,程序还能自动生成图信息,快来看看吧。原创 2014-12-01 21:34:29 · 1076 阅读 · 0 评论 -
杭州电子科技大学Online Judge 之 “最大连续子序列(ID1231)”解题报告
本题是动态规划算法的典型应用。使用变量sum累计当前连续子序列之和,只要sum>=0,就不停累计下去,并把最大连续子序列之和记录到maxSum中。如果sum小于0了,则将sum归零,重新开始。题目要求输出该子序列的第一个和最后一个元素,我们只需要在更新maxSum的同时更新记录最大子序列边界的变量maxRight和maxLeft就行了。原创 2014-12-04 15:37:54 · 3730 阅读 · 0 评论 -
最小栈原理及其基本操作
最小栈除了能实现普通栈的操作外,还能以O(1)的时间复杂度返回和更新栈中的最小值。本文除了详细解释最小栈,还推广到最大栈,相信聪明的你一定能举一反三。原创 2014-12-07 20:32:36 · 877 阅读 · 0 评论 -
n皇后问题
采用非递归的回溯法解决n皇后问题,为了减少计算,采用了输出对称图形的方法,这样时间可以节省一半。 亮点是图像的输出,来自《C/C++算法手册》,很漂亮。原创 2014-12-24 22:01:50 · 1101 阅读 · 0 评论 -
杨辉三角集锦
/* Name: 杨辉三角集锦 Copyright: 始发于goal00001111的专栏;允许自由转载,但必须注明作者和出处 Author: goal00001111 Date: 27-11-08 19:04 Description: 分别使用了二维数组,一维数组,队列,二项式公式,组合公式推论和递归方法等10种算法 算法思路详见代码注释——注释很转载 2014-12-10 21:02:18 · 631 阅读 · 0 评论 -
算法进化历程之“n皇后问题”
本文介绍了4种方法来解决n皇后问题,其中有用二维数组的,有用一维数组的,有用递归方法的,有非递归方法的,可以看看。原创 2014-12-26 13:45:36 · 1020 阅读 · 0 评论 -
蛇形矩阵的各种情形:共4种5类
/* Name: Copyright: goal00001111 Author: Date: 14-11-08 09:25 Description: 蛇形矩阵的各种情形:共4种5类 */#includeusing namespace std;const int MAX = 20;int a[MAX][MAX];void Fu转载 2014-10-14 09:02:39 · 1847 阅读 · 0 评论 -
杭州电子科技大学Online Judge 之 “水仙花数(ID2010)”解题报告
其实这道题真是一道水题,我写这篇解题报告的目的是为了引出更难的一道:题目描述:水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例 如:153 = 1^3 + 5^3+ 3^3。 本题要求编写程序,计算所有N位水仙花数。原创 2014-11-23 21:18:51 · 3126 阅读 · 0 评论 -
c语言趣题之“选美比赛”
在选美大奖赛的半决赛现场,有一批选手参加比赛,比赛的规则是最后的得分越高,名次越低。当半决赛结束时,要在现场按照选手的出场顺序宣布最后得分和最后名次,获得相同分数的选手具有相同的名次,名次连续编号,不要考虑同名次的选手人数。原创 2014-12-30 15:42:57 · 3161 阅读 · 0 评论 -
C语言字符串函数大全
C语言字符串函数大全程序开头要声明#include 函数名: stpcpy功 能: 拷贝一个字符串到另一个用 法: char *stpcpy(char *destin, char *source);程序例:#include #include int main(void){ char string[10]; char *str1 = "abcdefghi转载 2015-01-04 15:21:10 · 550 阅读 · 0 评论 -
我所理解的KMP算法
我所理解的KMP算法 作者:goal00001111(高粱) 始发于goal00001111的专栏;允许自由转载,但必须注明作者和出处 一.简单字符串模式匹配算法的缺陷设有目标串T(target)和模式串P(pattern),模式匹配是指在目标串T中找到一个与模式串P相等的子串。模式匹配成功是指在目标串T中转载 2015-08-31 17:17:59 · 598 阅读 · 0 评论