算法设计就从实际问题出发,通过分析和思考最终得到的一个能解决问题的过程性描述的工作过程。
算法设计中一些常见的通用的想法可以称为算法设计模式。常用的算法设计模式有:
穷举法。根据具体的问题枚举出各种可能,从中选出有用的信息或者问题的解。利用计算机的速度优势可以方便的解决很多简单问题。
贪心法。根据问题的信息尽可能做出部分的解,并基于部分解逐步扩充得到完整的解。在解决复杂问题时,这种做法未必能得到最好的解。
分治法。把复杂的问题尽可能的分解成简单的子问题,分别求解,最后通过组合起子问题的解的方式 得到原问题的解。
回溯法(搜索法)。通过探索的方式求解。
动态规划法。在一些复杂的情况下,问题求解很难直截了当的进行,因此需要在前面的步骤中积累信息,在后续的步骤中,根据已知的信息,动态选择已知的最好的求解路径(同时可能进一步积累信息)。
分支限界法。可以看做搜索法的一种扩展。如果在搜索过程中可以得到一些有用的信息,确定某些可能的选择 实际上并不真正有用,就可以及早的将其删除,以缩小可能的求解空间,加速求解的过程。
注意:上述算法设计模式只是人们对经验的总结,只能借鉴,不应作为教条,其次,这些模式之间并不相互隔绝也不相互排斥。