算法范式:为问题构建高效解决方案的常规方法。
本文讨论一些常用的算法范式,例如
在排序算法中,合并和快速排序这两种算法的共同点就是分而治之的算法。
分而治之是一种常见的算法设计,它的思路是把问题分解为与原始问题相似的较小子问题。通常以递归方式解决子问题,并结合子问题的解决方案来解决原始问题。
分治法的逻辑可以分为三个步骤:
下面是用分治实现的二叉搜索。
动态规划是一种优化技术,用于通过把复杂问题分解为较小的子问题来解决。看上去很像是分治法,但动态规划不是把问题分解为独立的子问题然后再组合在一起,而是只把问题分解为独立的子问题。
算法逻辑分为三个步骤:
这是一个名为为硬币找零问题的常见面试题。硬币找零问题是给定找零的金额,找出可以用多少特定数量的硬币来找零的方式。最小硬币找零问题只是找到使用给定面额的钱所需的最少硬币数量。例如,如果需要找零3毛7分,则可以使用1个2分,1个5分,1个1毛钱和1个2毛钱。
上面用动态规划解决的硬币问题也可以用贪心算法解决。这个解决方案的是否能得到最优解取决于所采用的面额。
贪心算法比动态规划算法要简单而且更快,但是得到的有可能不是最优解。
回溯算法非常适合逐步查找和构建解决方案。
算法是永无止境的,希望本文能帮你了解一些常见的算法范式。
THE END