最短路径问题---Dijkstra算法详解

Dijkstra算法介绍 算法特点: 迪科斯彻算法使用了广度优先搜索解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算法的一个子模块。 算法的思路 Dijkstra算法采用的是一种贪心的策略,声明一个数组dis来保存源点到各个顶点的...

2018-11-04 22:09:57

阅读数 46

评论数 0

二叉排序树和堆的区别

1、结构上: 二叉排序树:左子树小于根节点,根节点又小于右子树。 堆(小堆):根节点小于左右子树,但是左右子树没有大小之分。 2、作用上:  从上面各自的结构上的分析可得:二叉排序树是用来做查找的,而堆是用来做排序的。...

2018-11-01 11:20:29

阅读数 36

评论数 0

冒泡排序

冒泡排序(Bubble Sort),它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,所以叫“冒泡排序”。   冒泡...

2018-10-31 10:48:28

阅读数 20

评论数 0

树的定义和树的三种存储结构

秩也就是他的高度; 一、树的定义 1.树的定义 树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中: 有且仅有一个特定的称为根(root)的结点; 当n>1时,其余结点可分为m(m>0)个互...

2018-10-27 23:44:43

阅读数 687

评论数 0

哈夫曼编码计算问题以及报文解析

已知某字符串S中共有8种字符,各种字符分别出现2次、1次、4次、5次、7次、3次、4次和9次,对该字符串进行哈夫曼,问该字符串的编码至少有多少位? 我们首先构造一个哈夫曼树:    其中编码位数就是出现 次数×编码位(bit)  也就是2×5+1×5+4×3+5×3+7×2+3×4+4×3+9×...

2018-10-27 22:55:30

阅读数 128

评论数 0

什么是:AVL树平衡因子

AVL树就是平衡二叉树,左子树和右子树的高度之差绝对值不超过1。 而且规定,平衡二叉树的每个节点的平衡因子只能是-1 ,1 ,0; 按照公式   平衡因子 = 右子树的高度 - 左子树的高度 -1 : 表示左子树比右子树高 1  : 表示右子树比左子树高 0 : 表示左子树和右子树等高 ...

2018-10-27 17:20:03

阅读数 171

评论数 0

平衡搜索树的左单旋、右单旋、左右双旋、右左双旋

在平衡搜索树中进行插入结点时,有可能会破坏整棵树的平衡。为了保证平衡不被破坏,就要对一些节点进行旋转,从而来降低树的高度,这样也能保证树的平衡。 一、左单旋: (上图中的▲结点有可能是NULL,也有可能不为空。。。下同) 从图中可以看出,进行左单旋时,只是改变了parent的右指针以及sub...

2018-10-27 16:27:02

阅读数 20

评论数 0

字典和列表的区别,字符串、列表、元组、字典、集合的区别

  字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。 两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。 字典用"{ }"标识。字典由索引(key)和它对应...

2018-10-27 15:16:39

阅读数 583

评论数 0

哈希之开散列和闭散列以及冲突的处理

开散列:链地址法 闭散列:开放地址法(处理冲突:线性探测法,二次先行探测等) 方法一: 闭散列(即开放地址法):当发生哈希冲突时,如果该哈希表还没有被填满,那么就把该元素放到哈希表的下一个空闲的位置。 线性探测法查找下一个位置; 方法2:开散列法(哈希桶):又名链地址法,先用哈希函数计算每个...

2018-10-27 14:41:38

阅读数 61

评论数 0

二叉树额存储表示方法,节点度表示法

二叉树的顺序存储结构可看作是二叉树的一种无边表示,即树中边信息是隐含的。二叉树的另一种无边表示称为二叉树的结点度表示。这种表示法将二叉树中所有结点依其后序列表排列,并在每个结点中附加一个0到3之间的整数,以表示结点的状态。该整数为0时,表示相应的结点为一叶结点;为1时,表示相应结点只有一个左儿子;...

2018-10-21 11:28:27

阅读数 280

评论数 0

详解快速排序

对关键码序列(66,13,51,76,81,26,57,69,23)进行快速排序。 求第一趟划分后的结果。 关键码序列递增。 以第一个元素为划分基准。 【主要方法步骤】如下: 将两个指针i,j分别指向表的起始和最后的位置。 反复操作以下两步: (1)j逐渐减小,并逐次比较j指向的元素...

2018-10-21 00:06:27

阅读数 13

评论数 0

让你彻底明白指针

指针就是用来存储地址的, int *p:这是定义一个指针; 这是的p就是一个地址; *p:就是取出p中地址的值,也就是取值符; &p:就是看看p的存储地址是什么; p:就是p里面存储的内容; 上代码吧: #include <iostrea...

2018-10-19 17:28:47

阅读数 42

评论数 0

堆——最大堆/最小堆的初始化、增加、删除等基本操作

堆的定义:堆是一种经过排序的完全二叉树或满二叉树, 最大堆:就是不不断变得进行树元素替换,最终是树呈现上面数值最大; 最小堆:就是不不断变得进行树元素替换,最终是树呈现上面数值最小;   堆的定义 堆是一种经过排序的完全二叉树或满二叉树,n个元素的序列{k1,k2,…,kn},当且仅当满...

2018-10-16 15:23:49

阅读数 266

评论数 0

完全二叉树,满二叉树,霍夫曼树

霍夫曼树:每个节点要嘛没有子节点,要么有两个子节点 完全二叉树:满二叉树的一部分或者全部。 满二叉树:每个父亲都有2个叶子。 1 1 / \ ...

2018-10-16 15:21:27

阅读数 117

评论数 0

让你透彻快速知道图的遍历之 、深度优先搜索、广度优先搜索

1. 深度优先搜索介绍 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。 它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。...

2018-10-16 13:44:43

阅读数 41

评论数 0

二叉树的四种遍历方法笔记 二叉树的遍历

总体来说就是从:顶点,左侧,底部,不断地数数。 前序:第一位是顶点; 确定的根节点。 中序:顶点将分开左右树;确定根节点的左右树。 后序:最后一点是顶点;确定根节点。 给出前中的唯一树; 给出后中的唯一树; 给出前后不能得出唯一树:不能确定一个父亲下有一个孩子,这个孩子是左孩子还是右孩...

2018-10-16 11:21:45

阅读数 36

评论数 0

选择排序,冒泡排序,插入排序

1.选择排序 2.冒泡排序/双向冒泡排序 3.插入排序   1.选择排序:每一个和其他所有比一次,选小的留下,,从0 和1开始 选择排序是一种最为直观的排序方法。每次循环从数组中选择出一个最小或者最大的元素,按顺序重新放入数组中,直到所有的戴排序元素都排序完成。   public ...

2018-10-15 17:46:34

阅读数 33

评论数 0

并查集,合并 以及优化

并查集       并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。       并查集是一种树形结构,又叫“不相交集合”,保持了一组不相交的动态集合,每个集合通过一个代表来识别,代表即集合中的某个成员,通常选择根做这...

2018-10-15 16:46:11

阅读数 238

评论数 2

线索二叉树,搜索二叉树,AVL二叉树,满二叉树,完全二叉树,平衡二叉树

  二叉树的遍历本质上是将一个复杂的非线性结构转换为线性结构,使每个结点都有了唯一前驱和后继(第一个结点无前驱,最后一个结点无后继)。对于二叉树的一个结点,查找其左右子女是方便的,其前驱后继只有在遍历中得到。为了容易找到前驱和后继,有两种方法。一是在结点结构中增加向前和向后的指针fwd和bkd,...

2018-10-15 16:14:20

阅读数 40

评论数 0

闭散列,开散列。散列表(哈希表)(散列函数构造、处理冲突、查找)

闭散列,开散列其实就是处理冲突的方式; 哈希冲突的处理:  方法一: 闭散列(即开放地址法):当发生哈希冲突时,如果该哈希表还没有被填满,那么就把该元素放到哈希表的下一个空闲的位置。 优缺点下面介绍;  开散列法(哈希桶):又名链地址法,先用哈希函数计算每个数据的散列地址,把具有相同地址的元...

2018-10-15 12:06:31

阅读数 355

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭