![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
tangtong1
这个作者很懒,什么都没留下…
展开
-
构建高性能队列,你不得不知道的底层知识!
前言 本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识。 你好,我是彤哥。 上一节,我们一起学习了如何将递归改写为非递归,其中,用到的数据结构主要是栈。 栈和队列,可以说是除了数组和链表之外最基础的数据结构了,在很多场景中都有用到,后面我们也会陆陆续续的看到。 今天,我想介绍一下,在Java中,如何构建一个高性能的队列,以及我们需要掌握的底层知识。 学习其他语言的同学,也可以看看,在你的语言中,是如何构建高性能队列的。 队列 队列,是一种先进先出(First In原创 2020-08-15 00:35:58 · 316 阅读 · 1 评论 -
全网首发:12306抢票算法大曝光?(十张图搞定)
前言 本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识。 你好,我是彤哥,一个每天爬二十六层楼还不忘读源码的硬核男人。 相信大家都有过抢票、刷票的经验,每年年底,这都是一场盛宴。 然而,你有没有想过12306的抢票算法是怎么实现的呢? 没有吧,想过,还是没有头绪? 今天,我们就来曝光让人又爱又恨的12306是如何实现抢票的。 位运算回顾 我们知道计算机只能识别0和1,要操作这些0和1,只能通过位运算来进行,那么,一共有几种位运算呢? 让我们来回顾一下: 运算.原创 2020-08-07 10:31:41 · 3788 阅读 · 0 评论 -
O、Θ、Ω、o、ω,别再傻傻分不清了!
前言 本篇文章收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识。 你好,我是彤哥,一个每天爬二十六层楼还不忘读源码的硬核男人。 前面几节,我们一起学习了算法的复杂度如何分析,并从最坏、平均、最好以及不能使用最坏情况全方位无死角的剖析了算法的复杂度,在我们表示复杂度的时候,通常使用大O来表示。 但是,在其他书籍中,你可能还见过Θ、Ω、o、ω等符号。 那么,这些符号又是什么意思呢? 本节,我们就来解决这个问题。 读音 我们先来纠正一波读音: O,/əʊ/,大Oh o,/.原创 2020-07-23 23:09:32 · 2348 阅读 · 0 评论 -
如何从最坏、平均、最好的情况分析复杂度?
前言 你好,我是彤哥,一个每天爬二十六层楼还不忘读源码的硬核男人。 上一节,我们从事后统计法过渡到渐近分析法,详细讲解了如何进行算法的复杂度分析。 但是,如果遵循严格的渐近分析法,需要掌握大量数学知识,这无疑给我们评估算法的优劣带来了很大的挑战。 那么,有没有更好地评估算法的方法呢? 答案是必然的,本节,我们就从最坏、平均、最好三种情况来分析分析复杂度。 案例 为了便于讲解,我写了一个小例子: public class LinearSearch { public static void main(.原创 2020-07-22 06:35:47 · 1150 阅读 · 0 评论 -
拜托,面试别再问我跳表了!
何为跳表? 跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。 跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。 跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。 跳表详解 有序链表 考虑一个有序链表,我们要查找3、7、17这几个元素,我们只能从头开始遍历链表,直到查找到元素为止。 上述这个链表是有序的,但是不能使用二分查找,是不是很捉急?(P.S....原创 2019-04-12 07:31:18 · 233 阅读 · 0 评论 -
拜托,面试别再问我堆(排序)了!
何为堆? 堆是一种特殊的树,只要满足下面两个条件,它就是一个堆: (1)堆是一颗完全二叉树; (2)堆中某个节点的值总是不大于(或不小于)其父节点的值。 其中,我们把根节点最大的堆叫做大顶堆,根节点最小的堆叫做小顶堆。 堆详解 满二叉树 满二叉树是指所有层都达到最大节点数的二叉树。比如,下面这颗树: 完全二叉树 完全二叉树是指除了最后一层其它层都达到最大节点数,且最后一层节点都靠左排列。比如,下...原创 2019-04-20 07:46:54 · 269 阅读 · 0 评论