7、排列:如何让计算机学会“田忌赛马”你好,我是黄申。 “田忌赛马”的故事我想你肯定听过吧?田忌是齐国有名的将领,他常常和齐王赛马,可是总是败下阵来,心中非常不悦。孙膑想帮田忌一把。他把这些马分为上、中、下三等。他让田忌用自己的下等马来应战齐王的上等马,用上等马应战齐王的中等马,用中等马...2026-03-02程序员的数学基础课
8、组合:如何让计算机安排世界杯的赛程你好,我是黄申。 2018年足球世界杯结束有半年了,当时激烈的赛况你现在还记忆犹新吧?你知道这场足球盛宴的比赛日程是怎么安排的吗?如果现在你是组委会,你会怎么安排比赛日程呢?我们可以用上一节的排列思想,让全部的32支入围球队都和其他球队进行一次主客场...2026-03-02程序员的数学基础课
9、动态规划(上):如何实现基于编辑距离的查询推荐你好,我是黄申。 上一篇讲组合的时候,我最后提到了有关文本的关键字查询。今天我接着文本搜索的话题,来聊聊查询推荐(Query Suggestion)的实现过程,以及它所使用的数学思想,动态规划(Dynamic Programming)。 那什么是动态...2026-03-02程序员的数学基础课
10、动态规划(下):如何求得状态转移方程并进行编程实现你好,我是黄申。 上一节,我从查询推荐的业务需求出发,介绍了编辑距离的概念,今天我们要基于此,来获得状态转移方程,然后才能进行实际的编码实现。 状态转移方程和编程实现上一节我讲到了使用状态转移表来展示各个子串之间的关系,以及编辑距离的推导。不过,我没...2026-03-02程序员的数学基础课
11、树的深度优先搜索(上):如何才能高效率地查字典你好,我是黄申。 你还记得迭代法中的二分查找吗?在那一讲中,我们讨论了一个查字典的例子。如果要使用二分查找,我们首先要把整个字典排个序,然后每次都通过二分的方法来缩小搜索范围。 不过在平时的生活中,咱们查字典并不是这么做的。我们都是从单词的最左边的字...2026-03-02程序员的数学基础课
12、树的深度优先搜索(下):如何才能高效率地查字典你好,我是黄申。今天咱们继续聊前缀树。 上节结尾我给你留了道思考题:如何实现前缀树的构建和查询?如果你动手尝试之后,你会发现,这个案例的实现没有我们前面讲的那些排列组合这么直观。 这是因为,从数学的思想,到最终的编程实现,其实需要一个比较长的过程。我...2026-03-02程序员的数学基础课