![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 78
z1547840014
这个作者很懒,什么都没留下…
展开
-
循环队列+卡片游戏
假设有这样一道题目,桌面上有一堆牌(n),从上往下依次记录为1~n,每次从牌顶取一次放出来,然后从剩下的牌的牌顶中取一张牌拿出来放在牌的末尾,问放出去的牌的顺序是? 这个题目显然就是用队列的思想来解决的一个问题,首先依次从队列中取出2个元素,把第一个元素从队列中放出去,第二个元素放在队列的末尾,依次这样循环下去,直到队列中没有元素为止,所以首先想到的代码如下:原创 2013-08-04 11:31:55 · 888 阅读 · 0 评论 -
二叉查找树详解
二叉查找树(Binary Sort Tree)又称二叉排序树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; 由二叉查找树的性质可以知道,我们如果以二叉树的中序遍历一颗二叉查找树的话,可以得到顺序的数字。下原创 2013-09-07 18:49:52 · 832 阅读 · 0 评论 -
两种简单查找算法之顺序查找和二分查找
查找对于计算机编程来说是非常常见的功能。对于当今的大信息数据时代,计算机对于查找的性能又有了新的挑战,如何设计一个高效的查询,对于系统的性能有着举足轻重的影响。下面我们就来看下最简单的两种查找算法。 顺序查找称得上是最简单的查找算法,其算法思想也比较简单。就是线性表的一段开始,依次将线性表中的数据拿来与需要查找的关键字比较,如果线性表中某个记录的关键字等于给定值,那么查找成功原创 2013-09-07 14:08:00 · 1279 阅读 · 0 评论 -
字典树Trie算法
Trie树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。 它有3个基本性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符; 从根节点到某一节原创 2013-08-29 16:22:03 · 754 阅读 · 0 评论 -
Dijkstra单源最短路径算法
迪科斯彻算法(英语:Dijkstra's algorithm)是由荷兰计算机科学家艾兹赫尔·戴克斯特拉(Edsger Wybe Dijkstra)发明的。迪科斯彻算法使用了广度优先搜索算法。算法解决的是有向图中单个源点到其他顶点的最短路径问题。举例来说,如果图中的顶点表示城市,而边上的权重表示著城市间开车行经的距离,该算法可以用来找到两个城市之间的最短路径。 该算法的输入包含了一个有原创 2013-08-27 16:50:45 · 782 阅读 · 0 评论 -
最小生成树之prim算法
最小生成树的算法思想和界面介绍过的求单源的最短路径算法dijkstra算法有很多相似地方,甚至很多代码都是一样。prim算法要解决的主要问题是路径的最短问题。假设平面上有很多点,各个点之间有很多的线连接起来,并且到达各个点的距离不相同,需要求出一条路径,使得各个点都能被连接起来,并且他们的距离最短。 还是拿讲解dijkstra算法的那张图来看,现在的这个图是一个无向图,这是给dijk原创 2013-08-28 21:21:12 · 657 阅读 · 0 评论 -
字符串算法之kmp算法
在一个字符串中找另一个字符串是否包含其子串的算法有很多实现方式,比如常见的bf,bm,sunday算法等等。相比其它几种算法,kmp真的可以称得上是一种恶心的算法,因为对于速度来说,它没有bm,sunday等算法块,但是理解上来说却比后面的理解难很多。由于其特殊的性质,bf和kmp仍然是在字符串匹配算法中占据主要地位的,所以就来简单的看下kmp算法的具体实现。 所谓bf就是一种暴力求原创 2013-08-13 12:16:38 · 541 阅读 · 0 评论 -
字符串算法之sunday算法
前面介绍了kmp算法,kmp算法是不容易懂得的算法之一,而且其处理速度也并非是最好的算法,所以现在来看一个在算法的处理速度和理解上都比kmp算法更好的一种优秀算法,sunday算法。 Sunday算法是DanielM.Sunday于1990年提出的一种比BM算法搜索速度更快的算法。其核心思想是:在匹配过程中,模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较,它在发现不原创 2013-08-13 16:05:43 · 522 阅读 · 0 评论 -
查找算法之分块查找法
分块查找法 分块查找法将要排序的元素分成若干块,块的长度保持均匀,最后一块可以不满,每个块内的元素均匀排列。构造一个索引表,每个索引选择对应的一个块,每个索引选项中的值就是对应的块中保存的最大值。 分块查找的基本思路是将要查找的元素拿出来,首先与索引表中的值进行比较找到对应的块(这里可以用折半查找或者顺序查找),然后再对块中的数据进行顺序查找,看是否能够找到对应的元素。原创 2013-08-12 11:54:35 · 1187 阅读 · 0 评论 -
排序算法之堆排序
堆是具有特殊性质的完全二叉树,如果每个子节点的值都小于父节点的话,我们称之为最大堆;如果每个子节点的值都大于父节点的话,我们称之为最小堆。我们完全可以根据堆的性质来对数组进行排序。 堆排序的c代码如下:# include void maxHeap(int *arr,int i,int n);void createMaxHeap(int *arr,int i,int n);voi原创 2013-08-08 09:46:26 · 493 阅读 · 0 评论 -
排序算法之归并排序
归并排序也是经典的使用分治法思想的代表算法之一。归并排序的效率很高,而且是一种稳定的排序。其总体的思想思路就是将待排序的元素分成大致相同的两个子集合,分别对两个子集合进行排序,最终将排序的子集合合并成排好序的总集合 归并排序c代码实现如下:# include void mergeSort(int *arr,int i,int n,int *temp);void mSort原创 2013-08-07 10:48:58 · 452 阅读 · 0 评论 -
排序算法之快速排序
快速排序作为20世纪最重要的10大算法思想之一,其地位可想而知。而它也是目前公认的最快的排序算法之一,很多比较高级的算法也是从快速排序的思想上衍生而来。快速排序的主要思想就是归并法,想把原来的问题分解成n个子问题,然后递归的来解决这些子问题,然后合并其结果就可以得到原问题的解了。 快速排序的主要思想思路就是,从数组中拿出一个元素来(一般是第一个元素),与数组的其它元素进行比较,比它原创 2013-08-06 11:50:10 · 498 阅读 · 0 评论 -
三角形的有向面积公式+菜园求树问题
假设菜园里面的果树是按照平面坐标系来排列的,坐标系的x,y都是一系列的整数,我们这里假设为1~10的整数。现在在这个平面系中输入任意三点(在10,10之内)组成一个三角形,求三角形所包围的树的个数(树就是坐标系的整数点)。 如果我们把这个问题简化一下,很明显就是在求一个点是在三角形内部还是在外部的外部,所以我们可以采取遍历坐标系中的所有点,看这些点是在三角形的内部还是外部(包括在线上原创 2013-08-03 17:59:19 · 1174 阅读 · 0 评论 -
排序算法之直接插入排序
直接插入排序类似于我们平常在打扑克摸牌时候的一种情形。我习惯于左手拿牌右手摸牌,每次先把左手中的牌齐整齐,然后右手新摸一张牌中把它放到左手中正确的位置,让它成为一个新的整齐的牌堆。 如果根据上面的思路我们可以发现,直接插入排序的思想就是,从需要排序的第二个数字开始,拿取一个数,与前面的数字进行比较,放在合适的位置,使之成为一个新的有序数组。 直接插入排序c代码如下:原创 2013-08-06 11:52:43 · 452 阅读 · 0 评论 -
数组+链表 小球移动过程
假设有一系列的小球为1~n,顺序可以不按照规则的数字排列,要求输出2个数字,n和m(分别对应小球中的顺序),如果nm,则让m跑到n的后边去,依然保持原来的整体结构不变。 这个题目就是一个典型的用线性结构来计算的题目,我们可以用两种方式来实现,数组和链表都可以很好的解决为题,这里我采用了单链表来解决,双向链表也可以解决该问题 用数组来实现的代码如下:# include原创 2013-08-05 19:17:17 · 720 阅读 · 0 评论 -
探究递归内部的机制
对于递归,接触过编程设计的人员都应该听说过。递归是一种常用的函数设计方法,记得国外的大神曾经说过一句话:是否真正理解指针和递归,与是否是一个优秀程序员直接相关。可见指针和递归在程序设计中的重要性。本文讨论的主要是对第二个递归的讨论,对于指针,其重要性不言而喻。可以这样说,对指针的理解程度的了解深度决定了你以后程序设计生涯的深度,因为不会指针,很多底层东西的源码你是一点都看不懂的。但是这不是本文讨论原创 2013-10-01 23:24:27 · 1413 阅读 · 1 评论