自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张伯毅的专栏

人生就是一道证明题,证明我们的存在不是偶然....

原创 数据结构与算法之美笔记: 位图

问题:我们有 1 千万个整数,整数的范围在 1 到 1 亿之间。如何快速查找某个整数是否在这 1 千万个整数中呢? 当然,这个问题还是可以用散列表来解决。不过,我们可以使用一种比较“特殊”的散列表,那就是位图。我们申请一个大小为 1 亿、数据类型为布尔类型(true 或者 false)的数组...

2019-05-31 16:16:49

阅读数 85

评论数 1

原创 Java 中基本数据类型在内存中占据的存储大小

注: 1byte = 8bit 类型 32位系统占用空间 64位系统占用空间 boolean 1 byte 1 byte byte 1 byte 1 byte char 2 byte 2 byte short 2 byte...

2019-05-31 15:55:03

阅读数 152

评论数 1

原创 数据结构与算法之美笔记 : 最短路径

像 Google 地图、百度地图、高德地图这样的地图软件,我想你应该经常使用吧?如果想从家开车到公司,你只需要输入起始、结束地址,地图就会给你规划一条最优出行路线。这里的最优,有很多种定义,比如最短路线、最少用时路线、最少红绿灯路线等等。作为一名软件开发工程师,你是否思考过,地图软件的最优路线是如...

2019-05-31 11:46:18

阅读数 57

评论数 0

原创 数据结构与算法之美笔记 : 拓扑排序

概念 我们在穿衣服的时候都有一定的顺序,我们可以把这种顺序想成,衣服与衣服之间有一定的依赖关系。比如说,你必须先穿袜子才能穿鞋,先穿内裤才能穿秋裤。假设我们现在有八件衣服要穿,它们之间的两两依赖关系我们已经很清楚了,那如何安排一个穿衣序列,能够满足所有的两两之间的依赖关系? 这就是个拓扑排序问...

2019-05-31 11:10:33

阅读数 76

评论数 1

原创 数据结构与算法之美笔记 : 动态规划(Dynamic Programming)

动态规划比较适合用来求解最优问题,比如求最大值、最小值等等。它可以非常显著地降低时间复杂度,提高代码的执行效率。 0-1 背包问题 对于一组不同重量、不可分割的物品,我们需要选择一些装入背包,在满足背包最大重量限制的前提下,背包中物品总重量的最大值是多少呢? // 回溯算法实现。注意:...

2019-05-30 18:13:18

阅读数 78

评论数 0

原创 数据结构与算法之美笔记 : 回溯算法

概念 回溯的处理思想,有点类似枚举搜索。我们枚举所有的解,找到满足期望的解。 为了有规律地枚举所有可能的解,避免遗漏和重复,我们把问题求解的过程分为多个阶段。 每个阶段,我们都会面对一个岔路口,我们先随意选一条路走,当发现这条路走不通的时候(不符合期望的解),就回退到上一个岔路口,另选一种走...

2019-05-30 17:05:00

阅读数 64

评论数 1

原创 数据结构与算法之美笔记: 分治算法

概念 分治算法(divide and conquer)的核心思想其实就是四个字,分而治之 ,也就是将原问题划分成 n 个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。 分治算法是一种处理问题的思想,递归是一种编程技巧。 分治算法一般...

2019-05-30 16:52:20

阅读数 76

评论数 1

原创 数据结构与算法之美笔记: 贪心算法 [ 霍夫曼编码 ]

如何理解“贪心算法”? 关于贪心算法,我们先看一个例子。 假设我们有一个可以容纳 100kg 物品的背包,可以装各种物品。我们有以下 5 种豆子,每种豆子的总量和总价值都各不相同。为了让背包中所装物品的总价值最大,我们如何选择在背包中装哪些豆子?每种豆子又该装多少呢? 实际上,这...

2019-05-30 16:30:39

阅读数 63

评论数 1

原创 数据结构与算法之美笔记: AC自动机 [ 多模式串匹配算法 ]

AC 自动机算法,全称是 Aho-Corasick 算法。 其实,Trie 树跟 AC 自动机之间的关系,就像单串匹配中朴素的串匹配算法,跟 KMP 算法之间的关系一样,只不过前者针对的是多模式串而已。所以,AC 自动机实际上就是在 Trie 树之上,加了类似 KMP 的 next 数组,只不过...

2019-05-30 15:09:20

阅读数 41

评论数 1

原创 数据结构与算法之美笔记:Trie树

概念 Trie 树,也叫“字典树”。 顾名思义,它是一个树形结构。 它是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。 我们有 6 个字符串,它们分别是:how,hi,her,hello,so,see。 我们希望在里面多次查找某个字符串是否...

2019-05-30 14:28:58

阅读数 49

评论数 1

原创 数据结构与算法之美笔记: 字符串匹配 「BF 算法、RK 算法、BM 算法、KMP 算法」

RK 算法是 BF 算法的改进,它巧妙借助了我们前面讲过的哈希算法,让匹配的效率有了很大的提升。 BF 算法 BF 算法中的 BF 是 Brute Force 的缩写,中文叫作暴力匹配算法,也叫朴素匹配算法。 从名字可以看出,这种算法的字符串匹配方式很“暴力”,当然也就会比较简单、好...

2019-05-29 17:46:38

阅读数 101

评论数 0

原创 数据结构与算法之美笔记: 深度和广度优先搜索

概念 算法是作用于具体数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于“图”这种数据结构的。 这是因为,图这种数据结构的表达能力很强,大部分涉及搜索的场景都可以抽象成“图”。 图上的搜索算法,最直接的理解就是,在图中找出从一个顶点出发,到另一个顶点的路径。 具体方法有很多,比...

2019-05-29 15:19:02

阅读数 47

评论数 0

原创 数据结构与算法之美笔记 : 图

概念 树中的元素我们称为节点,图中的元素我们就叫作顶点(vertex)。 图中的一个顶点可以与任意其他顶点建立连接关系。我们把这种建立的关系叫作边(edge)。 社交网络,就是一个非常典型的图结构。 我们就拿微信举例子吧。我们可以把每个用户看作一个顶点。 如果两个用户之间互加...

2019-05-29 12:24:38

阅读数 126

评论数 1

原创 数据结构与算法之美笔记 : 堆排序及应用

概念 只要满足这两点,它就是一个堆。 堆是一个完全二叉树; 堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。 第一点,堆必须是一个完全二叉树。还记得我们之前讲的完全二叉树的定义吗?完全二叉树要求,除了最后一层,其他层的节点个数都是满的,最后一层...

2019-05-29 10:55:44

阅读数 42

评论数 0

原创 数据结构与算法之美笔记 : 平衡二叉树、跳表、B - Tree、 B + Tree 、 B * Tree

最近在看数据结构,读书真的很有用 /(ㄒoㄒ)/~~ 本文讲解顺序为 平衡二叉树、B - Tree、 B + Tree 、 B * Tree , 之间存在递进关系,从头开始梳理。 如果对树没有太多概念的话,可以从前两篇开始。 数据结构与算法之美笔记: 树 二叉树基础概念 htt...

2019-05-27 17:37:15

阅读数 253

评论数 1

原创 数据结构与算法之美笔记: 红黑树

二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于 log2n 的情况,从而导致各个操作的效率下降。 极端情况下,二叉树会退化为链表,时间复杂度会退化到 O(n)。 什么是“平衡二叉查找树”? 平衡二叉树的严格定义是这样的: 二叉树中任意一个节点的左右子树的高度相差不能大于...

2019-05-24 17:52:52

阅读数 112

评论数 1

原创 数据结构与算法之美笔记: 二叉查找树

二叉查找树(Binary Search Tree) 二叉查找树是二叉树中最常用的一种类型,也叫二叉搜索树。 顾名思义,二叉查找树是为了实现快速查找而生的。 不过,它不仅仅支持快速查找一个数据,还支持快速插入、删除一个数据。 它是怎么做到这些的呢? 这些都依赖于二叉查找树的特殊结构。 ...

2019-05-24 15:12:11

阅读数 58

评论数 0

原创 数据结构与算法之美笔记: 树 二叉树基础概念

概念 A 节点就是 B 节点的父节点,B 节点是 A 节点的子节点。 B、C、D 这三个节点的父节点是同一个节点,所以它们之间互称为兄弟节点。 我们把没有父节点的节点叫作根节点,也就是图中的节点 E。 我们把没有子节点的节点叫作叶子节点或者叶节点,比如图中的 G、H、I、J、K...

2019-05-24 12:02:41

阅读数 63

评论数 1

原创 数据结构与算法之美笔记 : 哈希算法

什么是哈希算法? 我们前面几节讲到“散列表”“散列函数”,这里又讲到“哈希算法”,你是不是有点一头雾水?实际上,不管是“散列”还是“哈希”,这都是中文翻译的差别,英文其实就是“Hash”。所以,我们常听到有人把“散列表”叫作“哈希表”“Hash 表”,把“哈希算法”叫作“Hash 算法”或者“散...

2019-05-23 18:18:08

阅读数 2708

评论数 6

原创 数据结构与算法之美笔记 : 散列表 「 三 」

散列表和链表都是如何组合起来使用的,以及为什么散列表和链表会经常放到一块使用。 LRU 缓存淘汰算法 在链表那一节中,我提到,借助散列表,我们可以把 LRU 缓存淘汰算法的时间复杂度降低为 O(1)。现在,我们就来看看它是如何做到的。 首先,我们来回顾一下当时我们是如何通过链表实现 LR...

2019-05-23 17:56:53

阅读数 84

评论数 1

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