贪心法与拟阵的贪心算法

贪心法

贪心法和分治法、动态规划一样,也属于分治策略这个大框架。先简单回顾分治法和动态规划,两者在求解子问题时,都要先解出其依赖的所有“子子问题”,然后基于此得到当前子问题的解。而贪心算法在求解子问题时,则是先做“目前看来最优的选择”,然后再求解子问题。这意味着贪心算法在不知道“子子问题”的解的情况下求出了“部分解”。那么对于原问题,除了要存在分治算法和动态规划算法(最优子结构),还要有“更强的性质”才能有贪心算法,称为贪心选择性

经典的(01)背包问题是没有贪心选择性质的,如果以“每次取价值最大的物品”的策略求解,得到的解可能不是总价值最大的解,并且也没有其他的贪心策略能求解。但如果背包里的物品是可分割的(这时也称为部分背包问题),就是能取物品的2%、0.3%,那么上述贪心策略就能找到最优解,也就是说部分背包问题具有贪心选择性质,这是个很显然的结论不需要证明。这里稍微提一个细节,计算机是不好直接处理无理数小数和循环小数的,但把有理数用二元组表示就能解决这个问题,而由于解的每一项都能写成关于输入的算数表达式,所以只要输入都是有理数那么这个问题就好用计算机直接求解。

在用贪心法解决问题前,必须先确定问题有贪心选择性质,这相比分治法和动态规划而言,可能需要更多的数学推导。但如果问题有贪心选择性质, 也找到了贪心算法,那么其性能往往优于分治算法和动态规划算法。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部