![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
文章平均质量分 87
咕咚0203
没有什么是一个涨停解决不了的事,如果有那就两个涨停……✌
展开
-
数据结构之红黑树
一、概述什么是红黑树?红黑树是一种二叉树,做开发的一定听说过红黑树,红黑树属于一种高级的数据结构了,在中高级开发的面试环节中,我们经常会遇到相关的面试题,本篇我们就来了解下这种数据结构。二、红黑树的特征红黑树是一种特殊的平衡二叉树,关于平衡二叉树,我们以前介绍过AVL树,不清楚的可以先看这篇数据结构之AVL树。对红黑树的操作在最坏的情况下花费O(logN)时间。它具有以下性质: 每一个节点要么是红色,要么是黑色。 根(root)节点是黑色的。 如果一个节点是红色的,那么原创 2021-09-18 10:18:04 · 405 阅读 · 0 评论 -
算法设计技巧-贪婪算法
一、概述今天这篇我们来简单介绍下贪婪算法,贪婪算法分阶段工作,在每个阶段可以认为所做决定是最好的,而不考虑将来的后果。通常这意味着选择的是某个局部最优解。这种“眼下能够拿到就拿”的策略是这类算法的名称来源。当算法终止的时候,我们希望局部最优等于全局最优,如果这样的话,那么算法就是正确的,否则,算法得到的是一个次最优解,如果不要求绝对的最佳答案,那么有时使用简单的贪婪算法生成近似最优解反而是更好的选择。二、贪婪算法的应用第一个实际应用:文件压缩。假设我们有一个文件,它只包含a,e,i,s原创 2021-07-15 09:58:35 · 433 阅读 · 0 评论 -
数据结构-图
一、概念说到图,大多数人立刻会想到一幅画,一张地图……但是我们今天所说的图是一种数据结构。图是由顶点(vertice)集和边(edge)集组成的,图又分为有向图、无向图、带权图,下图所示的是一个有向图有向图:顾名思义就是具有方向的图,如上所示,顶点1指向顶点2,但是顶点2无法指向顶点1。无向图:就是不区分方向的图,顶点1可以指向顶点2,同时顶点2也可以指向顶点1。带权图:表示边带有权重的图,如下图所示另外图中还包含路径这个概念,如上图v1到v7的路径有 v1->原创 2021-06-29 09:58:14 · 3889 阅读 · 0 评论 -
数据结构之散列(Hash)
一、概述什么是散列表?散列表也被称为hash表,它是一种用于以常数平均时间执行插入、删除和查找的技术。其通过关键字(key)来实现对数据的直接访问。关键字和数据的映射关系称为散列函数又称hash函数,记做hash(x),我们把散列表的大小记做tableSize。理想的散列表:关键字被映射到tableSize个单元内,并且任意两个不同的关键字被映射到不同的单元。事实上单元的数量有限,而关键字实际上是用不完的。因此要找到一个散列函数,该函数要在单元之间均匀的分配关键字,这就是散列的基本想法。剩下的还有一原创 2020-11-21 17:05:59 · 1250 阅读 · 0 评论 -
ArrayList底层源码剖析
一、概述工作中我们会经常使用到集合,像ArrayList、LinkedList,也知道ArrayList相比于LinkedList它的查找、修改效率更高,但是新增、删除的效率不如LinkedList,究竟为什么会有这样的差别?希望通过这篇文章让你对这两种数据结构有更深刻的认识。二、结构差异首先从源码的角度来看(没有注明版本的情况下,默认为jdk1.8)public class ArrayList<E> extends AbstractList<E> ..原创 2020-11-16 11:12:39 · 143 阅读 · 0 评论 -
用JAVA代码手动实现AVL树
一、概念在实现二叉树之后,我们发现在某些极端的情况下,二叉树可能会发生退化,退化成复杂度为O(N)的链表,为了避免这种情况,我们必须要给二叉树添加限定条件。AVL树是一种带有平衡条件的二叉查找树,由Adelson-Velskii和Landis于1962年首先提出。使二叉查找树成为AVL树的性质是:二叉查找树的每个节点的左子树和右子树的高度最多差1(空树的高度定义为-1)如上图所示,左边的是AVL树,右边的就不是,因为其左子树和右子树的高度差为2。二、平衡策略要想让AVL始终...原创 2020-11-09 14:05:05 · 172 阅读 · 0 评论 -
java实现单链表,以及单链表相关面试题
一、数据结构和算法的重要性目前程序员的门槛越来越高,对于已经参加工作的程序员来说,面试或者笔试被问到数据结构和算法已经屡见不鲜,尤其是一些一线的IT公司,数据结构和算法的面试题肯定会有,要知道“算法是程序的灵魂”。作为一名程序员,如果你不想一辈子停留在“码农”这样的标签里,那么就请花些时间去提升自己的数据结构和算法方面的知识吧。二、数据结构数据结构分为线性结构和非线性结构。线性结构作为最常用的数据结构,其特点是数据元素中存在一对一的线性关系,线性结构有两种不同的存储结构,即顺序存储结构.原创 2020-11-02 11:28:17 · 171 阅读 · 0 评论 -
数据结构之二叉树(java语言描述)
一、概念对于大量的输入数据,链表的线性访问时间太慢,不宜使用。树这种结构极大的缩短了数据的访问时间。什么是树呢?它是怎么做到提高访问效率的呢?树可以用几种方式定义,定义树的一种自然方式是递归方式,一棵树是一些节点的集合,这些集合可以是空集;若不是空集,则树由根(root)节点以及n(n>=0)个子(child)节点组成,这些子节点每一个都有来自根节点的一条有向边(edge)所连接。如上图,这是一棵树。【A】为根节点,【B】、【C】、【D】、【E】、【F】、【G】为【A】的子(child)节原创 2020-10-31 12:18:50 · 395 阅读 · 0 评论