摘要:在之前已经对二叉树进行了详细的学习,这次会升级二叉树,就比之前学习的二叉树要更加的复杂麻烦了,涉及到左悬右悬的概念了。 Haffman树: 概念: Haffman树主要是用在压缩技术上,来看一张图: 压缩之后的大小相比原文件要小了很多,其它的压缩思想下面简单简述一下: 先看一下代码: 这种代码在平常
        
阅读全文
 
    
        
        
摘要:启发式寻路算法: 思路: 啥是启发式寻路算法呢?下面先来看一下咱们要去实现的一个效果,先来直观的感受一下: 也就是说根据起点和终点找到一个最佳能到达的路线,与咱们实际场景相关的第一时间可能就想到了用地图进行导航了,或者游戏中的寻路,所以这个算法是比较实际的,那下面从0开始剖析该算法的整个运作原理,下
        
阅读全文
 
    
        
        
摘要:在上一次https://www.cnblogs.com/webor2006/p/11530008.html中对二叉树进行了简单的入门,对于上节涉及到的树实用性倒不是太大,但是从今天开始接触的二叉树都是比较有实用价值的,像在JDK8之后很多的结构也都使用到了树,所以学好树是非常有必要的。 二叉排序树开
        
阅读全文
 
    
        
        
摘要:在上一次https://www.cnblogs.com/webor2006/p/11517957.html中对二叉树进行了入门,这次来学一学分治法,啥叫分治法呢? 而它属于五大常用算法之一,而五大常用算法为:分治、动态规划、贪心、回溯、分支界定。下面来看一下具体相关的算法。 查找技术: 首先是查找相
        
阅读全文
 
    
        
        
摘要:哈希表: 特点: 数组(顺序表):寻址容易 链表:插入与删除容易 哈希表:寻址容易,插入删除也容易的数据结构,也就是综合了上述两种数据结构的优点于一身。 Hash table: 定义: 哈希表(Hash table,也叫散列表) 是根据关键码值(Key value)而直接进行访问的数据结构,它通过把
        
阅读全文
 
    
        
        
摘要:栈: 栈是限定仅在表尾进行插入和删除操作的线性表【注意它也是属于之前我们学习的线性表的一类】,允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出的线性表,下面用示例图来瞅一下它: 栈的实现: 顺序方式: 先来看一下它的示意图: 而它
        
阅读全文
 
    
        
        
摘要:查看ArrayList的源码回忆顺序存储结构: 其中核心的成员变量就是标准的顺序存储结构: 其中我们经常构造它是都会采用默认的构造方法,所以瞅一眼它: 其中: 对于它里面的方法经常使用的是往里面添加元数,如下: 另外这块考虑到了数组的扩容: 也就是用当前的总数组的长度再增加一个来进行扩容的处理,下面
        
阅读全文
 
    
        
        
摘要:在17年的时候曾经专门对数据结构跟算法进行了学习,不过,没有系统学完就半途而废了,当时我记得是学到了图相关的东东,转眼到19年过去两年了,对于这块的东东决定还是重拾起来从0开始系统完整的把它学完,不管是为了跳槽还是说为了工作,不能给自己技术树上留下遗憾。 数据结构与算法概念: 对于这些概念其实在大学
        
阅读全文
 
    
        
        
摘要:今天开始准备学习一个新的数据结构 图,貌似听着挺复杂的,当然实际也不容易啦,所以先从理论上对图有个大概的认识,其实之前咱们学的二叉树就是一种特殊的图,怎么个特殊法呢?因为它没有环,但是图是可以,它没有祖先,子孙的关系,如下: 如果任意两个结点都有一条边,如下: 此时就叫"完成图"。 那如果有一个单向
        
阅读全文
 
    
        
        
摘要:合并k个已经排好序的数列是面试中也比较容易被问到的一个算法,有很多种解决,其中第一时间比较容易想到的解法如下: 对于这三组从小到大的数列: 如此循环,最终就将三个已经排序的数列的数字按从小到大的顺序排序到最终结果集了,那先来看一下这种算法的时间复杂度: 如果总共有k个排序好的数列,而几个数列中的总数
        
阅读全文
 
    
        
        
摘要:对于"从一组数中挑出最大的K个数"这个在面试中经常会遇到,所以这次好好的去解析它,而当拿到这个问题时第一时间能想到解法就是:先对数据进行排序,然后再取最大的K个元素,当然这思路没毛病,但是对于数据量非常大(如:一万个数)的情况是不是先对它进行排序的代价太高了,有木有比较优的解法呢?当然有,那就是采用
        
阅读全文
 
    
        
        
摘要:这次学习一个新的非常重要的概念:"堆",先不急着编码,先用理论对它进行一个详细的阐述,所以这篇是纯理论的东东,在学习"堆"概念之前,先要解决一个问题:怎么将一个二叉树放到一个数组里面呢?之前是用链表来存放二叉树的,用数组怎么表达这种连接的关系呢? 完全二叉树: 这里用一个简单的二叉树为例 完全二叉树
        
阅读全文
 
    
        
        
摘要:好一阵子木有学习数据结构相关的东东,大脑得生锈啦~~赶紧再来练练大脑,这次学习一下如何用二叉树和栈来实现表达式的求值,这里只以简单的四则运算表达式来实现。 思考:对于表达式如何在电脑中进行表式,其优先级怎么解决? 在正式篇码之前,先思考一下,对于这样一个表达式"(4 + 5) * 9",在计算机中如
        
阅读全文
 
    
        
        
摘要:之前学过利用递归实现BFS二叉树搜索(http://www.cnblogs.com/webor2006/p/7262773.html),这次学习利用队列(Queue)来实现,关于什么时BFS这里不多说了,先贴张图来直观回忆下: 实现一个队列【采用数组实现】: 这时同样采用模版技术可以往队列中去放任何
        
阅读全文
 
    
        
        
摘要:之前已经学过二叉树的DFS的遍历算法【http://www.cnblogs.com/webor2006/p/7244499.html】,当时是基于递归来实现的,这次利用栈不用递归也来实现DFS的遍历,这里先只学习如何用它进行二叉树的前序遍历,具体何为前序遍历这里不多解释,可以参考之前写的博客有详细的
        
阅读全文
 
    
        
        
摘要:栈和队列是非常重要的数据结构,后面要学习的很多算法都依赖于这俩数据结构,只要是学过编程的人应该都对这两个东东有所耳闻,这里还是对其进行复习一下,进一步认识它们的概念,虽然纯理论,但是有个了解之后有助于之后的使用。 其实栈和队列可以理解成是对之前学过的数组和链表的一种限制,下面具体来了解一下: 栈【S
        
阅读全文
 
    
        
        
摘要:上篇中学习了二叉树的DFS深度优先搜索算法,这次学习另外一种二叉树的搜索算法:BFS,下面看一下它的概念: 有些抽象是不?下面看下整个的遍历过程的动画演示就晓得是咋回事啦: 了解其概念之后,下面看下如何实现它?在正式实现逐层遍历之前,需要解决一个问题,那就是:得知道该树有多少层,也就是树的深度如何计
        
阅读全文
 
    
        
        
摘要:上节中已经学会了如何构建一个二叉搜索数,这次来学习下树的打印-基于递归的DFS,那什么是DFS呢? 有个概念就行,而它又分为前序、中序、后序三种遍历方式,这个也是在面试中经常会被问到的,下面来具体学习下,用三种遍历方法来遍历上节中的二叉数: 前序遍历: 那对于上面的二叉数用前序遍历,遍历过程如下: 
        
阅读全文
 
    
        
        
摘要:终于到二叉树了,每次面试时最担心面试官问题这块的算法问题,所以接下来就要好好攻克它~ 关于二叉树的定义网上一大堆,这篇做为二叉树的开端,先了解一下基本概念,直接从网上抄袭: 先了解下树的概念,balabala~~: 更通俗的定义: 而二叉树就是树结构的一个经典树,也是要讨论的主题,下面再来看下二叉树
        
阅读全文