- 博客(11)
- 收藏
- 关注
原创 算法学习之最优二叉树(赫夫曼树)
构建好赫夫曼树后,按照左0右1的规则生成编码,因为生成的赫夫曼树后,每个编码都是叶子节点,所以不会产生有两个编码有同样前缀的情况(即每个编码的父节点都不可能是另一个编码),即赫夫曼编码是前缀编码。这样创建出的赫夫曼树的根结点为所有节点的权值之和,根结点的两个子节点是最大节点与其他节点的权值之和构建的新节点,以此类推,权值越大,越靠近根结点,路径越短。创建一个新的节点,其权值为权值最小的两个元素的权值之和,然后将这两个最小元素,分别放到新节点的左右子节点上,并将新节点的权值放回序列,代替原来的两个元素。...
2022-08-09 20:34:16 1576
原创 算法学习之二叉排序树的平衡化
首先提出问题问什么要让二叉树排序树平衡化比如给出{1,2,3,4,5,6,7}让我们将其构造成排序树,如下图可以看出,此时二叉树变成了数组,而我们为了提高搜索效率的初衷也被打破了为了解决这种极端情况,我们需要对二叉树进行平衡化。...
2022-07-29 21:50:52 703
原创 算法学习之二叉树
每个节点最多有两个的子节点的树,称为二叉树,二叉树是最基础的树,其他的算法树大多是在二叉树的前提下加以限制,或有特殊要求。二叉树的相关术语节点包含一个数据元素及若干指向子树分支的信息,一般一个节点所包含的属性有节点数值,左节点,右节点节点的度一个节点拥有子树的数目称为节点的度,即一个节点有几个子分支,没有子节点度为0,仅有一个子节点度为1,以此类推叶子节点也称为终端节点,没有子树的节点或者度为零的节点分支节点也称为非终端节点,度不为零的节点称为非终端节点树的度。...
2022-07-29 16:08:54 184
原创 算法学习汇总
算法学习之基数排序_管管儿的博客-CSDN博客算法学习之快速排序_管管儿的博客-CSDN博客算法学习之归并排序_管管儿的博客-CSDN博客算法学习之插入排序_管管儿的博客-CSDN博客算法学习之堆排序_管管儿的博客-CSDN博客......
2022-07-28 21:17:24 43
原创 算法学习之希尔排序
希尔排序是直接插入排序的优化,原理是对数组先进行分组,并对每个分组进行插入排序,每次分组的组数为(len/2*i),即如果长度为10,分组的组数分别为5,2,1。10个元素分为5组其元素的跨度为5,即下标分组为(0,5)、(1,6)、(2,7)、(3,8)、(4,9)10个元素分为2组其元素跨度为2,下标分组为(0,2,4,6,8)、(1,3,5,7,9)10个元素分为1组其元素跨度为1,下标分组为(0,1,2,3,4,5,6,7,8,9)这是对一个长度为10的数组进行第一次分组的结果(分为5组)...
2022-07-28 21:14:15 98
原创 算法学习之基数排序
桶排序的升级若位数不同,位数大的一定大于位数小的,若最高位相同则比较次一位。将所有元素按照最低位,分别放入桶中,相同位数的值如果相同则放入同一个桶。再将桶中的数组取出到数组中,此时得到按照最低位排序的数组。按照位次循环上述操作,若元素在某一位上没有值,按0来处理。......
2022-07-28 20:22:16 110
原创 算法学习之快速排序
分治算法,每次确定一个值的位置,即将一个值在数组中排好顺序,并且分成左右两部分,左边的值都比该值小,右边的值都比该值大。我们默认每次的基准数(即要排序的数)都为数组中的第一个数。先从数组的最右边开始,向左循环找到比基准数小的数。在从数组的左边开始,向右循环找到比基准数大的数。重复234步骤直到左右下标相遇。将数组分为左右两部分进行递归。...
2022-07-28 17:48:40 81
原创 算法学习之归并排序
1.从数组中间值分为左右两部分,进行递归直到每组中只有一个元素时,这时我们可以将其看做已经排好的有序数组(其实就是一个数没有顺序罢了)分支算法处理数组,每次分成两组,并将每一组看做有序数组,之后合并到一个数组中。2.新创建一个数组,遍历两个有序数组,将其按顺序放入新数组中。3.将新的数组返回,返回上一层递归。...
2022-07-28 17:29:58 56
原创 算法学习之堆排序
堆排序是利用堆这一数据结构设计的一种排序算法,堆排序是一种选择排序,他的最坏、最好、平均时间复杂度均为O(nlogn),是一种不稳定排序。堆是一种特殊的完全二叉树,每个节点的值都大于或等于子节点的值,称为大顶堆,反之,称为小顶堆;注意没有对节点的左右孩子节点的值做出要求。大顶堆特点arr[i]>=arr[2*i+1]&&arr[i]>=arr[2*i+2]小顶堆特点arr[i]...
2022-07-28 17:03:28 124
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人