14、树的广度优先搜索(下):为什么双向广度优先搜索的效率更高你好,我是黄申。 上一讲,我们通过社交好友的关系,介绍了为什么需要广度优先策略,以及如何通过队列来实现它。有了广度优先搜索,我们就可以知道某个用户的一度、二度、三度等好友是谁。不过,在社交网络中,还有一个经常碰到的问题,那就是给定两个用户,如何确定他...2026-03-02程序员的数学基础课
13、树的广度优先搜索(上):人际关系的六度理论是真的吗你好,我是黄申。 上一节,我们探讨了如何在树的结构里进行深度优先搜索。说到这里,有一个问题,不知道你有没有思考过,树既然是两维的,我们为什么一定要朝着纵向去进行深度优先搜索呢?是不是也可以朝着横向来进行搜索呢?今天我们就来看另一种搜索机制,广度优先搜...2026-03-02程序员的数学基础课
12、树的深度优先搜索(下):如何才能高效率地查字典你好,我是黄申。今天咱们继续聊前缀树。 上节结尾我给你留了道思考题:如何实现前缀树的构建和查询?如果你动手尝试之后,你会发现,这个案例的实现没有我们前面讲的那些排列组合这么直观。 这是因为,从数学的思想,到最终的编程实现,其实需要一个比较长的过程。我...2026-03-02程序员的数学基础课
11、树的深度优先搜索(上):如何才能高效率地查字典你好,我是黄申。 你还记得迭代法中的二分查找吗?在那一讲中,我们讨论了一个查字典的例子。如果要使用二分查找,我们首先要把整个字典排个序,然后每次都通过二分的方法来缩小搜索范围。 不过在平时的生活中,咱们查字典并不是这么做的。我们都是从单词的最左边的字...2026-03-02程序员的数学基础课
10、动态规划(下):如何求得状态转移方程并进行编程实现你好,我是黄申。 上一节,我从查询推荐的业务需求出发,介绍了编辑距离的概念,今天我们要基于此,来获得状态转移方程,然后才能进行实际的编码实现。 状态转移方程和编程实现上一节我讲到了使用状态转移表来展示各个子串之间的关系,以及编辑距离的推导。不过,我没...2026-03-02程序员的数学基础课
9、动态规划(上):如何实现基于编辑距离的查询推荐你好,我是黄申。 上一篇讲组合的时候,我最后提到了有关文本的关键字查询。今天我接着文本搜索的话题,来聊聊查询推荐(Query Suggestion)的实现过程,以及它所使用的数学思想,动态规划(Dynamic Programming)。 那什么是动态...2026-03-02程序员的数学基础课