算法设计中一些常见的通用想法可以称为算法设计模式。常见模式包括∶
1.贪心法
贪心法是一种典型的算法设计思路(或称算法设计模式),其中的基本想法就是根据当时掌握的信息,尽可能地向得到解的方向前进,直到不能继续再换一个方向。这样做通常不能找到最优解,但能找到"可接受的"解,即给出一种较好的分组。对于—个复杂的问题,全面考虑的工作代价可能太高,为得到实际可用的算法,常常需要在最优方面做出妥协。
2.分治法
分治法。把复杂问题分解为相对简单的子问题,分别求解,最后通过组合起子问题的解的方式得到原问题的解。
3.动态规划
动态规划法。在一些复杂情况下,问题求解很难直截了当地进行,因此需要在前面的步骤中积累信息,在后续步骤中根据已知信息,动态选择已知的最好求解路径(同时可能进一步积累信息)。这种算法模式被称为动态规划。
4.回溯(搜索)法
回溯法(搜索法)。专指通过探索的方式求解。如果问题很复杂,没有清晰的求解路径,可能就需要分步骤进行,而每一步骤又可能有多种选择。在这种情况下,只能采用试探的方式,根据实际情况选择一个可能方向。当后面的求解步骤无法继续时,就需要退回到前面的步骤,另行选择求解路径,这种动作称为回溯。
5.枚举
枚举和选择(选优):根据问题,设法枚举出所有可能的情况。 首先筛选出问题的解(为此需要判断枚举生成的结果是否为问题的解),而后从得到的解中找出最优解(这一步需要能评价解的优劣)。 这种方法利用计算机的速度优势,在解决简单问题时十分有效
6.分支限界法
分支限界法。可以看作搜索方法的一种改良形式。如果在搜索过程中可以得到一些信息,确定某些可能的选择实际上并不真正有用,就可以及早将其删除,以缩小可能的求解空间,加速问题求解过程。