数据结构
系统架构师已经不仅仅是技术精湛的技术专家,他需要与业务团队紧密合作,并且精通市场、业务与管理。从上升趋势来说,可以有三个层面的路线图:第一个层面,要关注系统思考。在这个层面,重要的不仅仅是掌握设计的知识点,而是更重视分析能力、创新思维能力的提升,需要更广阔的思路,这方面的空间相当
十步杀一人_千里不留行
当你还不能写出自己满意的程序时,你就不要去睡觉。
展开
-
数据按半小时统计显示
List<Chart> charts = new ArrayList<>(); SimpleDateFormat format = newSimpleDateFormat("yyyy-MM-dd HH:mm:ss"); charts.add(new Chart(format.parse("2020-01-01 01:10:00"), 2d)); charts.add(new Chart(format.parse("2020-01-01.原创 2021-05-25 10:57:33 · 295 阅读 · 0 评论 -
程序员的进阶课-架构师之路(18)-图
一、图的定义在计算机科学中,图(Graphics)是由顶点集合(Vertex)及顶点间的关系(边)集合(Edge)组成的一种数据结构,这些顶点通过一系列边结对(连接)。顶点用圆圈表示,边就是这些圆圈之间的连线。顶点之间通过边连接。记作G=(V, E) G:Graphics 图形 V:Vertex 顶点 E:Edge 边二、图种类1.有向图和无向...原创 2019-08-18 17:49:30 · 1036 阅读 · 0 评论 -
程序员的进阶课-架构师之路(17)-堆
我们来介绍另外一种数据结构-堆,注意这里的堆和我们Java语言,C++语言等编程语言在内存中的“堆”是不一样的,这里的堆是一种树,由它实现的优先级队列的插入和删除的时间复杂度都为O(logN),这样尽管删除的时间变慢了,但是插入的时间快了很多,当速度非常重要,而且有很多插入操作时,可以选择用堆来实现优先级队列。一、堆的定义【百度百科】堆(英语:heap)是计算机科学中一类特殊的数据结构的统...原创 2019-08-18 16:52:06 · 758 阅读 · 0 评论 -
程序员的进阶课-架构师之路(16)-散列表(哈希表)
前言当我们在编程过程中,往往需要对线性表进行查找操作。在顺序表中查找时,需要从表头开始,依次遍历比较a[i]与key的值是否相等,直到相等才返回索引i;在有序表中查找时,我们经常使用的是二分查找,通过比较key与a[i]的大小来折半查找,直到相等时才返回索引i。最终通过索引找到我们要找的元素。但是,这两种方法的效率都依赖于查找中比较的次数。我们有一种想法,能不能不经过比较,而是直接通过关键...原创 2019-08-18 16:14:05 · 849 阅读 · 0 评论 -
程序员的进阶课-架构师之路(15)-那些年你遇到的其他树
除了前文介绍的树之外,我们再来看看另外一些比较特别的树。一、R树R树在数据库等领域做出的功绩是非常显著的。它很好的解决了在高维空间搜索等问题。举个R树在现实领域中能够解决的例子:查找20英里以内所有的餐厅。如果没有R树你会怎么解决?一般情况下我们会把餐厅的坐标(x,y)分为两个字段存放在数据库中,一个字段记录经度,另一个字段记录纬度。这样的话我们就需要遍历所有的餐厅获取其位置信息,然后计算...原创 2019-08-18 15:35:52 · 684 阅读 · 0 评论 -
程序员的进阶课-架构师之路(14)-B+树、B*树
一、有了B树,为啥还有B+、B*树?B+树 B+树是B-树的变体,也是一种多路搜索树:其定义基本与B-树同,除了: 非叶子结点的子树指针与关键字个数相同; 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间); 为所有叶子结点增加一个链指针; 所有关键字都在叶子结点出现;如:(M=3)B+的搜索与B-...原创 2019-08-18 00:52:06 · 656 阅读 · 0 评论 -
程序员的进阶课-架构师之路(13)-B-树
一、什么是B-树(B-Tree)B树是平衡多叉树,可以看做是对2-3树的一种扩展,即允许每个节点有最多M个子节点,其中M为B树的阶。每个节点的多个key按升序排列,且有 节点所含key值的个数 =节点的子树的个数 – 1,就意味着某节点的每个子树所在的位置是由该节点的key值的分布决定的。B树的另外一个特性就是所有的叶子节点都处于同一层,也就是说从根节点到任意节点的深度都相等(平衡)。2...原创 2019-08-18 00:50:55 · 641 阅读 · 0 评论 -
程序员的进阶课-架构师之路(12)-2-3-4树
一、2-3-4树的定义2-3-4树就是一种4阶的多叉树,它像红黑树一样是平衡树,可以保证在O(lgn)的时间内完成查找、插入和删除操作,容易实现,但是效率比红黑树稍差。2-3-4树每个节点最多有四个字节点和三个数据项,名字中 2,3,4 的数字含义是指一个节点可能含有的子节点的个数。对于非叶节点有三种可能的情况:有一个数据项的节点总是有两个子节点; 有二个数据项的节点总是有三个子节点...原创 2019-08-18 00:02:51 · 668 阅读 · 0 评论 -
程序员的进阶课-架构师之路(11)-最容易理解的红黑树
一、红黑树的定义【百度百科】红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。...原创 2019-08-17 22:45:55 · 656 阅读 · 0 评论 -
程序员的进阶课-架构师之路(10)-霍夫曼树
一、霍夫曼(Huffman)的由来1.历史上的远距通信问题最初的远距通信用于传递文本信息,主要是电报。小A:如何将一段文字内容为“BADCADFEED”通过网络传递给别人呢? 小B:利用二进制对这些字母进行编码,然后传输这个编码就行啊。 小D:是的,电报不就“滴”和“答”嘛?! 小A:那怎么编码呢? 小C:难道你没听说过ASCII码? 小A:那时有没有ASCII码哦?2.最...原创 2019-08-17 12:19:14 · 747 阅读 · 0 评论 -
程序员的进阶课-架构师之路(9)-平衡二叉树(AVL树)
一、平衡二叉树的定义对一棵查找树(search tree)进行查询/新增/删除 等动作, 所花的时间与树的高度h 成比例, 并不与树的容量 n 成比例。如果可以让树维持矮矮胖胖的好身材, 也就是让h维持在O(lg n)左右, 完成上述工作就很省时间。能够一直维持好身材, 不因新增删除而长歪的搜寻树, 叫做balanced search tree(平衡树)。【百度百科】平衡二叉树(Balan...原创 2019-08-17 11:41:53 · 742 阅读 · 0 评论 -
程序员的进阶课-架构师之路(8)-二叉树
一、计算机科学中的树二、二叉树的定义一棵树,它的每个节点最多只能有两个子节点,此时就叫二叉树。(我们一般在书中试题中见到的树是二叉树,但并不意味着所有的树都是二叉树。如果节点多于两个,我们也称之为多路树)可以看出: 满二叉树一定是完全二叉树;完全二叉树不一定是满二叉树。如果我们给二叉树加一个额外的条件,就可以得到一种被称作二叉查找树(binary search tree)的特殊二叉...原创 2019-08-17 00:14:53 · 689 阅读 · 0 评论 -
程序员的进阶课-架构师之路(7)-树的概念
接下来我们将会介绍另外一种数据结构——树。二叉树是树这种数据结构的一员,后面我们还会介绍红黑树,2-3-4树等数据结构。那么为什么要使用树?它有什么优点?前面我们介绍数组的数据结构,我们知道对于有序数组,查找很快,并介绍可以通过二分法查找,但是想要在有序数组中插入一个数据项,就必须先找到插入数据项的位置,然后将所有插入位置后面的数据项全部向后移动一位,来给新数据腾出空间,平均来讲要移动N/2次,...原创 2019-08-16 21:36:43 · 954 阅读 · 0 评论 -
程序员的进阶课-架构师之路(6)-链表
一、链表的定义【百度百科】链表(LinikedList)是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达...原创 2019-08-15 22:40:42 · 700 阅读 · 0 评论 -
程序员的进阶课-架构师之路(5)-队列
一、队列的定义队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入...原创 2019-08-14 23:20:24 · 723 阅读 · 0 评论 -
程序员的进阶课-架构师之路(4)-栈
一、栈的定义【百度百科】栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端...原创 2019-08-14 22:02:22 · 770 阅读 · 0 评论 -
程序员的进阶课-架构师之路(3)-线性表
一、线性表的定义【百度百科】线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储)...原创 2019-08-13 22:56:08 · 795 阅读 · 0 评论 -
程序员的进阶课-架构师之路(2)-数组
从这一节开始,我们就要正式进去数据结构的世界了,那么第一个是什么呢,就是我们的数组。在我想写数组的时候,我的第一印象是去看它的源码,很可惜,数组的实现太特殊了,找了很久,我没有找到它的源码,带着这样的思考,我就开始了Java中数组的挖掘。Wow,真香!一、Java中数组的介绍数组是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数...原创 2019-08-13 00:00:20 · 764 阅读 · 0 评论 -
程序员的进阶课-架构师之路(1)-数据结构与算法简介
现在市面上的数据结构与算法的教程也都不少,但有两个问题,第一是泛泛而谈,第二是基本都是c语言实现,而java作为第一主流语言,理应有它自己的独到之处。这也是我写这些博客的初衷,我会讲解java实现的数据结构和算法。至于说为什么要学习数据结构和算法,我相信大家都应该清楚。大家平时的工作,敲的业务代码,都属于外功,可以帮你轻松地完成老板交待的工作,每个月能挣到属于自己的那份钱。但我不知道小伙伴们有...原创 2019-08-12 23:34:49 · 1008 阅读 · 0 评论 -
程序员的进阶课-架构师之路(大纲)-思维导图
我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!...原创 2019-08-12 23:44:09 · 1060 阅读 · 0 评论