Algorithm and DataStruct
文章平均质量分 61
闲逸居士
这个作者很懒,什么都没留下…
展开
-
树之线索二叉树
1. 慨念 传统的链式存储仅体现一种父子关系,不能直接得到结点在遍历中的前趋或后继。到这种二叉链表表示的二叉树中存在大量的空指针,而线索二叉树就是将这些空域利用起来。存放其直接前趋或者后继的指针。 ltag lchild data rchild r...原创 2018-04-30 10:28:57 · 211 阅读 · 0 评论 -
排序之其他(归并排序,基数排序)
1. 归并排序a. 基本思想 ”归并”的含义是将两个或两个以上的有序表归并组合成一个新的有序表。例如: 待排序表含有n个记录,则可以看成是n个有序的子表,每个子表长度为1,然后两两归并,得到[n/2]个长度为2或1(遗留的1); 再两两归并。。。如此重复直到合并成一个长度为n的有序表为止。2-路归并排序。当然还有3路,4路。。。...原创 2018-04-28 19:33:51 · 181 阅读 · 0 评论 -
排序之选择排序(简单选择排序,堆排序)
1. 简单选择排序a. 基本思想 其实思路很简单,就是第i趟排序中从L[i…….n]中,选出关键字最小的元素与L[i]交换。每趟确定一个元素的最终位置。 L[1…..i-1] L[i] L[i+1……n]b. 代码void SelectSort(ElemType A[], int n){ ...原创 2018-04-28 16:55:03 · 307 阅读 · 0 评论 -
排序之交换排序(冒泡排序,快速排序)
1. 冒泡排序a. 基本思想 假设待排序比表长为n, 从后向前(或从前往后)两两比较相邻元素的值,若未逆序则交换,直到序列比较完,则称一趟冒泡。最小值如同气泡逐渐向上“漂浮”,直至“水面”。下一趟最小元素已到第一序列,不用比较。待排序列减少一个元素,每趟冒泡都将序列中的最小元素放到序列的最终位置b. 代码void...原创 2018-04-28 14:33:22 · 180 阅读 · 0 评论 -
排序之插入排序(直接插入排序,折半插入排序,希尔排序)
1. 直接插入排序 一种最直观,最简单的排序方式。假设在排序过程中,待排序表L[1…….n]在某次排序过程中的某一时刻状态如下: 有序序列L[1…..i-1] L(i) 无序序列L[i+1…….n] a.操作步骤如下:  ...原创 2018-04-28 11:13:33 · 327 阅读 · 0 评论 -
查找之字符串匹配
简单的模式匹配算法  a. 基本思想:从主串S指定的字符开始和模式串T的第一个字符比较,若相等,则继续逐个比较后续字符串,直到T中的每个字符依次和S中的一个连续的字符序列相等,则匹配成功。若比较途中某对字符不想等,则从主串S的下一个字符开始比较。如果S串比较完,仍没匹配成功,则称匹配不成功。   b. 代码 int Index(SString S, SStr...原创 2018-04-27 19:01:53 · 2862 阅读 · 0 评论 -
查找之HASH查找
前面的查找是一系列关键字比较,查找速度相对较慢。HASH查找的优势来了 a. 哈系函数: 一个把查找表中的关键字映射成该关键字对应的地址的函数,adde = HASH(key)。 这里的地址可以是下标,索引,或内存地址。 b. 散列表:由根据关键字而直接进行访问的数据结构。散列表建立了关键字和存储地址之间的一种直接映射关系。Hash函数的构造方法 a.直接定址法:H(key) = a*...原创 2018-04-27 12:18:46 · 367 阅读 · 0 评论 -
查找之分块查找
分块查找又称索引顺序查找,吸取顺序查找和折半查找的优点 基本思想:将查找表分为若干个子块。块内的元素可以无序,但块件是有序的,即第一个块中的最大关键字小于第二块中的所有关键字,依次类推。再建一个索引表,索引表中的元素含有各块的最大关键字和各块中第一个元素的地址,索引表按关键字有序排列。示意图 查找分2步 a. 首先在索引表中进行折半查找,确定元素在那个块间(折半查找可以查看前面所写),...原创 2018-04-26 22:26:24 · 233 阅读 · 0 评论 -
查找之折半查找
折半查找又称二分查找,适用有序的顺序表。(附:笔试考察查找,这个是经典查找法) 基本思路:首先给定值key与表中中间位置元素的关键字,若相等则查找成功,返回位置。若不等,则所需查找的元素只能在中间元素外的前半部分或后半部分中。缩小范围,递归查找。 2.折半查找的代码int Binary_Search(Seqlist L, ElemType key){ //假设从小到...原创 2018-04-26 21:22:19 · 269 阅读 · 0 评论 -
查找之顺序查找
顺序查找分为一般的无序线性表的顺序查找,按关键字有序的顺序表的顺序查找。1.一般线性表的顺序查找 a.基本思想:从线性表的一端开始,逐个检查关键字是否满足给定条件。若查找到某个元素的关键字满足给定条件,则查找成功。否则查找到另一端,还没查到到给定条件的元素,则返回查找失败的信息。 b. 代码: typedef struct{ ...原创 2018-04-26 20:45:09 · 282 阅读 · 0 评论 -
图之最短路径
目前求最短路径的算法很多,下面2种是基本不再使用,但却是经典的路径算法。其他路径算法有启发式算法A*,D*,还有树形的RRT, RRT*等。1. Dijkstra算法 a. 基本思想:求带权有向图中某个源点到其他各顶点的最短路径,Dijkstra算法十分适用。有向图有N={V, arcs[i][j...原创 2018-05-01 18:22:20 · 518 阅读 · 0 评论 -
图之最小生成树
对于一个带权连通无向图G=(V, E),生成树不同,每颗树的权(树中所有边上权值之和)也可能不同。若T为G所有生成树中权值最小的那颗生成树,则T称为G的最小生成树。下面的2种算法就是基于贪心算法的策略提出的,算法很早提出,但经典。即使早就由代码实现过,但仍然有人在此基础上改进提出其他好的方法。1. Prim算法 &nbs...原创 2018-05-01 12:23:11 · 239 阅读 · 0 评论 -
图的遍历
1. 广度优先搜索(BFS) a. 基本思想:类似二叉树的层序遍历,从起始结点v访问,接着依次访问v未被访问的邻接顶点w1,w2,w3,……,wi。再从w1,w2,….., wi等开始访问,与上述相同模式。还可以应用于Dijkstra单源最短路径算法和Prim最小生成算法。 b. 代码boo...原创 2018-04-30 21:30:55 · 267 阅读 · 0 评论 -
树之哈夫曼(Huffman)树
1. 概念 实际生活中,树中结点常常表示某种意义的数值,称为该结点的权值。从根结点到任意结点的路径长度(经过的边数)与该结点上权值的乘积称为该结点的带权路径长度。树中所有叶结点的带权路径长度之和称为该树的带权路径长度,记为 WPL = Wi*Li(i=1,2……,n) 带权路径长度(WPL)最小的...原创 2018-04-30 15:52:33 · 214 阅读 · 0 评论 -
树之二叉排序树
1. 概念 简称BST,也称二叉查找树。其具备下列特性: 1). 若左子树非空,则左子树上所有关键字值均小于根结点的关键字值 2). 若右子树非空,则右子树上所有关键字值均大于根结点的原创 2018-04-30 14:47:30 · 223 阅读 · 0 评论 -
树与二叉树
1. 树的简介a. 树的定义 一种非线性结构,树是N(N>=0)个结点的有限集合,N=0则称为空树。 1). 有且仅有一个特定的称为根的结点 2). 当N>1时,其余结点原创 2018-04-29 11:18:25 · 237 阅读 · 0 评论