算法

算法也是编程中非常重要的一部分。 个人认为可以说只有初学者会严格到病态的深究我学的是XXX语言,而不是XXX,并且就谁的语言更加优秀而吵起来。因为大多数语言在语法上大相径庭,但是编程的核心永远是数据结构与算法。至于语法糖或者语言特性?这些适用于提升安全性,内存管理,或者异常处理用的,不可否认给了一门语言相当重要的特色,但是他们不是编程的灵魂。

你不会拿调料当饭吃,但是没有盐和其他调味料的一餐应该也没有什么人愿意吃。在大型工程中,语言的安全特性、并发模型、内存管理可以帮助我们解决很多问题,也是及其重要的部分,就好像在安全性重要的场景完全可以考虑使用Java或者Rust这样的语言来避免溢出。但是不要忘了,这些所有高级特性都可以用汇编实现,你完全可以在Rust里折腾手操指针,在Java里硬写面向过程,但是没有意义。我们需要学习的是每一门语言的优势,并将他们融合起来。

深搜与广搜

深搜与广搜
搜索其实挺常见的,但是与搜索引擎并不一样,并不是再庞大的数据中找到匹配的(更类似的是字符串匹配),dfs与bfs更多是指在所有可能的结果中找到可用的结果和对应的路径(后者往往dfs比bfs更加自然,因为dfs常见的实现方式是递归,而bfs基本都是靠队列实现,不过下文我将使用另一种方式指出二者的共通性) dfs,即深度优先搜索,重点在于深,即一条路走到死,不行再换。这也是为什么常见递归写法的原因,附上简单的伪代码示例: 不难看出,dfs只需要记录return 1;时的选择就可以做到记录下找到结果对应的路径对的原因。而且dfs的优势在于完整遍历每一种情况,同时思维更符合人脑(方便调试) 至于bfs,广度优先搜索,则是另一种思维,先把每种路都看一遍,保证视野足够的广,正因如此,不太适合递归一类的方式,常见的是使用队列实现: bfs的优势主要在于能够找到最短路,比如Dijkstra就是典型的bfs。 但是不妨发散一下思维,递归的本质是让调用栈决定了谁先谁后的问题,所以两者本质上是高度相同的,完全可以尝试:...
算法