随笔分类 -  Data Structure&Algorithm

摘要:一、算法思想 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用,指的是将两个已经排序的序列合并成一个序列的操作。其归并思想如下:1)申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;2)设定两个指针,最初位置分别为两个已经排序序列的起始位置;3)比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;4)重复步骤3直到某一指针达到序列尾;5)将另一序列剩下的所有元素直接复制到合并序列尾; 在使用归并排序算法的时候,算法如下:1)将序列切分,直至切分到序列是有序的(这里通过将序列切分成单个元素达到目的);2)... 阅读全文
posted @ 2014-04-07 16:55 大脚印 阅读(1232) 评论(0) 推荐(0)
摘要:一、算法思想 快速排序,顾名思义,效率比较于其他算法,效率比较高。《算法导论》也专门对其进行讲解。其算法设计使用分治思想,如下:1)从数组A[p...r]中选择一个元素,将数组划分成两个子数组:A[p...q-1]和A[q+1...r],使得A[p...q-1]中的元素全部小于等于A(q),使得A[q+1...r]中的元素全部大于A(q);2)通过递归调用快速排序,分别对A[p...q-1]和A[q+1...r]排序;3)因为两个子数组是就地排序,因此它们的合并不需要操作,整个数组A[p...r]已经排序;二、算法示意图 图中所示只是代表一次分的过程,其中红色的4代表选中的用于分割的数组元.. 阅读全文
posted @ 2014-04-07 16:43 大脚印 阅读(1328) 评论(0) 推荐(0)
摘要:一、算法思想 选择排序是一种简单直观的排序算法。它的工作原理如下:1)将序列分成两部分,前半部分是已经排序的序列,后半部分是未排序的序列;2)在未排序序列中找到最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。二、算法示意图 图中阴影部分是未排序的序列,黄色部分是排序好的序列。第一行是待排序的初始序列,最后一行是排好序的序列。 从第一行中选择出最小的元素1,将其和未排序序列的第一个元素交换,从而形成第二行。第二行从阴影部分找到最小的元素2,将2和阴影部分的第一个元素8交换,形成第三行。其实这个过程和冒泡排序非常相似,只是如何将下一个元素移动到排序序列的最末端的方... 阅读全文
posted @ 2014-04-07 14:18 大脚印 阅读(1507) 评论(0) 推荐(0)
摘要:一、算法思想希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:1)插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率;2)插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位;我们将数组中两个元素之间的距离称为Gap,相邻元素之间的Gap自然是1,很明显的,插入排序的算法在调节元素的时候,Gap是1,这就造成了上面讲的低效的原因2)。因此希尔排序的思想如下:1)假设序列的元素个数是n,选取一个初始Gap的d(d= 1; gap = gap / 2) 7 ... 阅读全文
posted @ 2014-04-07 13:27 大脚印 阅读(1632) 评论(0) 推荐(0)
摘要:一、算法思想一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:1)从第一个元素开始,该元素可以认为已经被排序2)取出下一个元素,在已经排序的元素序列中从后向前扫描3)如果该元素(已排序)大于新元素,将该元素移到下一位置4)重复步骤3,直到找到已排序的元素小于或者等于新元素的位置5)将新元素插入到该位置后6)重复步骤2~5如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找排序。二、算法示意图如图所示,阴影部分表示待排序的部分,黄色部分则代表已经排序好的序列。排序过程就是将阴影部分的第一个元素从后往前插 阅读全文
posted @ 2014-04-07 10:43 大脚印 阅读(1321) 评论(0) 推荐(0)
摘要:一、算法思想 冒泡排序是排序算法中比较有意思的一种排序方法,也很简单。其算法思想如下:1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3)针对所有的元素重复以上的步骤,除了最后一个。4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。二、算法示意图 这幅图形象的展示了冒泡的过程,最左边一列,从下往上显示了等待排序的数列,最后一列则显示了冒泡排序的最终结果。每一列阴影的部分代表等待排序的数列,黄色部分表示排序完成的部分,冒泡过程中不需要涉及黄色部分,我们解释一.. 阅读全文
posted @ 2014-04-06 21:21 大脚印 阅读(1196) 评论(0) 推荐(0)
摘要:排序算法 稳定性 意义 重要性 阅读全文
posted @ 2014-04-03 01:33 大脚印 阅读(13996) 评论(3) 推荐(1)
摘要:算法 MD5 阅读全文
posted @ 2013-03-01 22:11 大脚印 阅读(542) 评论(0) 推荐(0)
摘要:A*搜寻算法A*搜寻算法,俗称A星算法,作为启发式搜索算法中的一种,这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。该算法像Dijkstra算法一样,可以找到一条最短路径;也像BFS一样,进行启发式的搜索。A*算法最为核心的部分,就在于它的一个估值函数的设计上:f(n)=g(n)+h(n)其中f(n)是每个可能试探点的估值,它有两部分组成:1)一部分,为g(n),它表示从起始搜索点到当前点的代价(通常用某结点在搜索树中的深度来表示);2)另一部分,即h(n),它表示启发式搜索中最为重要的一部分,即当前结点到目标结点 阅读全文
posted @ 2012-11-18 13:57 大脚印 阅读(850) 评论(0) 推荐(0)
摘要:概念1.排序算法等我稳定性:如果a=b,在排序之前,a在b的前面,如果排序之后,a仍然在b的前面,那么算法就是稳定的,否在算法就是不稳定的;2.内排序和外排序:排序方法根基在排序过程是否完全在内存,分为内排序和外排序。内排序是指在排序期间数据元素全部存放在内存的排序;外排序是指排序期间的全部元素个数太多,不能同时存放在内存,必须根据排序过程的要求,不断在内存外存之间移动的排序。适用于内部排序的排序方法称为内部排序方法,反之则为外部排序方法;性能评估排序的时间开销可用算法执行的数据比较次数和数据移动次数来衡量。排序算法插入排序基本方法:每步将一个待排序的元素,按其排序码的大小,插入到前面已经排好 阅读全文
posted @ 2012-08-31 18:39 大脚印 阅读(382) 评论(0) 推荐(0)
摘要:散列表是表示集合和字典的一种有效方法,它提供一种完全不同的存储和搜索方式,通过将关键码映射到表中的某个位置来存储元素,然后根据关键码用同样的方式直接访问。散列表与散列方法理想的搜索方法是不经过任何比较,一次直接从字典中得到要搜索的元素。如果在元素的存储位置与它的关键码之间建立一个确定的对应函数关系Hash(),使得每个关键吗与结构中的一个唯一的位置相对应:Adress=Hash(key).在插入的时候,一次函数计算存储位置并且按此位置存放。在搜索的时候,根据关键吗进行同样的函数计算,把求得的函数值当作元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功。这种方法就是散列方法,在 阅读全文
posted @ 2012-08-31 10:39 大脚印 阅读(253) 评论(0) 推荐(0)
摘要:大数据 整数 阅读全文
posted @ 2012-08-30 10:57 大脚印 阅读(3328) 评论(0) 推荐(0)
摘要:1.简介一种非线性结构。它的每一个顶点可以和多个其他顶点相关联,各顶点之间的关系是任意的。图是由顶点集合(vertex)及顶点之间的关系集合组成的一种数据结构。Path(x,y)表示从顶点x到顶点y的一条通路,它是有方向的,也称为边(Edge)。2.有关概念1)有向图与无向图: 在有向图中,<x,y>与<y,x>是不同的两条边,在有向图中(x,y)与(y,x)只是表示顶点x与顶点y之间的一条边,注意各自的记法。注意:此处不考虑(x,x)或者<x,x>这样的边(自环)2)完全图: 在n条边组成的无向图中,如果有n(n-1)/2条边,则称之为无向完全图,完全图中 阅读全文
posted @ 2012-08-10 22:26 大脚印 阅读(475) 评论(0) 推荐(0)
摘要:堆(Heap)数据集合如果有序,会为各种操作带来遍便利。但是有些应用并不要求数据全部有序,或者在操作开始之前就完全有序。我们期望的数据结构支持插入操作,并且能够方便的从中取出具有最小和最大关键码的记录,这样的数据结构就是优先队列。而实现优先队列最高效的一种数据结构就是堆。在计算机科学中,堆是一种已完全二叉树为基础的满足队性质的特殊数据结构。(因此可以使用数组存储)堆性质:如果B是A的子结点,那么A中的关键码就大于B中的关键码。这意味着结构中的数值最大的元素总是位于树的根部,这样的堆称为“最大堆”,同理也有“最小堆”。建立堆的有效方法:将数据表中的元素顺序的填入一个完全二叉树中,然后通过所谓的“ 阅读全文
posted @ 2012-08-10 10:45 大脚印
摘要:骑士周游 算法 启发式搜索 阅读全文
posted @ 2012-08-09 09:08 大脚印 阅读(1551) 评论(0) 推荐(2)
摘要:八皇后问题简介:八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可以解决此问题。解决方法:回溯算法Java代码:public class QueenPosition { private int x; private int y; public QueenPosition(i. 阅读全文
posted @ 2012-08-08 19:12 大脚印 阅读(857) 评论(0) 推荐(0)
摘要:队列:先进先出(FIFO)队列的存储表示有两种:一种是基于数组的存储表示,一种是基于链表的存储表示。基于数组的存储表示也叫做顺序队列,为了避免假溢出,需要使用出循环数组(环形的表)进行存储。1.顺序队列队列一开始rear=front=0,两个指针都在初始位置,此时进来元素,放入rear指针所指的位置,之后往前移一格,依次进行。队头指针进1:front = (front+1) % maxSize队尾指针进1:rear = (rear + 1) % maxSize判断队列是否已满:(rear+1) % maxSize == front(也就是说,让rear指针指到front的前一个位置就认为队列已 阅读全文
posted @ 2012-08-08 08:53 大脚印
摘要:一、基本理论1.数据与信息数据是信息的载体,有序的数据组织就形成了信息。信息是人类可以直接利用或感知的意识形式。而数据则是用来被计算机识别、存储和处理的,它是计算机利用或感知的基本单位。2.数据类型数据类型就是定义在一个值的集合和定义在这个值集合上的一组操作的总称。3.抽象数据类型抽象数据类型定义了一个数据的逻辑结构,以及在此结构上的一组算法。抽象数据类型描述程序处理的实体时,强调的是其本质特征、其所完成的功能,以及它和外部用户之间交互的接口,也就是ADT的数据抽象特性。二、算法的设计1.贪婪算法贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最 阅读全文
posted @ 2012-08-07 15:07 大脚印 阅读(323) 评论(0) 推荐(0)
摘要:1.数据结构由某一数据元素的集合和该集合中数据元素之间的关系组成;Data_Structure={D,R}2.根据数据元素之间的关系不同,数据结构可以分为两大类:线性结构和非线性结构;2.1线性结构:元素出第一个元素外有且只有一个前驱,除最后一个元素外有且只有一个后继;根据对现行结构中元素存取方法的不同,又可以分为:直接存取结构(数据,文件),顺序存取结构(栈,队列和优先队列),字典存取结构(和数组有相似之处,但数组是通过下标访问的,字典是通过关键码进行索引的)2.2非线性结构:每个数据元素可能与零个活着多个其他数据元素发生联系。根据关系的不同可以分为层次结构(树形结构即典型)和群结构(所有元 阅读全文
posted @ 2012-08-07 15:03 大脚印 阅读(886) 评论(0) 推荐(0)