算法设计的一般方法

一、随机法

随机法依赖于随机数的统计特性。(快速排序)

快速排序:设想要对一堆的废票排序,首先将无序的一整堆分成两个部分。其中一堆里使所有的支票号码都小于等于所设定的一个中间值,另一堆里保证所有的支票号码都大于这个中间值。一旦有了这样的两队支票后,就再以同样的方式对这两堆支票重复刚才那个划分过程,直到每一堆里都只有一张支票为止。这个时候所有的支票都排好序了。(选取随机值的支票号码作为划分的标准)

二、分治法

分治法包括三个步骤:分解、求解与合并。在分解阶段,将数据分解为更小、更容易管理的部分。在求解阶段,对每个分解出的部分进行处理,在合并阶段,将每个部分处理的结果进行合并。(归并排序)。

 

三、动态规划

动态规划同分治法类似,都是将较大的问题分解为子问题最后再将结果合并。然而,它们处理问题的方式与子问题之间的关系有关。在分治法中,每一个字问题都是独立的。为此,以递归的方式解决每一个子问题,然后将结果与其他子问题的结果合并。在动态规划中,子问题之间并不是独立的。换句话说,子问题之间可能有关联,这类问题采用动态规划比分治法更合适。

 

四、贪心法

贪心法在求解问题的时候总能做出在当前的最佳选择。换句话说,不是从整体最优上考虑,而仅仅是在某种意义上的局部最优解。遗憾的是当前的最优解长远来看却未必是最优的。(霍夫曼编码)

 

霍夫曼树:从霍夫曼树的叶子节点自底向上处理,将每个要压缩的符号和他们在数据中出现的次数(频率)一起作为二叉树的根节点保存。接下来,选择两棵树拥有的最小的频率值的根节点作为左右字数节点,构造一颗新的二叉树,且保证新的二叉树节点的频率值之和。然后重复这个步骤,直到得到唯一的一棵树,这就是最终的霍夫曼树。霍夫曼树的根节点包含数据中符号的总数,叶子节点包含书中符号的总数,叶子节点包含原始的符号以及他们出现的频率。

五、近似法

近似法并不计算出最优解,相反,它只计算出 “足够好” 的解,通常利用近似法解决那些计算成本很高又因为其本身十分有价值而不愿放弃的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值