![](https://img-blog.csdnimg.cn/20190227114851883.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法与数据结构原理详解
文章平均质量分 92
经典算法与数据结构原理分析,实际应用
Alan-zzx
燕雀安知鸿鹄之志哉
展开
-
二分查找的原理、实现与应用
基本思想猜数字游戏给定一个整数,在0~100的范围内,如何猜才能用最少次数猜中?次数猜测范围中间数对比大小第一次0-994949>20第二次0-482424>20第三次0-231717<20第四次18-2320✔我们可以通过计算得到,猜0-1原创 2018-11-29 22:28:00 · 531 阅读 · 1 评论 -
红黑树的由来,特性,原理以及适用场景分析
注意:本文不涉及红黑树的具体实现,并且默认读者已经对二叉树,二叉查找树,AVL树等已经了解并熟悉。一、平衡二叉查找树定义:树中任意一个节点的左右子树高度差不大于1。AVL树是一种严格按照定义来实现的平衡二叉查找树,所以,它的查找效率非常稳定,是O(log n),由于严格按照左右子树高度差不大于一的规则,插入和删除操作中需要大量的操作来保持树的平衡,比较耗时。因此,AVL树适用于大量查询,少...原创 2018-11-16 15:12:58 · 2819 阅读 · 0 评论 -
散列表原理及其应用
给定若干非负整数,范围是1~10000,编写程序使得查询一个数的时间复杂度为O(1)。int data[10001];void insert(int key){ data[key] = key;}int search(int key){ return data[key];}上述代码的基本思想是将每个输入的key,存放在数组的key这个位置。我们假设数组下标为a,对应位置的值为...原创 2018-11-21 22:31:46 · 332 阅读 · 0 评论 -
跳表:基于链表的二分查找
跳表是指建立了多层索引的链表,查找效率为O(log n)原创 2018-11-30 01:01:41 · 2965 阅读 · 0 评论 -
工业级字符串匹配算法:BM算法原理分析和代码实现
在文本编辑器中,如Word,记事本等,利用Ctrl+F快捷键来实现文本的查找或替换,显然,这里也用到了字符串匹配算法,但是通常情况下查找的文本对象...原创 2018-12-21 15:55:57 · 560 阅读 · 0 评论 -
数据结构_堆的原理分析以及应用场景
堆数据结构中的堆是一种特殊的二叉树,不同于Java内存模型中的堆。堆必须符合以下两个条件:是一棵完全二叉树。任意一个节点的值都大于(或小于)左右子节点的值。...原创 2018-12-11 22:06:04 · 4813 阅读 · 1 评论 -
字符串匹配:RK 算法,暴力匹配算法的优化
RK 算法的全称叫 Rabin-Karp 算法,是由它的两位发明者 Rabin 和 Karp 的名字来命名的。原创 2018-12-06 22:42:33 · 1493 阅读 · 0 评论 -
著名字符串匹配算法:KMP算法原理分析和代码实现
核心思想KMP算法,全称是 Knuth Morris Pratt 算法,核心思想与BM算法类似,假设现在有主串A,模式串B,在主串中查找模式串,在遇到不可匹配字符时,希望通过一些规律,使得模式串可以多向后滑动几位以加快匹配速度。如图,主串和模式串在匹配时遇到坏字符时,可以发现模式串往后移动一位或两位,第一个字符变不匹配,而滑动三位则正好匹配了,因此,考虑是否存在一种规则,通过遇到坏字符时的其他...原创 2019-01-06 01:50:44 · 1480 阅读 · 0 评论 -
Trie 树构造原理、应用场景与复杂度分析
Trie树构造原理字典树,又称Trie树,是一种专门用于字符串匹配的树形结构,能够高效的在一组字符串中寻找所求字符串,与红黑树,散列表类似,但是又有其优势。如何构造一颗Trie树假设我们有一组字符串:abc,adf,adrf,siab。Trie 树的本质,就是利用字符串之间的公共前缀,将重复的前缀合并在一起。如图:根节点不包含任何信息,从根节点一路往下到灰色节点,便是一个字符串。注意...原创 2019-01-07 21:33:15 · 6986 阅读 · 0 评论 -
拓扑排序原理及其实现方法
拓扑排序核心思想在一个大型Java工程中,通常存在很多类之间的依赖关系,那在编译整个项目的时候,编译器是如何确定这些类的编译顺序呢?上面的问题类似于穿衣服的顺序,例如首先要穿内衣,再是裤子,鞋子,毛衣,外套。当然顺序可以有多种并不唯一。如何确定类的编译顺序,如何得到穿衣顺序,这里面涉及到图论中的拓扑排序算法。...原创 2019-01-28 22:30:13 · 1187 阅读 · 0 评论 -
单源最短路 Dijkstra 算法原理详解、代码实现和复杂度分析
图的最短路问题图 (Graph) 是用途最广泛的数据结构之一,类似 Google 地图、百度地图等地图软件中寻找两地之间的路径,就需要将地图抽象成一张图,从图中计算得到合适的路径。图分为很多种,例如:无向图,有向图,有向加权图等等,最简单的搜索算法深度优先和广度优先搜索都是用于无向图或有向图查找路径的,而针对加权的图的最短路,这两个方法就不管用了。最短路的算法有很多种,我们今天要了解的是 D...原创 2019-02-05 20:56:43 · 28092 阅读 · 6 评论 -
多模式串匹配算法:AC 自动机原理、复杂度分析及代码实现
多模式串匹配多模式串匹配的场景常见于一些平台屏蔽某些用户的发言中的敏感词条。用字符串匹配算法找出文本中的敏感词条,并用“***”代替。虽然可以使用单模式串匹配算法逐个进行查找敏感词条,再进行替换,但是实际场景中,若敏感词的库很大,并且要匹配的文本内容很多,则匹配时长过长,很可能导致发一条消息发好久。显然这会导致用户体验下降。因此,需要一种在多个模式串下的高效匹配算法来应对这种场景。基于Tr...原创 2019-01-10 22:29:02 · 2482 阅读 · 1 评论 -
贪心算法详解:哈夫曼编码
理解贪心算法贪心算法是一种算法思想,并不是一个具体的算法,因此我们用两个例子来理解什么样的问题适合用贪心算法解决。例一现在有一个能装100g物品的背包,和一些可拆分的物品(见表格),怎么装才能使背包中物品价值最大?物品重量价值A100g100B60g120C50g150D20g50容易想到的方法是通过计算物品单价,从高到低往背包...原创 2019-01-17 16:34:35 · 5710 阅读 · 4 评论 -
回溯算法原理及其应用场景
回溯算法核心思想回溯算法中的回溯意思是回到原来的地方,回:即回去,溯:逆流而上。在这里,回溯算法是指回到上一步重新决策。假设把一个人的一生量化,当他遇到人生的岔路口的时候,如果能选择最优的抉择,那么结果将达到人生的最优,用之前我们提到的贪心算法来决策的话,并不一定能得到人生的最优,因为贪心只是选择局部最优,而人生的每一个抉择都会影响未来。如果用回溯算法,将每一个岔路口的选择都做一遍,看看哪个...原创 2019-01-23 22:49:57 · 4217 阅读 · 0 评论 -
分治算法详解:分而治之
分治算法核心思想分治算法用四个字概括就是分而治之。将原问题划分成多个小规模并且简单的子问题,这些子问题的结构与原问题相似,因此,递归的解决这些子问题,将子问题的解合并得到原问题的解。分治算法的思路与递归很相似,但是分治算法是一种算法思想,是一种处理问题的思想,而递归是一种编程技巧。所以,分治算法通常适合使用递归来实现。在使用递归实现分治算法时,有以下三步操作:将子问题分解成一系列小规模...原创 2019-01-21 20:18:27 · 2671 阅读 · 0 评论 -
布隆过滤器:实现大数据去重
位图位图法(bitmap),采用每一位来存储一种状态,通常用于存储状态比较少,数据量很大的情况。举个例子来说明一下,假设当前有十个整数(1,5,7,4,8,9,2,0,3,6),我们要判断另一个整数是否存在在这十个整数中,效率最高的做法是将这十个数据存储到数组中,表示一个数据是否存在可以用 0 或 1 来表示,如图:当我们要查找数据 11是否存在时,只需要判断A[11]是否为1就可以了。...原创 2019-02-11 21:49:01 · 3036 阅读 · 0 评论 -
朴素贝叶斯分类算法:垃圾短信的过滤原理
贝叶斯定理P(A|B) 是在 B 发生的情况下 A 发生的概率;P(A) 是 A 发生的概率;P(B|A) 是在 A 发生的情况下 B 发生的概率;P(B) 是 B 发生的概率。举个栗子说明,假设今天早上小天要出门郊游,但是发现外面天空是多云状态,那么今天会不会下雨呢,或者说多云的情况下今天下雨的概率是多少呢?事件A:今天下雨事件B:早上有云事件 A|B:早上有云,今天下雨...原创 2019-02-16 23:29:06 · 4200 阅读 · 0 评论 -
推荐系统算法原理:向量空间和欧几里得距离的应用
概述现在我们使用的一些APP都有智能推荐功能,例如抖音能够根据你的口味推荐符合你口味的短视频,网易云音乐每天会有大约三十首歌曲推荐给你,其中的私人FM功能则可以无限推荐符合你口味的歌曲,各种购物APP中,也会根据你浏览过的商品推荐你可能需要的商品。那么以上这些精准推荐是如何做到的呢?它底层的算法原理是什么呢?简单的推荐系统底层的基础原理是线性代数中的向量空间,以及欧几里得距离。向量空间向...原创 2019-02-20 22:48:16 · 2592 阅读 · 0 评论 -
MySQL数据库索引原理:B+树原理分析
数据库索引在实际开发中,通常数据都是存储在数据库中,主流的比如 MySQL,Orcale等。数据库中的索引是提高数据库查询效率的有效手段之一,那么索引是如何实现的呢?为了简化问题,我们将索引的问题抽象出来,常见的数据库操作中,有如下两条 SQL 语句:select * from student where student_id = 20182937select * from studen...原创 2019-02-25 21:59:18 · 903 阅读 · 0 评论 -
A-star 算法原理分析
搜索算法图论中,应用最广泛的就是搜索算法了,比如,深度优先搜索、广度优先搜索等。在介绍 Dijkstra 算法那篇中,除了深度优先、广度优先这种暴力搜索算法,还有一些最短路算法也可以求得最短路径,并且效率比深度、广度优先搜索高。在一些大型网络游戏中,往往存在一种场景,游戏中的你需要从当前位置走到目的地,而你只需要在地图中找到目标位置,点击即可自动寻路走过去,那么这个自动寻路的功能是怎么实现的呢...原创 2019-02-28 21:32:14 · 20037 阅读 · 0 评论 -
海量数据下的查询优化手段:索引
概述在讲 B+ 树的时候,说到 MySQL 底层依赖 B+ 树作为构建索引的数据结构。在实际开发中,即便是再复杂的业务,也逃不出增删改查这四种操作,可以抽象的理解为是对数据的存储和计算,当面对海量数据时,性能就成了最重要的指标之一,而索引是提高性能的关键手段。那么何为索引(index)呢?其实很简单,我们平时看的书或者词典通常都有目录,这个目录就是一个典型的索引,通过目录,可以快速定位到我们...原创 2019-03-14 20:48:41 · 545 阅读 · 0 评论