随笔分类 -  算法数据结构

总结算法数据结构的内容
摘要:我们都知道,innodb中的索引结构使用的是B+树。B+树是一种B树的变形树,而B树又是来源于平衡二叉树。相较于平衡二叉树,B树更适合磁盘场景下文件索引系统。那为什么B树更适合磁盘场景,B+树又在B树基础上做了什么优化?抱着这些问题,本博客将深入分析B树和B+树来龙去脉,其中会涉及到二叉排序树和平衡 阅读全文
posted @ 2021-01-11 19:16 数小钱钱的种花兔 阅读(1394) 评论(0) 推荐(1)
摘要:在业务场景中,处理一个任务队列,可能需要依照某种优先级顺序,这时,Java中的PriorityQueue(优先队列)便可以派上用场。优先队列的原理与堆排序密不可分,可以参考我之前的一篇博客: 堆排序总结与实现 原理 PriorityQueue中维护一个Queue[]数组,在逻辑上把它理解成一个小根堆 阅读全文
posted @ 2020-11-13 16:50 数小钱钱的种花兔 阅读(360) 评论(0) 推荐(0)
摘要:背包问题总结分析 背包问题是个很经典的动态规划问题,本博客对背包问题及其常见变种的解法和思路进行总结分析 01背包 问题介绍 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 v[i],价值是 w[i]。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容 阅读全文
posted @ 2020-07-31 19:35 数小钱钱的种花兔 阅读(578) 评论(0) 推荐(1)
摘要:问题描述 有 N 个信件和信箱,每封信件对应一个正确信箱位置。现在它们被打乱,求错误装信方式的数量。保证每一封信都装在错误的位置。 思路 抽象成动态规划问题 定义一个数组dp[]存储错误方式数量。dp[i]表示,有i封信、i个信箱情况下的错误装信方法总数。 转移方程建立 对于第N封信而言,假设其装在 阅读全文
posted @ 2020-07-03 11:52 数小钱钱的种花兔 阅读(1338) 评论(0) 推荐(0)
摘要:本博客总结学习堆排序算法,以一个数组为例,采用大根堆进行升序排序,附有代码实现。 堆排序的思想 堆排序的逻辑是建立在完全二叉树的基础上。 有两个概念必须要了解: 大根堆:每个结点值都大于等于左右孩子结点值 小根堆:每个结点值都小于等于左右孩子结点值 以大根堆为例,将根结点与最后一个结点交换,弹出根结 阅读全文
posted @ 2020-06-30 11:33 数小钱钱的种花兔 阅读(364) 评论(0) 推荐(0)
摘要:之所以标明“jdk7”,是因为jdk8和jdk7中的HashMap实现原理不一样。jdk7中使用“数组+链表”形式来实现哈希表,这与数据结构课上所学的一致。而jdk8在它的基础上,引入了红黑树。本博客先从最原始的“数组+链表”形式开始总结梳理。 首先在开始之前要有一个基本认识:HashMap是一个对 阅读全文
posted @ 2020-05-13 19:16 数小钱钱的种花兔 阅读(302) 评论(0) 推荐(0)
摘要:最近开始看Redis设计原理,碰到一个从未遇见的数据结构:跳跃表(skiplist)。于是花时间学习了跳表的原理,并用java对其实现。 介绍 跳跃表 是一种有序数据结构,它通过每个结点中维持多个指向其它结点的指针,从而达到快速访问结点的目的。 我们平时熟知的链表,查找效率为O(N)。跳表在链表的基 阅读全文
posted @ 2020-05-06 21:10 数小钱钱的种花兔 阅读(3117) 评论(0) 推荐(0)