
数据结构
文章平均质量分 54
对于常见数据结构的学习、总结
左五先生
这个作者很懒,什么都没留下…
展开
-
排序 - 插入排序
排序是计算机程序设计中的一种重要操作,是把一组无序的记录按某种次序排列起来,使之有一定的次序,以便于进行数据的查找。 排序的稳定性是指若待排数据 中包含值相同的元素,其排序完毕后的相同元素的位置关系是否与排序前的次序相同。若排序前后保持一致,及此排序方式是稳定的,否则便是不稳定的。 排序分为两类,及内排序和外排序。内排序是指将待排序列全部放入内存中,并完成排序过程。适用于待排元素不...原创 2018-04-19 12:42:41 · 258 阅读 · 0 评论 -
排序 - 简单选择排序
简单选择排序又称直接选择排序。其算法思维较为简单,是一种简单的排序算法。基本思想:每趟排序从待排记录(元素)中挑选出最小(或最大)的一条记录,与已排记录的最后一个记录的下一个交换位置,直到全部排完为止。图示:假设原纪录为:{7,2,5,8,4,7,2,3},每次挑选的最小元素(黄色),已排记录(蓝色)。算法步骤:假设待排元素无序存储在数组a[n]中,从第一趟开始,通过n-1次比较获...原创 2018-11-03 10:22:52 · 364 阅读 · 0 评论 -
时间复杂度的分析
时间复杂度即以最基本的操作重复执行的次数,是一个算法的时间量度。多数情况下是最深层循环内的语句的原操作。通常讨论的时间复杂度指的是最坏情况下的时间复杂度。 算法的时间复杂度记为T(n)=O( ),常见的时间复杂度有:O(1),O(n^-1),O(log 2 n),O(n*log 2 n),O(n^2),O(n^3),O(2n),O(n)等形式。例如冒泡排序的时间复杂的为O(n^2),...原创 2018-04-17 18:45:26 · 1393 阅读 · 1 评论 -
排序 - 希尔排序
希尔排序是插入排序中的一个分支,但是较简单插入排序又有较大的改进,这使得它成为了历史上第一批突破二次时间屏障的排序算法之一哦。它是通过比较一定间隔的元素来工作的。因此希尔排序又称为缩小增量排序。 直接插入排序对于原始数据基本有序的情况下,效率较高。在此的基础上。我们可以想办法,使数据基本有序,然后利用直接插入排序的特长完成排序。 对于使数据基本有序的方法可以进行粗排,那又怎么进行粗...原创 2018-04-24 21:03:27 · 4564 阅读 · 0 评论 -
排序 - 交换排序之冒泡排序
在排序算法中还有一大类是交换类排序,其中最为常见,最好理解的便是冒泡排序了。 冒泡排序的算法思想:通过无序区中相邻记录关键字的比较和位置的交换,使得关键字最小(最大)的记录如冒泡一般上浮,至水面(有序区),整个算法从最下面的记录开始,对每两个相邻的记录的值进行比较,使关键字较小的交换至较大的记录之上,以次循环,经过一趟排序之后无序区中关键字最小的记录到大最上端,将其踢出无序区,在无序区中...原创 2018-04-24 21:52:08 · 245 阅读 · 0 评论 -
贪心算法 之 装箱问题
贪心算法 之 装箱问题(可得到最优解的近似解)1.贪婪准则:1>贪婪准则设计算法的每一步的最优解(局部最优)2>贪心准则一旦设好,中途不变2.贪婪准则并不一定能得到最优解:装箱问题:有若干个体积为V的箱子;有N个物品体积为:v0,v1,v2,v3.......要求:将所有的物品装入箱子中,使得打开的箱子最少;贪婪准则:1.将所有物品按照体积降序排列;...原创 2018-09-23 20:02:15 · 3893 阅读 · 0 评论 -
马踏棋盘:(八皇后+迷宫)
马踏棋盘:(八皇后+迷宫)将马随机放在国际象棋的Board[0~7][0~7]的某个方格中,马按走棋规则进行移动。,走遍棋盘上全部64个方格。编制递归程序,求出马的行走路线,并按求出的行走路线,将数字1,2,…,64依次填入一个8×8的方阵,输出之。将每个格子作为起始位置。求所有解。思想:8*8的棋盘,其中最中间的格子,马按日走,共有八个方向,边框的格子并没有八个方向,角的格子更少...原创 2018-10-27 16:58:14 · 1019 阅读 · 0 评论 -
贪心算法 之 哈夫曼编码
贪心算法 之 哈夫曼编码1.最优二叉树:(哈夫曼树)1>结点的权:赋予叶子结点以个有意义的值;2>结点的路径长度:从根结点到当前结点的的长度结点的带权路径长度:W*L (W:权 L:路径长度)3>二叉树的带权路径长度:一颗二叉树的所有叶子结点的带权路径长度之和4>最优二叉树:一颗二叉树的带权路径最小,就是最优二叉树2.哈夫曼树的特点:...原创 2018-10-28 14:15:45 · 9809 阅读 · 0 评论 -
排序 - 归并排序
将两个有序表合并成一个有序表的过程称为2路归并;区别于前几种排序方法,这个排序方法是用递归实现,其中体现了分治的思想。归并排序思想:假设初始序列含有n个记录(元素),则可以看作是n个有序的子序列,其中每个序列的长度为1,然后两两归并。得到n/2个长度为2的有序子序列;然后再两两归并,形成n/4个子序列……重复执行(递归,终止条件为形成1个子序列),直到得到一个长度为n的有序序列。即排序完成...原创 2018-11-01 22:17:27 · 214 阅读 · 0 评论 -
排序 - 选择排序之堆排序
堆:(也叫优先队列),可以看作一棵完全二叉树。特点:父结点与子节点的关键字之间有固定的大小关系。常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。分类:最大堆(大顶堆):父节点的值大于等于两个子节点的值,常用于堆排序。 最小堆(小顶堆):父节点的值小于等于两个子节点的值,常用于构造优先队列。堆排序是一种树形选择排序,在排序过程中,将待排序的记录a[n]看作一颗完全二叉树的...原创 2018-11-04 00:15:36 · 389 阅读 · 0 评论 -
排序 - 快速排序
快速排序算法是一种经典的排序算法, 其基本思想是选择个基准元素 (通常选择第一个元素或者最后个元素), 通过一趟排序将待排序序列分成两部分,一 部分比基准元素小,一部分大于等 于基准元素,此时基准元素在其排好序后的正确位置:然后再递妇地排序划分的两部分,因此本质上快速排序是种分治算法。 由于在排序的过程中,各元素与基准元素比较大小,若小于基准元素则与基准元素交换位置,因此该算法是不稳定的排序算法...原创 2018-11-07 23:55:01 · 215 阅读 · 0 评论 -
二叉树的遍历
二叉树的遍历:遍历运算是二叉树的基本运算,主要有先序、中序、后序和层序遍历。先序遍历的基本方法:对于非空二叉树,先访问根结点,然后先序遍历根的左子树,最后先序遍历根的右子树。因此,若已知某二叉树的先序遍历序列,则可直接得到其树根结点。C语言描述:void printTree (Tnode *root){ //先序遍历 if(root){...原创 2018-11-08 22:44:57 · 135 阅读 · 0 评论 -
二叉树概念
树结构:在树结构中,节点数等于分支数+1。二叉树基本性质:树:非线性数据结构;术语:树的结点(node):包含一个数据元素及若干指向子树的分支;孩子结点(child node):结点的子树的根称为该结点的孩子;双亲结点:B 结点是A 结点的孩子,则A结点是B 结点的双亲;兄弟结点:同一双亲的孩子结点; 堂兄结点:同一层上结点;祖先结点: 从根到该结点...原创 2018-11-07 23:59:13 · 637 阅读 · 0 评论 -
二叉搜索树
二叉树的递归定义:1.是一颗空二叉树;2.不包含重复元素;3.或者包含三个部分:一个值,一个左分支,一个右分支。且这两个分支也为二叉树;二叉树的基本操作:二叉搜索树的作用:可以作为一个字典,也可以作为一个优先队列;创建二叉搜索树:(链式)其基本操作所费时间与树的高度有关,最坏的情况下处理时间为O(n);特点:(递归定义)所有左分...原创 2018-11-08 22:48:43 · 205 阅读 · 0 评论 -
排序总结
排序的稳定性:当存在两个关键字相同的元素Ri,Rj,再排序前Ri领先于Rj(即i<j),当排完序Ri依旧领先于Rj,则称此排序方法为稳定的,否则则称为不稳定的。内排序和外排序:内排序:指待排元素记录全部存放在计算机内部进行的排序过程; 外部排序:待排记录的数量很大,一直内存一次不能全部容纳全部记录,在排序过程中尚需对外部存储进行访问的排序过程。各种排序对比:排序方法 时...原创 2018-11-16 15:16:41 · 235 阅读 · 0 评论 -
模式匹配算法 C语言
常见的模式匹配算法有两种:BF算法(简单模式匹配算法) KMP算法C语言实现的BF算法:#include <stdio.h> //pos是从1开始的一个下标int index_force(char * s, char * t,int pos){ int i=pos-1; //判断pos是否合法 if(!s[i]) printf("...原创 2018-11-30 00:12:08 · 1530 阅读 · 0 评论 -
查找 - 索引查找(分块查找)
索引查找(分块查找):是一种性能介于顺序查找,折半查找之间的查找方式。对应的待查表是一个无序序列。在此方法中除表本身外,还需创建一个索引表。按照索引表将待查表分为若干个块。索引表的一组数据代表待查表的一个块。即查找的思想为先找到需要查找的元素的所在块,然后遍历这个块。得到需要查找的元素在待查表的位置。其中索引表包含两部分内容,...原创 2020-05-11 10:36:11 · 332 阅读 · 0 评论 -
B树和B+树
目录B树的定义:Plus版——B+树MySQL是如何使用B树的B树的定义: 一种适用于外查找的树,它是一种平衡的多叉树,称为B树,其定义如下:一棵m阶的B树满足下列条件:树中每个结点至多有m个孩子; 除根结点和叶子结点外,其它每个结点至少有m/2个孩子; 若根结点不是叶子结点,则至少有2个孩子; 所有叶子结点都出现在同一层,叶子结点不包含任何...原创 2019-02-17 00:53:22 · 396 阅读 · 0 评论 -
二分查找树BST (Binary Search Tree)
已知的存储方式及其操作的算法复杂度:在中序遍历的意义下,每一二叉树都对应于某一序列若该序列为有序向量,则可参照二分查找的算法每次查找对应于从根到某一节点的路径时:最大比较次数 = 树高 + 1这便引出了二分查找树:定义:二分查找树(Binary Search Tree)或者是空树或者其左右子树(L 和 R)都是 BST如果 L 非空,max{L} < r...原创 2020-05-11 10:35:24 · 538 阅读 · 0 评论 -
数据结构与算法总结
数据结构与算法1.数据结构的都有哪些数组,链表,堆,栈,图,树,二搜索叉树,平衡二叉树,(AVL,伸展树,红黑树,B树,B+树,kd树,哈夫曼树),队列,串,词典,映射(哈希,跳跃表)数据结构在Java中的映射数组——Array,链表——LinkedList,堆,栈,队列,图,二叉树——红黑树,词典——>map3.各自的特点 优点 缺点 数组 ...原创 2020-04-10 22:26:58 · 272 阅读 · 0 评论