
数据结构与算法
文章平均质量分 92
不论是在面试还是在做产品的优化,优秀的数据结构的架构思路和算法的优化都可以使我们的产品更加优秀,本专栏,将会用简单的语言去解释方便大家学习。
嗯哼唉、
后端、云计算、大数据
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
摩尔投票算法
什么是摩尔投票算法?摩尔投票算法是一种使用线性时间和常数空间查找大部分元素序列的算法。它以1981年出版的Robert S. Boyer和J Strother Moore的名字命名,并且是流式算法的典型例子。最简单的形式就是,查找输入中重复出现超过一半以上(n/2)的元素。如果序列中没有这种元素,算法不能检测到正确结果,将输出其中的一个元素之一。如果不能保证输入数据中有占有一半以上的元素,需要...原创 2020-02-11 18:33:17 · 238 阅读 · 0 评论 -
动态规划理论
前面一篇文件使用几个简单的程序介绍了回溯和动态规划之前的区别,但是没有说出动态规划本质的特色,像贪心算法三个步骤一样,本篇文章将主要围绕解题思路来讲,目的是让大家明白什么样的问题可以使用动态规划算法,解决动态规划问题的思路 是什么样的,贪心算法、分治算法、回溯算法、动态规划这四种算法的思想有什么区别和联系???先来说一下什么样的题目适合采用动态规划思想。。。一个模型的三个特征首先看一下什么是...原创 2019-08-12 20:54:51 · 327 阅读 · 0 评论 -
动态规划算法初识
先来说一下几种经典算法大概的意思是:贪心算法:就一次机会,为了达到目的,其他什么都不用想回溯算法:有无数次机会,一定要达到目的动态规划算法:能随意在任何时候进行存档读档,用最华丽的方法走到终点接下来主要围绕动态规划来说说,去解释动态规划算法的内在。。。。简述动态规划求解出最优策略的原理是因为显著的降低了时间复杂度,提高了代码的运行效率,但动态规划确实是有点难学,不过一旦了解了解决思...原创 2019-08-11 19:16:56 · 345 阅读 · 0 评论 -
递归算法
推荐注册返还佣金这种功能很多App都有这种功能,比如说用户a推荐用户b注册,用户b又推荐c注册。推荐人往往都会得到报酬,而这个推荐关系在数据库中可以这样显示。假设actor_id表示用户id,referrer_id表示推荐人id。那么,如果想要找到最终推荐人的话,如何编写算法呢?于是,可以考虑使用递归。。如何理解递归算法前面文章中介绍过几种算法,回溯算法经常会使用到递归算法来解决问题,当...原创 2019-08-10 12:07:34 · 207 阅读 · 0 评论 -
回溯算法
常规来说,回溯算法和动态规划算法是面试中笔试考的相对比较多的两个算法,区别就是在于一个可以重头再来一个可以无限读档,本篇专栏将来看看回溯算法是如何做到无限重来的。。回溯算法常见的考的题型有:数独、八皇后、0-1背包、图的着色、旅行商问题和全排列等等。。。如何理解回溯算法之前介绍的贪心算法和分治算法无非就是让策略最优化,贪心算法可以使我们每次进行选择的时候选择看起来是最优的选择,分治算法可以将...原创 2019-08-08 16:45:18 · 729 阅读 · 0 评论 -
分治算法详解
前面已经介绍过MapReduce框架,MapReduce就是用的分治算法MapReduce如何让数据完成一次旅行如何理解分治算法分治算法核心是:分而治之,就是将原问题划分成n个规模较小,并且和原问题相似的子问题,递归的去解决这些问题,然后将结果合并,最后得到原问题的答案。当然,分治算法和昨天说到的贪心算法本质是差不多的,都是一种处理问题的思想,并非编程的框架。从实际上来说,分治算法一般都适...原创 2020-06-25 16:40:04 · 1166 阅读 · 0 评论 -
贪心算法
贪心算法是一个一条路走到底无论如何都要达到目的的一种算法思想,很多的应用都是通过贪心算法实现的,如Huffman Coding,Prim,Kruskal和最小生成树算法。我们如何才能理解贪心算法???下面先来看一下经典的背包问题。。。假设我们有一个可以容纳100kg物品的背包,可以装各种物品。有以下五种豆子,每种豆子总量和总价值各不相同。为了使背包中所装物品的总价值最大,如何选择装哪些豆子?...原创 2019-08-07 21:35:01 · 519 阅读 · 0 评论 -
B+树:MySQL数据库索引是如何实现的???
作为一个软件开发工程师,大家对数据库肯定是再熟悉不过了。主流的数据存储系统,在业务开发中有着很重要的地位。在工作中常常为了加速数据库中数据的查找速度,常用的思路就是对表中数据创建索引。那么想没想过数据库索引是如何实现的呢?底层使用的是什么数据结构和算法呢???算法解析1、解决问题的前提是定义清楚问题如何定义清楚问题呢?除了对问题进行详细的调研之外还可以通过对一些模糊的需求进行假设,来限定要解...原创 2019-09-04 20:56:27 · 730 阅读 · 0 评论 -
链表(下):如何轻松写出正确的链表代码?
上一篇文章我们已经了解过了链表的相关基础知识,现在总结几个写链表代码的技巧,如能熟练掌握这些那么就可以轻松的写出链表的代码。。。。技巧一、理解指针或引用的含义事实上链表的结构并不是很难,但是一旦将它和“引用”混在一起的话就会很难了,想要写对链表代码首先就要理解好指针。。下面会用Java语言举例子。。一段代码实例化的时候实例就可以理解为指针,指向创建的对象地址。。技巧二、警惕指针丢失和内存泄...原创 2019-09-06 20:31:55 · 265 阅读 · 0 评论 -
跳表:为什么Redis一定要用跳表来实现有序集合???
大家应该都对二分查找有所了解,但是如果数据存储在链表中就真的没法用二分查找了吗??实际上只需要稍加改造称之为跳表就可以支持了。。Redis中的有序集合就是使用跳表来实现的。那么Redis为什么选择用跳表来实现有序集合呢???如何理解跳表对于一个单链表来说即使存储的数据是有序的,想要查找到一个数据时间复杂度也是O(n)。那么如何来提高查找效率呢?每两个结点提取一个结点到上一级把抽出来的那一级叫做...原创 2019-09-07 14:21:47 · 709 阅读 · 0 评论 -
二叉树基础(上):什么样的二叉树适合用数组来存储???
带着问题学习是最有效的学习方式之一。今天的问题是:二叉树有哪几种存储方式?什么样的二叉树适合用数组来存储?树首先来看什么是“树"?再完备的定义,都没有图直观。所以通过下图来看看这些树有什么特征?”树“这种数据结构很像现实中的树,里面每个元素叫做“节点”;用来连线相邻节点之间的关系叫做”父子关系“。下面这幅图,A节点就是B节点的父节点,B节点是A节点的子节点,B、C、D三个节点的父节点是...原创 2019-09-21 14:11:59 · 806 阅读 · 0 评论 -
二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树
二叉查找树最大的特点就是:支持动态数据集合的快速插入、删除、查找操作。。。散列表也是支持这些操作的,并且散列表这些操作比二叉查找树更高效,时间复杂度是O(1)。既然有了这么高效的散列表,使用二叉树的地方是不是都可以替换成散列表呢?有没有哪些地方是散列表做不了,必须要用二叉树来做的呢???二叉查找树(Binary Search Tree)也叫做二叉搜索树,二叉查找树是为了实现快速查找而生的。二...原创 2019-09-22 16:32:21 · 332 阅读 · 0 评论 -
红黑树(上):为什么工程中都用红黑树这种二叉树???
前面的文章中依次讲了树、二叉树、二叉查找树。二叉查找树是最常用的一种二叉树,支持快速插入、删除,查找操作,各个操作时间复杂度和树的高度成正比,理想情况下时间复杂度为O(logn)。不过二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于logn的情况,从而导致各个操作效率下降。极端情况下二叉树退化为链表,时间复杂度退化到O(n)。想要解决这个复杂度退化的问题,需要设计一种平衡二叉查找树。...原创 2019-09-27 02:06:05 · 1074 阅读 · 0 评论 -
链表(上):如何实现LRU缓存淘汰算法?
今天我们来聊聊“链表”这个数据结构,链表一个经典的应用场景就是LRU缓存淘汰算法。。。缓存是一种提高数据读取性能的技术如常见的CPU缓存、数据库缓存、浏览器缓存。但是缓存的大小是有限的,当缓存满了之后需要对其中的数据进行处理,这个时候需要缓存淘汰策略来决定。。常见的策略有三种:先进先出FIFO、最少使用策略LFU、最近最少使用策略LRU。。五花八门的链表结构相比数组链表是一种稍微复杂一点的数...原创 2019-09-05 18:44:18 · 292 阅读 · 0 评论