- 博客(9)
- 收藏
- 关注
原创 浅谈红黑树
前言本篇文章我将向大家介绍最负盛名的自平衡二叉查找树——红黑树。红黑树由鲁道夫.贝尔——一位慕尼黑科技大学信息技术教授发明。1978 年,在罗伯特.塞奇威克发表的一篇论文中为这种数据结构正式命名为红黑树,并提供了完整的复杂度证明。红黑树虽然繁琐,但是它在实践中有着非常高的效率,因为红黑树是自平衡的(红黑树实现的其实是一种伪平衡,在后文中我们会提到),所以它不会出现像二分搜索树在极端的情况下退化为链表的这种情况,可以在 O(logN)O(logN)O(logN) 的时间做元素的查找,插入以及删除操作。
2021-10-15 18:17:32 529
原创 最短路径算法
前言本篇文章我将向大家介绍求解最短路径的三种经典算法——Dijkstra 算法,Bellman-Ford 算法以及 Floyd-Warshall 算法。Dijkstra 算法最短路径最短路径问题是图论研究领域中的一个经典算法问题,旨在寻找图中两节点之间的最短路径。譬如上图为一个无向有权图,节点 0 到节点 3 的最短路径为 :0 -> 2 -> 1 -> 3其路径长度为:5。研究最短路径算法具有哪些意义呢?或者说最短路径算法可以解决哪些问题?我们知道,在生活中,地铁
2021-10-03 14:25:01 6989 2
原创 Java 面试八股文之基础篇(一)
前言从今天开始,我将开启一个系列的文章——【 Java 面试八股文】。这个系列会陆续更新 Java 面试中的高频问题,旨在从问题出发,理解 Java 基础,数据结构与算法,数据库,常用框架等。首先要做几点说明:【 Java 面试八股文】中的面试题来源于社区论坛,书籍等资源;感谢使我读到这些宝贵的面经的作者们。对于【 Java 面试八股文】中的每个问题,我都会尽可能地写出我自己认为的“完美解答”。但是毕竟我的身份不是一个“真理持有者”,只是一个秉承着开源分享精神的 “knowledge tran
2021-09-30 02:42:28 1150 6
原创 浅谈函数式编程与 Java Stream
前言在这一篇文章中,我将介绍函数式编程的基本概念,如何使用函数式编程的思想编写代码以及 Java Stream 的基本使用方法。本文不会涉及到任何晦涩难懂的数学概念,函数式编程的理论以及函数式编程的高阶特性,譬如:惰性求值(Lazy Evaluation),模式匹配等。所以,请放心食用。这篇文章对于以下的人群或许有一定的帮助:说不清什么是函数式编程的人不知道什么时候可以使用 Java Stream 的人Java8 出来了这么久,还是无法写好 Stream 操作的人本文使用的代码语言为:J
2021-09-20 16:16:21 484 1
原创 AVL 树
一:什么是 AVL 树?在我的上一篇文章《二分搜索树与二分查找法》中,详细介绍了二分搜索树这种数据结构。二分搜索树最大的问题就是它并非是一棵平衡二叉树。在给定的数据比较极端的情况下,譬如将一个递增数组中的元素依次添加到二分搜索树中,此时的二分搜素树就会退化为一个链表。为了解决二分搜索树的这个问题,两位前苏联的计算机科学家 Georgy Adelson-Velsky 与 Evgenii Landis 发明了一种可以自平衡的二叉查找树,这种数据结构以两位科学家的名字的首字母命名,即:AVL 树。我们再
2021-09-14 12:55:05 156
原创 二分搜索树与二分查找法
一:树的基本概念什么是树?树(Tree)是一种用来模拟具有树状结构性质的数据集合。它是由 n(n > 0) 个有限节点组成的一个具有层次关系的集合。把它叫做“树”的原因,是因为树这种数据结构看起来像一棵倒挂的树,也就是说,它是根朝上,而叶朝下的。树这种数据结构具有以下的几个特点:每个节点都只有有限个子节点或无子节点没有父节点的节点称为根节点每一个非根节点有且只有一个父节点除了根节点外,每个子节点可以分为多个不相交的子树树里面有没环路(cycle)树的名词术语树这种数据结构中有
2021-09-03 22:29:00 692
原创 Kruskal 算法与 Prim 算法
一:无向带权图的最小生成树无向带权图是图论算法领域中的一种基础模型。它的代码实现我们就不在这篇文章中介绍了,大家可以参考文章后面给出的代码链接。下图为一个无向带权图的示例:接下来我们着重介绍一下图的生成树与最小生成树的概念。什么是图的生成树呢?首先,只有一个联通图才有会有图的生成树,也就是说,给定的图的联通分量的个数必须是 1 。然后,在一个联通图 GGG 中,如果取它全部顶点和一部分边构成一个子图 G′G'G′,若子图 G′G'G′ 的所有边能够使得全部的顶点联通且不形成任何的回路,则称子图
2021-09-02 00:25:38 2487
原创 哈夫曼编码与文件压缩
一:哈夫曼树与哈夫曼编码大家知道,文件压缩的原理么?假如我们有一个文件,文件当中仅有 A、B、C、D、E 五种字符,这五种字符出现的频率分别为 5次、4次、3次、2次、1次。我们知道每个英文字母均占用一个字节,即 8 个比特,所以,我们可以认为原文件的大小就是15个字节,即:120 个比特。现在,我们要设计一种能够压缩这个文件的算法,你会怎么做?固定长度编码如果这个文件中仅有 A、B、C、D、E 这五种字符,我们可以让 A、B、C、D、E 按照二进制数分别表示为 000,001,010,011,
2021-08-30 00:40:34 4199
原创 什么是哈密尔顿回路/路径?
一:哈密尔顿回路与哈密尔顿路径1859 年,爱尔兰数学家哈密尔顿(Hamilton)提出了一个“周游世界”的游戏:在一个正十二面体的二十个顶点上,标注了伦敦,巴黎,莫斯科等世界著名大城市,正十二面体的棱表示连接着这些城市的路线。要求游戏参与者从某个城市出发,把所有的城市都走过一次,且仅走过一次,然后回到出发点。简而言之,哈密尔顿回路是指,从图中的一个顶点出发,沿着边行走,经过图的每个顶点,且每个顶点仅访问一次,之后再回到起始点的一条路径。如上图所示,我们的起始点选定为 Washington DC
2021-08-28 22:35:24 34649 5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人