13、树的广度优先搜索(上):人际关系的六度理论是真的吗

你好,我是黄申。 上一节,我们探讨了如何在树的结构里进行深度优先搜索。说到这里,有一个问题,不知道你有没有思考过,树既然是两维的,我们为什么一定要朝着纵向去进行深度优先搜索呢?是不是也可以朝着横向来进行搜索呢?今天我们就来看另一种搜索机制,广度优先搜...

程序员的数学基础课

14、树的广度优先搜索(下):为什么双向广度优先搜索的效率更高

你好,我是黄申。 上一讲,我们通过社交好友的关系,介绍了为什么需要广度优先策略,以及如何通过队列来实现它。有了广度优先搜索,我们就可以知道某个用户的一度、二度、三度等好友是谁。不过,在社交网络中,还有一个经常碰到的问题,那就是给定两个用户,如何确定他...

程序员的数学基础课

15、从树到图:如何让计算机学会看地图

你好,我是黄申。 我们经常使用手机上的地图导航App,查找出行的路线。那计算机是如何在多个选择中找到最优解呢?换句话说,计算机是如何挑选出最佳路线的呢? 前几节,我们讲了数学中非常重要的图论中的概念,图,尤其是树中的广度优先搜索。在广度优先的策略中,...

程序员的数学基础课

16、时间和空间复杂度(上):优化性能是否只是“纸上谈兵”

你好,我是黄申。 作为程序员,你一定非常清楚复杂度分析对编码的重要性。计算机系统从最初的设计、开发到最终的部署,要经过很多的步骤,而影响系统性能的因素有很多。我把这些因素分为三大类:算法理论上的计算复杂度、开发实现的方案和硬件设备的规格。 如果将整个...

程序员的数学基础课

17、时间和空间复杂度(下):如何使用六个法则进行复杂度分析

你好,我是黄申,今天我们接着聊复杂度分析的实战。 上一讲,我从数学的角度出发,结合自身经验给你总结了几个分析复杂度的法则。但是在实际工作中我们会碰到很多复杂的问题,这个时候,正确地运用这些法则并不是件容易的事。今天,我就结合几个案例,教你一步步使用这...

程序员的数学基础课

18、总结课:数据结构、编程语句和基础算法体现了哪些数学思想

你好,我是黄申。 之前的17讲,我们从小处着眼,介绍了离散数学中最常用的一些知识点。我讲到了很多数据结构、编程语句和基础性算法。这些知识点看似是孤立的,但是内部其实有很多联系。今天这一节,我们就来总结一下前面讲过的内容,把之前讲过的内容串联起来。 数...

程序员的数学基础课
123459