数据结构与算法
每天多学一点点.
这个作者很懒,什么都没留下…
展开
-
堆排序
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图: 同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个...原创 2020-03-16 16:12:42 · 154 阅读 · 0 评论 -
快速排序
原理快速排序,说白了就是给基准数据找其正确索引位置的过程. 如下图所示,假设最开始的基准数据为数组第一个元素23,则首先用一个临时变量去存储基准数据,即tmp=23;然后分别从数组的两端扫描数组,设两个指示标志:low指向起始位置,high指向末尾. 首先从后半部分开始,如果扫描到的值大于基准数据就让high减1,如果发现有元素比该基准数据的值小(如上图中18<=tmp),就...原创 2020-03-16 15:10:07 · 179 阅读 · 0 评论 -
二叉查找树、平衡二叉树、B树、B+树
B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。二叉查找树二叉查找树具有以下性质:左子树的键值小于根的键值,右子树的键值大...转载 2019-12-04 19:27:13 · 339 阅读 · 0 评论 -
数据结构--串
1 串的概念串(String)是由零个或多个字符组成的有限序列,又名字符串,一般记为 s = “a1a2…an”串中任意个数的连续字符组成的子序列称之为该串的子串,例如 “over” 是 “lover” 的子串2 串的比较• “silly”、“stypid” 这样的两个字符串,第一个字母都是 “s”,因此不存在差异,第二个字母由于 “i” 比 “t” 靠前,所以 “i”<“t”...原创 2019-11-24 14:41:13 · 924 阅读 · 0 评论 -
回溯法
1 概念介绍回溯法有通用解法的美称,对于很多问题,如迷宫等都有很好的效果。回溯算法实际上是一个类似枚举的深度优先搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回(也就是递归返回),尝试别的路径。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。回溯法说白了就是穷举法。回溯法一般用递归来解决。回溯法一般都用在要给出多个可以实现最终条件...原创 2019-11-24 14:24:49 · 541 阅读 · 0 评论 -
动态规划
1 动态规划介绍1.1 什么是动态规划动态规划就是一种用来解决最优化问题的算法思想。简单来说,动态规划将一个复杂的问题分解成若干个子问题,通过综合子问题的最优解来得到原问题的最优解。需要注意的是,动态规划会将每个求解的子问题的解都记录下来。这样当下次碰到同样的子问题的时候 ,直接使用之前记录的结果。而不是重复计算。按我的理解来说,动态规划就是 自底向上求解,而一般的递归是自顶向下求解。当我们...原创 2019-11-23 09:24:47 · 256 阅读 · 0 评论 -
java杨辉三角的三种解法
1 数组实现首先看下排列的结果:可以很清楚的看出一规律(1)一行的第一个元素是1,最后一个元素也是1。而我们打印这种金字塔系列的都会选择用数组进行排序打印,这里选择二维数组。(2)发现从第3行开始中间的那个2是由上面那行的两个数相加得到,这个规律对第三行以下的所有都适用,如3=2+1,6=3+3。。那么我们设定一个二维数组,是需要动态的定义它的空间,这个根据题目来定,我的是十行,所以我...原创 2019-11-18 21:52:26 · 405 阅读 · 0 评论