算法模式

来源:互联网 发布:软件开发的文档 编辑:程序博客网 时间:2024/05/16 11:00

  3.1 贪婪法(greedy algorithm),又称贪心算法, 是寻找最优解问题的常用方法。这种方法模式一般将求解过程分成若干个步骤,在每个步骤都应用贪心原则,选取当前状态下最好的或最优的选择(局部最有利的选择),并以此希望最后堆叠的结果也是最好或是最优的解。贪婪法的每次决策都以当前为基础并根据某个最优原则进行选择,不从整体考虑其他各种可能的情况,一般来说,这种贪心原则在各种算法模式中都会进行,单独作为一种方法来说明,是因为贪婪法对于特定的问题是非常有效的方法。

  贪婪法的设计基本思想三个步骤

(1)建立对问题精确描述的数学模型,包括定义最优解的模型;

(2)将问题分解为一系列子问题,同时定义子问题的最优解结构;

(3)应用贪心法则确定每个子问题的局部最优解,并根据最优解模型,用子问题的局部最优解堆叠出全局最优解。

  3.2 分治法(divide and conquer),  也是一种解决问题的常用模式,分治法的设计思想是将无法着手解决的大问题分解成一系列规模较小的相同问题,然后逐个解决小问题,即所谓的分而治之。 分治法产生的子问题与原始问题相同,只是规模减小,反复使用分治方法,可以使得子问题的规模不断减小,直到能够被直接求解为止。

  应用分治法,一般出于两个目的:一是通过分解问题,使无法着手解决的大问题变成容易解决的小问题;二是通过减小问题的规模,降低解决问题的复杂度(或计算量)。给1000个数排序,可能会因为问题的规模太大而无从下手,但是如果减小这个问题的规模,将问题一分为二,变成分别对两个拥有500个数的序列排序,然后再将两个排序后的序列合成一个就得到了1000个数的排序的结果。对500个数排序仍然无法下手,需要继续分解,直到最后问题的规模变成2个数排序的时候,只需要一次比较就可以确定顺序。这正是快速排序的实现思想,通过减小问题的规模使问题由难变易。计算N个采样点的离散傅里叶变换,需要

N²次复数乘法,但是将其分解成两个N/2个采样点的离散傅里叶变换,则只需要做(N/2)²+(N/2)²=N²/2次复数乘法,做一次分解就使得计算量减少了一半,这正式快速傅里叶变换的实现思想,通过减小问题的规模减少计算量,降低问题的复杂度。

0 0
原创粉丝点击