数据结构与算法
拭心
我的新书《Android 性能优化入门与实战》上架了,快速提升技术实力,强烈推荐!!!
展开
-
使用并查集UnionFind和优先队列PriorityQueue实现Kruskal算法
拿到题目,先看看UnionFind 和 PriorityQueue 怎么实现吧,谁让上课没好好听呢。Kruskal算法是通过按照权值递增的顺序依次选择图中的边,当边不处于同一连通分量时加入生成树,否则舍去此边选择下一条代价最小的边,直到所有顶点都在同一连通分量上。1.UnionFind并查集并查集适用于动态连通性问题,比如说最小生成树时判定两节点是否在同一连通分量中等等。java实现如原创 2014-11-30 23:08:17 · 2766 阅读 · 0 评论 -
重温数据结构:深入理解红黑树
读完本文你将了解到:什么是红黑树黑色高度红黑树的 5 个特性红黑树的左旋右旋指定节点 x 的左旋 右图转成左图指定节点 y 的右旋左图转成右图红黑树的平衡插入二叉查找树的插入插入后调整红黑树结构调整思想插入染红后的调整有 2 种情况根据 TreeMap 的代码来验证这个过程红黑树的平衡删除二叉查找树的删除删除后的结构调整调整思想删除后的调整主要分三步根据 TreeM原创 2016-11-25 00:58:51 · 38050 阅读 · 18 评论 -
重温数据结构:二叉排序树的查找、插入、删除
读完本文你将了解到:什么是二叉排序树 Binary Sort Tree BST二叉排序树的关键操作查找插入删除 运行代码测试一道面试题总结Thanks我们知道,二分查找可以缩短查找的时间,但是有个要求就是 查找的数据必须是有序的。每次查找、操作时都要维护一个有序的数据集,于是有了二叉排序树这个概念。上篇文章 我们介绍了 二叉树 的概念,二叉树有左右子树之分,想必在区分左右子树时有原创 2016-11-20 17:14:17 · 14249 阅读 · 14 评论 -
重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
读完本文你将了解到:什么是二叉树 Binary Tree两种特殊的二叉树满二叉树完全二叉树满二叉树 和 完全二叉树 的对比图二叉树的实现用 递归节点实现法左右链表示法 表示一个二叉树节点用 数组下标表示法 表示一个节点二叉树的主要方法二叉树的创建二叉树的添加元素二叉树的删除元素二叉树的清空获得二叉树的高度获得二叉树的节点数获得某个节点的父亲节点二叉树的遍历先序遍历原创 2016-11-17 02:03:39 · 22549 阅读 · 17 评论 -
重温数据结构:树 及 Java 实现
读完本文你将了解到:什么是树树的相关术语根节点、父亲节点、孩子节点、叶子节点如上所述。节点的度树的度节点的层次树的高度树的深度树的两种实现数组表示:链表表示的节点:树的几种常见分类及使用场景数据结构,指的是数据的存储形式,常见的有线性结构(数组、链表,队列、栈),还有非线性结构(树、图等)。今天我们来学习下数据结构中的 树。什么是...原创 2016-11-17 02:01:54 · 33032 阅读 · 11 评论 -
重温数据结构:哈希 哈希函数 哈希表
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 在学习 HashMap 前,我们先来温习下 Hash(哈希) 的概念。什么是 HashHash(哈希),又称“散列”。散列(hash)英文原意是“混杂”、“拼凑”、“重新表述”的意思。在某种程度上,散列是与排序相反的一种操作,排序是将集合中的元素按照某种方式比如字典顺序排列在一起,而散列通过计算哈希值,打破元素之间原原创 2016-10-27 00:49:30 · 19661 阅读 · 3 评论 -
10种经典排序算法及复杂度总结
排序算法有很多,所以在特定情景中使用哪一种算法很重要。为了选择合适的算法,可以按照建议的顺序考虑以下标准: (1)执行时间 (2)存储空间 (3)编程工作 对于数据量较小的情形,(1)(2)差别不大,主要考虑(3);而对于数据量大的,(1)为首要。 主要排序法有: 一、冒泡(Bubble)排序——相邻交换 二、选择排序——每次最小/大排在相应的位置 三转载 2015-08-17 12:04:00 · 3547 阅读 · 0 评论 -
哈夫曼树与哈夫曼编码
在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN)树和哈夫曼编码。哈夫曼编码是哈夫曼树的一个应用。哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码。 首先介绍什么是哈夫曼树。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的 路径长度(若根结点为0层,叶结点到根结转载 2015-08-16 22:37:39 · 2499 阅读 · 1 评论 -
怎么判断一个序列是不是堆?
已知一个序列,比如{100,6070,50,32,65},怎么判断是不是堆?答案:把这个序列看成数组型的二叉树,如果根结点是i,左子树是2*i,右子树是2*i+1。堆分为最大堆与最小堆。最大堆中所有父节点都比左子树、右子树大,比如已知序列,画成堆就是: 所以已知序列是个最大堆。最小堆中所有父节点都比左子树、右子树小,比如{32,50,60,70,100,65},画成堆: 符合以上两种情况的原创 2015-08-16 21:37:23 · 59642 阅读 · 3 评论 -
数据结构回顾:B、B-、B+、B*-Tree
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关转载 2015-04-30 00:49:30 · 1692 阅读 · 0 评论 -
我是如何从勉强写冒泡成长到轻松get百度offer? (内有许多优质算法书籍介绍及推荐)
关于严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的。这篇文章讲了什么?我这些年学习数据结构和算法的总结。一些不错的算法书籍和教程。算法的重要性。初学第一次接触数据结构是在大二下学期的数据结构课程。然而这门课转载 2015-05-28 21:32:52 · 3030 阅读 · 0 评论 -
重温数据结构:理解 B 树、B+ 树特点及使用场景
读完本文你将了解:B 树对比平衡二叉树和 B 树B 树中如何查找数据B 树如何保证平衡使用场景B+ 树Thanks大家好,前面那篇文章《3 分钟理解完全二叉树、平衡二叉树、二叉查找树》中我们了解了几种特殊的二叉树的功能及特点,知道了它们在进行查找数据时可以提高效率,但需要注意的是,这是指在内存中进行查找。如果有海量的数据,不可能一次性读取到内存中,这时候就要考虑...原创 2018-05-29 00:46:13 · 23746 阅读 · 8 评论