![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
说的就是你吧
脚踏实地 逐步执行下一个三年计划
展开
-
很重要很底层又很难的算法-1
昨天下午闲着没事刷公众号,看到了一篇关于算法的介绍,之前就见过那个课程,但是没报名,昨天又看到了,一激动就报了名,报名之后看了前几章,说的算法都不懂啊,有的听都没听说过(本人非计算机专业,培训半年出道),后来想买都买了,不能浪费了,就在这准备把每章课程都copy过来,以后看不看吧,先放这。课程背景算法在程序中扮演着非常重要的角色,有人将数据结构比喻为程序的骨架,将算法比喻为程序的灵魂,这一...转载 2018-09-12 12:29:52 · 2661 阅读 · 0 评论 -
极客时间——数据结构与算法(35):Trie树:如何实现搜索引擎的搜索关键词提示功能?
转载地址:https://time.geekbang.org/column/article/72414搜索引擎的搜索关键词提示功能,我想你应该不陌生吧?为了方便快速输入,当你在搜索引擎的搜索框中,输入要搜索的文字的某一部分的时候,搜索引擎就会自动弹出下拉框,里面是各种关键词提示。你可以直接从下拉框中选择你要搜索的东西,而不用把所有内容都输入进去,一定程度上节省了我们的搜索时间。尽管这个...转载 2019-03-05 13:28:55 · 600 阅读 · 0 评论 -
极客时间——数据结构与算法(36):AC自动机:如何用多模式串匹配实现敏感词过滤功能?
转载地址:https://time.geekbang.org/column/article/72810很多支持用户发表文本内容的网站,比如 BBS,大都会有敏感词过滤功能,用来过滤掉用户输入的一些淫秽、反动、谩骂等内容。你有没有想过,这个功能是怎么实现的呢?实际上,这些功能最基本的原理就是字符串匹配算法,也就是通过维护一个敏感词的字典,当用户输入一段文字内容之后,通过字符串匹配算法,来查找...转载 2019-03-05 13:34:45 · 409 阅读 · 0 评论 -
极客时间——数据结构与算法(37):贪心算法:如何用贪心算法实现Huffman压缩编码?
转载地址:https://time.geekbang.org/column/article/73188基础的数据结构和算法我们基本上学完了,接下来几节,我会讲几种更加基本的算法。它们分别是贪心算法、分治算法、回溯算法、动态规划。更加确切地说,它们应该是算法思想,并不是具体的算法,常用来指导我们设计具体的算法和编码等。贪心、分治、回溯、动态规划这 4 个算法思想,原理解释起来都很简单,但是要...转载 2019-03-05 16:40:02 · 656 阅读 · 0 评论 -
LeetCode03:寻找给定字符串最长子串(不含重复字符)
转载地址:https://www.cnblogs.com/ariel-dreamland/p/8668286.html题目描述:给定一个字符串,找出不含有重复字符的最长子串的长度。示例:给定"abcabcbb",没有重复字符的最长子串是"abc",那么长度就是3。给定"bbbbb",最长的子串就是"b",长度是1。给定"pwwkew",最长子串是"...转载 2019-03-25 12:24:50 · 2383 阅读 · 0 评论 -
极客时间——数据结构与算法(39) 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想
转载地址:https://time.geekbang.org/column/article/74287我们在第 31 节提到,深度优先搜索算法利用的是回溯算法思想。这个算法思想非常简单,但是应用却非常广泛。它除了用来指导像深度优先搜索这种经典的算法设计之外,还可以用在很多实际的软件开发场景中,比如正则表达式匹配、编译原理中的语法分析等。除此之外,很多经典的数学问题都可以用回溯算法解决,比如...转载 2019-04-10 12:10:39 · 726 阅读 · 0 评论 -
极客时间——数据结构与算法(40) 初识动态规划:如何巧妙解决“双十一”购物时的凑单问题?
转载地址:https://time.geekbang.org/column/article/74788淘宝的“双十一”购物节有各种促销活动,比如“满 200 元减 50 元”。假设你女朋友的购物车中有 n 个(n>100)想买的商品,她希望从里面选几个,在凑够满减条件的前提下,让选出来的商品价格总和最大程度地接近满减条件(200 元),这样就可以极大限度地“薅羊毛”。作为程序员的你,能不...转载 2019-04-10 20:01:23 · 482 阅读 · 0 评论 -
极客时间——数据结构与算法(41) 动态规划理论:一篇文章带你彻底搞懂最优子结构、无后效性和重复子问题
转载地址:https://time.geekbang.org/column/article/75702上一节,我通过两个非常经典的问题,向你展示了用动态规划解决问题的过程。现在你对动态规划应该有了一个初步的认识。今天,我主要讲动态规划的一些理论知识。学完这节内容,可以帮你解决这样几个问题:什么样的问题可以用动态规划解决?解决动态规划问题的一般思考过程是什么样的?贪心、分治、回溯、动态规划这...转载 2019-04-11 17:36:52 · 486 阅读 · 0 评论 -
极客时间——数据结构与算法(42) 动态规划实战:如何实现搜索引擎中的拼写纠错功能?
转载地址:https://time.geekbang.org/column/article/75794在Trie 树那节我们讲过,利用 Trie 树,可以实现搜索引擎的关键词提示功能,这样可以节省用户输入搜索关键词的时间。实际上,搜索引擎在用户体验方面的优化还有很多,比如你可能经常会用的拼写纠错功能。当你在搜索框中,一不小心输错单词时,搜索引擎会非常智能地检测出你的拼写错误,并且用对应的正...转载 2019-04-15 16:59:52 · 540 阅读 · 0 评论 -
极客时间——数据结构与算法(44) 最短路径:地图软件是如何计算出最优出行路径的?
基础篇的时候,我们学习了图的两种搜索算法,深度优先搜索和广度优先搜索。这两种算法主要是针对无权图的搜索算法。针对有权图,也就是图中的每条边都有一个权重,我们该如何计算两点之间的最短路径(经过的边的权重和最小)呢?今天,我就从地图软件的路线规划问题讲起,带你看看常用的最短路径算法(Shortest Path Algorithm)。像 Google 地图、百度地图、高德地图这样的地图软件,我想你应...转载 2019-04-17 09:57:23 · 2594 阅读 · 0 评论 -
极客时间——数据结构与算法(43) 拓扑排序:如何确定代码源文件的编译依赖关系?
从今天开始,我们就进入了专栏的高级篇。相对基础篇,高级篇涉及的知识点,都比较零散,不是太系统。所以,我会围绕一个实际软件开发的问题,在阐述具体解决方法的过程中,将涉及的知识点给你详细讲解出来。所以,相较于基础篇“开篇问题 - 知识讲解 - 回答开篇 - 总结 - 课后思考”这样的文章结构,高级篇我稍作了些改变,大致分为这样几个部分:“问题阐述 - 算法解析 - 总结引申 - 课后思考”。好...转载 2019-04-17 09:57:38 · 511 阅读 · 0 评论 -
极客时间——数据结构与算法(45) 位图:如何实现网页爬虫中的URL去重功能?
转载地址:https://time.geekbang.org/column/article/76827网页爬虫是搜索引擎中的非常重要的系统,负责爬取几十亿、上百亿的网页。爬虫的工作原理是,通过解析已经爬取页面中的网页链接,然后再爬取这些链接对应的网页。而同一个网页链接有可能被包含在多个页面中,这就会导致爬虫在爬取的过程中,重复爬取相同的网页。如果你是一名负责爬虫的工程师,你会如何避免这些重复的...转载 2019-05-21 16:32:56 · 571 阅读 · 0 评论 -
极客时间——数据结构与算法(34):字符串匹配基础(下):如何借助BM算法轻松理解KMP算法?
转载地址:https://time.geekbang.org/column/article/71845上一节我们讲了 BM 算法,尽管它很复杂,也不好理解,但却是工程中非常常用的一种高效字符串匹配算法。有统计说,它是最高效、最常用的字符串匹配算法。不过,在所有的字符串匹配算法里,要说最知名的一种的话,那就非 KMP 算法莫属。很多时候,提到字符串匹配,我们首先想到的就是 KMP 算法。尽管...转载 2019-03-05 13:23:41 · 244 阅读 · 0 评论 -
极客时间——数据结构与算法(33):字符串匹配基础(中):如何实现文本编辑器中的查找功能?
转载地址:https://time.geekbang.org/column/article/71525文本编辑器中的查找替换功能,我想你应该不陌生吧?比如,我们在 Word 中把一个单词统一替换成另一个,用的就是这个功能。你有没有想过,它是怎么实现的呢?当然,你用上一节讲的 BF 算法和 RK 算法,也可以实现这个功能,但是在某些极端情况下,BF 算法性能会退化的比较严重,而 RK 算法需...转载 2019-03-04 20:46:24 · 359 阅读 · 0 评论 -
极客时间——数据结构与算法(11):排序(上):为什么插入排序比冒泡排序更受欢迎?
转载地址:https://time.geekbang.org/column/article/41802排序对于任何一个程序员来说,可能都不会陌生。你学的第一个算法,可能就是排序。大部分编程语言中,也都提供了排序函数。在平常的项目中,我们也经常会用到排序。排序非常重要,所以我会花多一点时间来详细讲一讲经典的排序算法。排序算法太多了,有很多可能你连名字都没听说过,比如猴子排序、睡眠排序、...转载 2019-01-07 13:34:16 · 205 阅读 · 0 评论 -
很重要很底层又很难的算法-2-如何“玩”算法
既然是“玩”算法,首先要会玩,否则只会被算法“玩死”。很多朋友啃完了《算法》、《算法导论》或其他算法书籍,对各种排序、搜索、遍历等常用算法了如指掌,但是遇到实际的问题时还是束手无策,这与智力无关,这其实就是经验和方法集的问题。很多啃过算法书的朋友都知道堆排序和最大最小堆,但是却不能有效地应用到实际问题中。例如,某算法书介绍 Dijkstra 算法时,提到当问题规模比较大时,每次查找 dist 数...转载 2018-09-12 16:17:52 · 730 阅读 · 0 评论 -
极客时间——数据结构与算法(2)
当我们要谈一个事物/概念的时候,需要问自己三个终极问题--是什么?为什么?怎么样?什么是数据结构和算法数据结构,就是一组数据的存储结构。算法,就是操作数据的一组方法。数据结构是为算法服务的,算法要作用在特定的数据结构之上。为什么需要数据结构和算法来谈谈应用层面的原因。在计算机科学和互联网迅猛发展下,需要计算的数据量越来越庞大。但是计算机的计算能力是有限的,这么大量的数据计算,需要越...转载 2018-11-04 18:07:54 · 699 阅读 · 0 评论 -
极客时间——数据结构与算法(3)
一、什么是复杂度分析?1.数据结构和算法解决是“如何让计算机更快时间、更省空间的解决问题”。2.因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。3.分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度。4.复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。二、为什么要进行复杂度分析?1.和性能测试相比,复杂度分析有不依赖执行环境、成本低、效...转载 2018-11-04 18:16:57 · 295 阅读 · 0 评论 -
极客时间——数据结构与算法(4)
一、复杂度分析的4个概念1.最坏情况时间复杂度:代码在最理想情况下执行的时间复杂度。2.最好情况时间复杂度:代码在最坏情况下执行的时间复杂度。3.平均时间复杂度:用代码在所有情况下执行的次数的加权平均值表示。4.均摊时间复杂度:在代码执行的所有复杂度情况中绝大部分是低级别的复杂度,个别情况是高级别复杂度且发生具有时序关系时,可以将个别高级别复杂度均摊到低级别复杂度上。基本上均摊结果就等...转载 2018-11-04 18:29:51 · 277 阅读 · 0 评论 -
极客时间——数据结构与算法(6)
一、什么是链表?1.和数组一样,链表也是一种线性表。2.从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。二、为什么使用链表?即链表的特点1.插入、删除数据效率高O(1)级别(只需更改指针指向即可),随机访问效...转载 2018-11-04 19:06:54 · 164 阅读 · 0 评论 -
极客时间——数据结构与算法(7):如何轻松写出正确的链表代码?
链表的基础知识很简单,但是 想要写好链表代码并不是容易的事儿,尤其是那些复杂的链表操作,比如链表反转、有序链表合并等。下面推荐几个写链表代码的技巧:技巧一:理解指针或引用的含义事实上,看懂链表的结构并不是很难,但是一旦把它和指针混在一起,就很容易让人摸不着头脑。所以,要想写对链表代码,首先就要理解好指针。 我们知道,有些语言有“指针”的概念,比如 C 语言;有些语言没有指针,取而代之...转载 2019-01-05 10:49:51 · 182 阅读 · 0 评论 -
极客时间——数据结构与算法(8):栈:如何实现浏览器的前进和后退功能??
转载地址:https://time.geekbang.org/column/article/41222浏览器的前进、后退功能,我想你肯定很熟悉吧? 当你依次访问完一串页面 a-b-c 之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面 b 和 a。当你后退到页面 a,点击前进按钮,就可以重新查看页面 b 和 c。但是,如果你后退到页面 b 后,点击了新的页面 d,那就无法再通过前...转载 2019-01-06 20:55:55 · 354 阅读 · 1 评论 -
极客时间——数据结构与算法(9):队列:队列在线程池等有限资源池中的应用
转载地址:https://time.geekbang.org/column/article/41330 我们知道,CPU 资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反而会导致 CPU 频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设置的。 当我们向固定大小的线程池中请求一个线程时,如果线程池中没有空闲资源了,...转载 2019-01-06 21:14:44 · 289 阅读 · 0 评论 -
极客时间——数据结构与算法(10):递归:如何用三行代码找到“最终推荐人”?
转载地址:https://time.geekbang.org/column/article/41440 推荐注册返佣金的这个功能我想你应该不陌生吧?现在很多 App 都有这个功能。这个功能中,用户 A 推荐用户 B 来注册,用户 B 又推荐了用户 C 来注册。我们可以说,用户 C 的“最终推荐人”为用户 A,用户 B 的“最终推荐人”也为用户 A,而用户 A 没有“最终推荐人”。 ...转载 2019-01-06 21:53:18 · 282 阅读 · 0 评论 -
极客时间——数据结构与算法(12):排序(下):如何用快排思想在O(n)内查找第K大元素?
转载地址:https://time.geekbang.org/column/article/41913 归并排序和快速排序都用到了分治思想,非常巧妙。我们可以借鉴这个思想,来解决非排序的问题,比如:如何在 O(n) 的时间复杂度内查找一个无序数组中的第 K 大元素?归并排序的原理我们先来看归并排序(Merge Sort)。归并排序的核心思想还是蛮简单的。如果要排序一个数组,...转载 2019-01-12 13:29:21 · 261 阅读 · 0 评论 -
极客时间——数据结构与算法(46) 概率统计:如何利用朴素贝叶斯算法过滤垃圾短信?
转载地址:https://time.geekbang.org/column/article/77142上一节我们讲到,如何用位图、布隆过滤器,来过滤重复的数据。今天,我们再讲一个跟过滤相关的问题,如何过滤垃圾短信?垃圾短信和骚扰电话,我想每个人都收到过吧?买房、贷款、投资理财、开发票,各种垃圾短信和骚扰电话,不胜其扰。如果你是一名手机应用开发工程师,让你实现一个简单的垃圾短信过滤功能以及骚...转载 2019-05-21 17:15:30 · 328 阅读 · 0 评论