随笔- 20  文章- 0  评论- 3  阅读- 9775 

一、算法的本质

  算法的本质是【穷举】。

  这是站在计算机思维上得出的结果。计算机思维,是能够站在计算机的视角,抽象、简化实际问题,然后用编程的方式去解决问题,这是【数据结构与算法】中的算法。对比于数学思维,数学思维重点在数学建模和调参经验,计算机只是做计算的工具,这是【算法工程师】提到的算法。

  计算的特点就是快。所以大道至简,计算机解决问题就是【穷举】。如果能找到一些更巧妙地定理那最好,如果没有,那就穷举,只要复杂度允许,没有什么答案是穷举不出来的。

  但,算法问题的本质都是穷举吗?例外肯定有,类似一些一行代码就能解决的算法题,这些题目类似脑筋急转弯,都是通过观察,发现规律,最后找到最优解;再比如密码学、机器学习相关的算法,本质上是数学理论的推导。这些算法本质上是数学问题,不应该作计算机算法。

  说回穷举,穷举有2个关键点:无遗漏 和 无冗余

  遗漏会导致答案出错;冗余会拖慢算法速度。所以,一道算法题我们可以从这两个维度去考虑。

  1、如何穷举?即无遗漏的穷举出所有的可能解。

  2、如何聪明地穷举?即避免无必要的冗余计算。

  据此我们可以把算法分成两类:

  1、难点在【如何穷举】

  一般是递归类问题,最典型的就是动态规划问题。

  动态规划问题,无非是先写出暴力穷举解法(状态转移方程),加个备忘录就成自顶向下的递归解法,再改一改就成了自底向上的递推迭代解法。动态规划问题会在后文详细讨论。

  2、难点在【如何聪明地穷举】

  一些耳熟能详的非递归算法技巧,都可以归为这一类。像KMP算法、Union Find并查集算法等。

 

 posted on   Slothhh  阅读(389)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示