首先,以排序为例,有冒泡排序、快排、二分法、分桶或者分堆.......它的每一种排序过程背后,其实都是一种解决问题的方法。
比如说二分法,我们可以把它不断地去做切分,分成不同的堆,然后每个堆去分别去解决它。这样的话,就可以达到效率比较优的一个情况。
我们实际在做任何代码开发的时候,都可以把这种思维方式应用过来,而不是排序问题本身的实现它可以运用到工作中来。
我之前写分析引擎的时候有一个非常小的功能点,需要判断大家提交的分析查询语句是否存在前后矛盾的情况。
当时我是自己写了一个类似有向无环图的判断来解决。一开始写这个判断的时候并不能和曾经刷过的题关联起来,但在一些有变化的问题上,就发现需要用到刷算法时的解决思路了,比如怎样实现会更优雅,各种复杂度是比较小等。
这些都是你刷久了算法后,逐渐潜移默化的一个应用过程。
而机器学习算法的话,很多时候面临到的问题是,你学到的一些非常fancy ,看起来很厉害的模型,却在实际运用的时候发现都不work,效果也不好,甚至是会面临一些很厉害的模型因为性能太差根本没法上线。
这些情况都是比较常见的情况,所以在实际的工作中用到一些模型的时候,一定要理解它背后的原理和当时提出这个模型的过程。
只有了解了当时为什么会有这个模型出现?这个模型为什么这么设计?当时背后思考了什么样的问题?优缺点又都是什么?
把这些吃透,是你的第一步。
第二步是需要你在实际的业务场景下,结合当前的情况去不断做match。
比如说数据分布,你用到了什么样类型的特征?你的线上的算力和性能是什么样的?
结合过程中你实际遇到的各种问题,再去思考自己以前学到的理论,有哪些思想是可以应用到解决这个问题的?哪个模型可能和当前的数据分布更加匹配?
你的match做得越好,你就越能解决当前的实际问题。
所以,在我看来,我们学到的算法知识,你一定要把这个知识变成自己的认知,再用这个认知去解决实际工作中遇到的问题。
那么对于这个问题,其实你自己就会有答案了。