数据结构
少年英雄小渣渣
这家伙很懒,什么都没有留下
展开
-
数据结构之二叉树
基础概念:节点的度:一个节点含有的子树的个数叶节点或终端节点:度为零的节点; 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层 树的高度或深度:树中节点的最大层次;树的类型:1、满二叉树:一棵深度为k,且有2^k-1 (2的k次方减一)个节点称之为满二叉树 (也称完美二叉树,就是节点全有,只有度为2和0的节点)2、完全二叉树: 如上图描述,一一对应,但是可...原创 2018-11-19 18:15:21 · 395 阅读 · 1 评论 -
散列(Hash)的冲突解决方法-开放定址法
1、线性探测法通过散列函数求出应放的位置后,如果当前位置有值,则往后顺延。 比如地址等于0时,在0上有值,则尝试去放入1的地址中。依次往后顺延。在表中的成功查找平均长度等于每一个地址上的冲突次数+1的总和除去总数组个数。不在表中的查找平均长度的话则通过散列函数算出地址后,去查看地址上是否是自己,如果不是则往后顺延,一直顺延到当前顺延地址值为空或者自己时方为结束。...原创 2019-03-29 14:41:44 · 1438 阅读 · 0 评论 -
散列(Hash)的冲突解决方法的性能对比
1、线性和平方以及双散列的查找性能2、分离链接法的查找性能原创 2019-03-29 15:20:31 · 749 阅读 · 0 评论 -
散列(Hash) 解决hash冲突-链地址法
链表法就是在冲突的时候在该地址的链表上放到最后一位,查找则是在地址上遍历那个链表。原创 2019-03-29 14:48:35 · 900 阅读 · 0 评论 -
散列(Hash)
散列的定义:数字关键字的常见散列函数算法:字符串关键字的常见散列函数算法:散列对比其他数据结构的优缺点:1、散列的查找难度跟数据所占空间大小关系不大。冲突处理的好的话O(1)直接就能找到。2、适合字符串的管理(字符串比对麻烦,需要一个字符一个字符比对,但是散列将其变成了数字对比)。3、以空间换时间...原创 2019-03-22 11:07:12 · 184 阅读 · 0 评论 -
快速排序
传说中最快的....跟归并类似,以图中为例, 取65为 pivot, 将其他数据分成两块,然后递归排序左边和右边,然后把三块的结果放到一个数组即完成.选pivot对快速排序来说极其重要,会极大的影响快速排序是真快还是假快......Cutoff为数据大小的一个限制点, 当所剩的待排数据少于Cutoff时,就没必要再用快速排序了,转为插入排序。通过Me...原创 2019-02-26 17:28:38 · 121 阅读 · 0 评论 -
基数排序
基数排序则是通过几轮比较N个整数的基数(进制,图中为10进制,每一位数只有10种可能,按这个来建桶(Bucket))来达到排序的效果。次位优先,先按个位数来排序。主位优先,则是按最大位数来排序...原创 2019-02-28 11:10:22 · 139 阅读 · 0 评论 -
桶排序
这个比较好理解,通过一个数组链表,去存储不同的成绩数据。 count为成绩数组,0-100,每一个对应索引存储的是一个链表原创 2019-02-28 10:43:32 · 75 阅读 · 0 评论 -
表排序
适用于结构体,复杂数据。用table存储具体的索引位置。按table从0-n来存储排序后数据的所在位置,例如图中table【0】存储的是3,则取A的第3个位置上的数据a。table【1】存储的是5,则取A的第5个位置上的数据b。这样就避免了排序时,需要移动数据位置。在数据比较复杂较大时,移动需要耗费较多时方便...原创 2019-02-28 10:33:11 · 133 阅读 · 0 评论 -
最小生成树
最小生成树意义在于 在一个连通图中找到一个边的权重和最小并且连通全部点,且是没有回路的. 算法有很多种,不过都可以归为贪心算法. 其中两种比较有名的为:Prim算法,基本思路为从一颗根节点开始让一颗小树慢慢长大 https://blog.csdn.net/u013245479/article/details/86657295kruskal算法,基本思路为把...原创 2019-01-26 15:45:10 · 630 阅读 · 0 评论 -
贪心算法 - Kruskal算法
基本思想是 把森林合并成树初始状态下每个顶点都是一棵树,通过不断的把边收进来 两棵树并成了一棵树原创 2019-01-26 15:44:27 · 595 阅读 · 1 评论 -
贪心算法 - Prim算法
基本思路为从一颗根节点开始让一颗小树慢慢长大 .从根节点开始,每次找一个与当前树有直接边的邻接点,每次找一个最小权重的边,将其边和点收入到树内,树就长大了,然后继续往外长这颗树.反复循环. 以上图的情况来看以V1为起点最小生成树的生成顺序为:V1(V4最近只有1) - V4(此时树为V1+V4找与他们最近的边) - V2(V3,V2顺序无所谓先后) - V3(V...原创 2019-01-26 15:16:05 · 1888 阅读 · 0 评论 -
前向星
前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序,并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了.用len[i]来记录所有以i为起点的边在数组中的存储长度.用head[i]记录以i为边集在数组中的第一个存储位置.那么对于下图:我们输入边的顺序为:1 22 33 4...转载 2019-01-26 14:46:38 · 7267 阅读 · 0 评论 -
dijkstra算法
从未收录的顶点中找一个距离最小的,拿出来后设置成已访问,并遍历这个点的所有邻接点,如果邻接点没有被访问过,且从原点到该点的距离+该点到邻接点的距离小于原点到邻接点的距离话,则证明找到了一条比原先距离更短的路线,进行数据替换,并记录该路线上邻接点的上一个节点,便于路线的记录 ...原创 2019-01-26 14:45:51 · 92 阅读 · 0 评论 -
数据结构之图
图的常见术语:1、无向图 所有的边无所谓方向的图2、有向图边有可能有方向也有可能没方向,边对图来说重要。3、网络边上有权重的图 (每一条边上有数字,用于表示一些作用)边是顶点对,无向边用(v,x) 双向通道有向边用<v,x> 单向通道,表示从V到X的边 在程序中表现图分为两种,1、邻接矩阵。1+2+3+4+.....+...原创 2018-11-28 15:14:40 · 168 阅读 · 1 评论 -
数据结构之哈夫曼
哈夫曼树的特点: 父节点是两个子节点的和。 利用最小堆来做,每次从最小堆中取出两个分别放到新树的左节点和右节点,然后父节点的值等于左右节点的权值和,再将此父节点插入到最小堆中。 因此哈夫曼树没有度(子节点)为1的节点,所以由上图可知,由于任何非空二叉树,若N0表示叶节点个数,n2是度为2的非叶节点个数,那么两者满足关系 n0 = n2+1,解析如下: n0+n1+n2-1 = 0...原创 2018-11-19 18:38:54 · 772 阅读 · 0 评论 -
数据结构之二叉堆
堆的两个特性:1、 结构性: 用数组表示的完全二叉树2、有序性:任一节点的值是其子树所有节点的最大值或最小值(最大堆或者最小堆)最大堆 的插入 :将元素插入到数组的最后一个(lastIndex),通过 lastIndex /2 取得上一层节点的值,进行比较,如果父节点大,则插入到lastindex,如果父节点小,则将父节点换到lastindex,将插入的元素换到父节点位置,如此循环...原创 2018-11-19 18:25:48 · 146 阅读 · 1 评论 -
堆 栈 堆栈
老是容易混淆,记录记录吧。主要分为内存上 和数据结构上。堆栈=栈堆、栈内存上的差别:栈(stack 操作系统):由操作系统自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。存指针,引用。每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访...原创 2019-06-11 10:02:16 · 1862 阅读 · 0 评论