文章分类 - 极客时间
摘要:你好,我是微扰君。 grep命令,相信使用过Linux的同学都会非常熟悉,我们常常用它在Linux上进行文本搜索操作,具体来说就是从一段文本中查找某个字符串存在的行。下面一个典型的grep的使用例子,比如我可以用它来看看自己在LeetCode上用Java做了多少题: GNU Grep 则是 grep
阅读全文
摘要:你好,我是微扰君。 你玩过井字棋的游戏吗?在一个九宫格中,双方轮流用X和O占领一个格子,某一方的O或者X三个连成一线时即可获胜。 这样一个简单井字棋的游戏,如果要让你自己写代码实现一个AI,你会怎么做呢?怎么把博弈过程清晰地表示出来呢? 实际上,许多博弈类游戏的过程,我们都可以用树来表示。根节点就是
阅读全文
摘要:你好,我是微扰君。 今天我们来学习另一个常用的算法思想,二分法。这个算法思想相信即使你没有什么开发经验也不会感到陌生,而且之前讲红黑树的时候我们也简单聊过。 不知道你有没有玩过“猜数字”的游戏。大家规定一个范围,一个人在心里想一个这个范围内的具体数字,比如一个1-100的自然数,然后另几个人来猜数字
阅读全文
摘要:你好,我是微扰君。 之前已经学习了常用数据结构的工业级实现(包括动态数组、双向链表、双端队列、栈、哈希表、红黑树、堆),从今天开始,我们来讲讲一些经典的算法思想在工程实践中的应用。 那讲哪些算法呢?我们都知道算法是一个很大的命题,也有很多分类的方式,比如就有人总结过非常经典的五类常用算法:贪婪算法、
阅读全文
摘要:你好,我是微扰君。 上一讲学习了基于红黑树的ordered_map的实现,今天我们来介绍另外一种有趣的树,heap,也就是堆。堆的应用非常广泛,我们常说的堆排序的堆就是指这种树状数据结构,除此之外还可以用来解决诸如TopK,或者合并多个有序小文件之类的问题。 堆也是我们最后一个基础数据结构容器-优先
阅读全文
摘要:你好,我是微扰君。 上一讲,我们讲到如何利用散列表解决类似“文档中不同单词计数”的问题,并以JDK中HashMap的实现为例讲解了散列表背后的思想。 单词计数这个问题最基本的解决思路就是建立一个线性的符号表,每次计数的时候,遍历符号表就可以找到对应单词的计数器,做相应的累计计数操作就可以了。 为了更
阅读全文
摘要:你好,我是微扰君。 过去四讲我们学习了STL中全部的序列式容器,数组、链表、队列、栈;今天来谈一谈另一类容器,关联式容器。所谓“关联式”,就是存储数据的时候,不只是存储元素的值本身,同时对要存储的元素关联一个键,形成一组键值对。这样在访问的时候,我们就可以基于键,访问到容器内的元素。 关联式容器本身
阅读全文
摘要:你好,我是微扰君。 目前为止,我们已经介绍了STL里的大部分序列式容器,包括vector、deque和list,也对应着数组、队列和链表这几种基础数据结构;今天我们来学习最后一种常用的线性数据结构,栈。 栈这个词,相信每一个研发同学在学习编程的过程中都会经常听到。不仅仅是因为栈本身就是一种基础的、常
阅读全文
摘要:你好,我是微扰君。 目前我们已经学习了 vector 动态数组和 list 双向链表两种STL中的序列式容器了,今天我们继续学习另一种常见的序列式数据结构,双端队列。 在并行计算中,我们常常会用多进程处理一些复杂的计算任务。为了能够通过多进程加速计算,我们除了需要对任务进行合理的切分,也需要将任务合
阅读全文
摘要:你好,我是微扰君。 在上一讲实现的一个简易银行账户管理系统中,每个账号都对应了一个余额,系统支持用户的开通、存/取款和查询余额。我们使用动态数组容器满足了频繁随机访问查询的需求。 但是如果要在系统里支持删除的功能,就会有一个问题:我们为了不进行整体的数组移动操作,通常就只能保留这个用户在数组里占用的
阅读全文
摘要:你好,我是微扰君。今天我们进入第一章基础数据结构的学习。 计算机程序一直以来最根本的作用就是处理数据。即使在早期的计算机中,计算就已经不仅仅是几个数字之间的加减乘除那么简单了,经常需要处理大量线性存储的数据,一个很好的例子就是向量乘法。显然,我们需要找到一种合适的方式在计算机中存储这些信息,并能让我
阅读全文
摘要:你好,我是微扰君。 相信你每天都会使用Git,作为一款免费、开源的分布式版本控制系统,Git最初是 Linus Torvalds 为了帮助管理 Linux 内核开源协作而开发的,随着GitHub的流行和Git本身的系统优势,它也渐渐成为我们广大研发人员日常工作中必不可少的版本管理利器。 在使用Git
阅读全文
摘要:你好,我是黄清昊,毕业于上海交通大学信息工程专业,Hashdata 数据库内核工程师,公众号微扰理论作者。 在LeetCode上,我还有一个名字叫“微扰理论”(之后就以微扰君自称),刷了800多道题,贡献了200多篇优质算法题解,可以说对算法学习很有心得了。 提到算法,不知道你有没有这样的疑惑。之前
阅读全文
摘要:专栏到今天真的要结束了。在写这篇结束语的时候,我的心情还是蛮复杂的,既有点如释重负,又有点不舍。如释重负,是因为我自己对专栏的整体质量非常满意;不舍,是因为我还想分享更多“压箱底”的东西给你。 专栏是在2018年9月发布的。在发布后的两三天时间里,就有2万多人订阅,同时也引来了很多争议。有人说,我就
阅读全文
摘要:大家好,我是zixuan,在一家国内大型互联网公司做后端开发,坐标深圳,工作5年多了。今天和大家分享一下,我学习专栏的一些心得体会。 随着年龄的增长,我经历了不少业务、技术平台、中间件等多种环境和编程工具的迭代变更。与此同时,我越来越意识到,要做一名优秀的程序员,或者说,能够抵御年龄增长并且增值的程
阅读全文
摘要:比尔·盖茨曾说过:“如果你自以为是一个很好的程序员,请去读读Donald E. Knuth的《计算机程序设计艺术》吧……要是你真把它读下来了,就毫无疑问可以给我递简历了。”虽然比尔·盖茨推荐的是《计算机程序设计艺术》这本书,但是本质却折射出了算法的重要性。 大家好,我是Jerry银银,购买过算法专栏
阅读全文
摘要:你好,我是王争。今天是节后的第一个工作日,也是我们“春节七天练”的最后一篇。 几种算法思想必知必会的代码实现 回溯 利用回溯算法求解八皇后问题 利用回溯算法求解0-1背包问题 分治 利用分治算法求一组数据的逆序对个数 动态规划 0-1背包问题 最小路径和(详细可看@Smallfly整理的 Minim
阅读全文
摘要:你好,我是王争。初六好! 为了帮你巩固所学,真正掌握数据结构和算法,我整理了数据结构和算法中,必知必会的30个代码实现,分7天发布出来,供你复习巩固所用。今天是第六篇。 和之前一样,你可以花一点时间,来手写这些必知必会的代码。写完之后,你可以根据结果,回到相应章节,有针对性地进行复习。做到这些,相信
阅读全文
摘要:你好,我是王争。春节假期进入尾声了。你现在是否已经准备返回工作岗位了呢?今天更新的是测试题的第五篇,我们继续来复习。 关于二叉树和堆的7个必知必会的代码实现 二叉树 实现一个二叉查找树,并且支持插入、删除、查找操作 实现查找二叉查找树中某个节点的后继、前驱节点 实现二叉树前、中、后序以及按层遍历 堆
阅读全文
摘要:你好,我是王争。初四好! 为了帮你巩固所学,真正掌握数据结构和算法,我整理了数据结构和算法中,必知必会的30个代码实现,分7天发布出来,供你复习巩固所用。今天是第四篇。 和昨天一样,你可以花一点时间,来完成测验。测验完成后,你可以根据结果,回到相应章节,有针对性地进行复习。 前几天的内容。如果你错过
阅读全文