数据结构与算法
文章平均质量分 91
星空是梦想
广州程序员一枚~
展开
-
MySQL索引底层数据结构与算法
什么是索引?索引,其实就是帮助MySQL高效获取数据的排好序的数据结构。索引最形象的比喻就是图书的目录。注意只有在大量数据中查询时索引才显得有意义。在MySQL中,存在多种不同的索引,常见的索引分类如下:按数据结构分类:B+tree索引、Hash索引、Full-text索引。按物理存储分类:聚集索引、非聚集索引(也叫二级索引、辅助索引)。按字段特性分类:主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索引(INDEX)、全文索引(FULLTEXT)。按字段个数分类:单列索引、原创 2022-05-04 22:52:07 · 1240 阅读 · 0 评论 -
动态规划套路解决戳气球问题
题目有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。每当你戳破一个气球 i 时,你可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。求所能获得硬币的最大数量。说明你可以假设 nums[-1] = nums[n] = 1,但注意它们原创 2020-06-03 20:04:39 · 587 阅读 · 0 评论 -
腾讯2020校园招聘后台开发面试编程题
腾讯一面的时候,面试官给出了一道题,题目如下,当初由于是第一次面试,比较紧张没做出来,现在回顾总结一下。题目小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。小Q从第一栋一直走到了最后一栋,小Q从来都没有见到这么多的楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住)输入描述输入第一行将...原创 2020-04-14 13:54:21 · 984 阅读 · 0 评论 -
B树和B+树详细解析
维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作。B-tree算法减少定位记录时所经历的中间过程,从而加快存取速度。普遍运用在数据库和文...原创 2019-12-02 10:55:05 · 545 阅读 · 0 评论 -
快速排序
原理:快速排序,说白了就是给基准数据找其正确索引位置的过程.如下图所示,假设最开始的基准数据为数组第一个元素23,则首先用一个临时变量去存储基准数据,即tmp=23;然后分别从数组的两端扫描数组,设两个指示标志:low指向起始位置,high指向末尾.首先从后半部分开始,如果扫描到的值大于基准数据就让high减1,如果发现有元素比该基准数据的值小(如上图中18<=tmp),就将high...原创 2019-11-05 22:44:05 · 181 阅读 · 0 评论 -
k最邻近算法
一、简介k-近邻算法称为kNN,它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前κ个最相似的数据,这就是k-近邻算法中κ的出处。通常κ是不大于2...原创 2019-11-05 12:11:16 · 701 阅读 · 0 评论 -
动态规划算法详解
首先,我们看一下官方定义:定义:动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决...原创 2019-10-17 15:40:45 · 733 阅读 · 0 评论 -
从一个小例子理解狄克斯特拉算法
从一个小例子理解狄克斯特拉算法转载 2019-05-06 22:16:16 · 352 阅读 · 0 评论 -
使用递归判断二叉树对称
使用递归实现的广度优先算法:先判断根节点 a 的左节点 b 和右节点 c 想不想等,不相等则返回false,相等的话,递归判断 b 的左子树 d 和 c 的右子树 g 是否相等、b 的右子树e 和 c 的左子树 f 是否相等,如果相等,继续递归。原创 2019-04-30 00:05:24 · 796 阅读 · 0 评论 -
求数据流中的第K大元素
我们可以使用 Java内部提供的优先级队列PriorityQueue,PriorityQueue是一个内部能够自动排序的队列,往PriorityQueue添加一个元素后,它能自动给整个序列重新排序,确保整个序列从队头到队尾按从小到大排列。PriorityQueue的底层实现是一个小顶堆。另外,题目要求找到数据流中第K大元素,我们可以限定PriorityQueue最大容量为K,这样PriorityQueue按从小到大排列之后,首元素就是我们要的元素,也就是第K大元素。原创 2019-04-29 22:30:22 · 644 阅读 · 0 评论 -
堆的基本操作
堆的基本操作:1、堆的存储2、堆的建立3、堆的删除4、堆的插入转载 2019-04-25 08:42:32 · 397 阅读 · 0 评论 -
栈与递归
递归函数使用调用栈,下面是计算阶乘的递归函数。def fact(x): if x==1: return 1 else: return x*fact(x-1)print fact(3)下面详细分析调用fact(3)时调用栈是如何变化的流程图。注意:每个fact调用都有自己的x变量,在一个函数调用中不能访问另一个x变量。...原创 2019-04-27 12:02:14 · 286 阅读 · 5 评论 -
二叉树的概念、分类和性质
1、二叉树的概念二叉树:每个节点最多有两个分支(分支的度小于2)的树结构,可为空树。根节点:一棵树最上面的节点称为根节点。左右子树:某个节点的左分支叫做左子树,右分支叫做右子树。左右孩子:某个节点的左、右分支的根节点叫做该节点的左、右孩子。兄弟节点:具有相同父节点的节点互为兄弟节点。节点的度:节点拥有的子树数。叶子节点:没有任何子节点的节点称为叶子节点。内部节点:非叶子节点称为内...原创 2019-04-21 19:42:23 · 13668 阅读 · 6 评论 -
简单选择排序及其优化
简单选择排序,对n个记录进行扫描,选择最小的记录,将其放在第一个位置,接着在剩下的n-1个记录中扫描,选择最小的记录将其放到第二个位置,不断重复这个过程,知道剩下最后一个记录为止。示例代码://简单选择排序方法public static void selectSort(int[] array, int length) { int i,j,min,temp; for (i=0; i&l...原创 2019-04-15 22:42:27 · 923 阅读 · 2 评论 -
直接插入排序及优化(二分查找插入排序)
参考博文:数据结构图文解析之:直接插入排序及其优化 (二分插入排序)解析及C++实现示例代码Github地址:https://github.com/Abel-LiuJinQuan/Sort原创 2019-04-09 09:54:25 · 271 阅读 · 0 评论 -
冒泡排序及其三种优化方案
一、传统的冒泡排序:图解:代码示例:/*** 传统冒泡排序* @author Abel*/int[] a={3,2,5,8,4,7,6,9};for(int i=0; i<8; i++) { for(int j=0; j<=6-i; j++) { if(a[j]>a[j+1]) { ...原创 2019-03-28 23:23:16 · 1663 阅读 · 4 评论 -
希尔排序详解
八大排序算法中,有两种插入排序,直接插入排序和希尔排序,下面我们来介绍希尔排序。希尔排序希尔排序又叫做缩小增量排序。1、基本思想设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为increment个子序列,所有距离为increment的元素放在同一个子序列中,在每一个子序列中分别实行直接插入排序。然后缩小间隔increment,重复上述子序列划分和...原创 2019-04-11 07:21:01 · 4709 阅读 · 2 评论