贪心算法知识(一)

来源:互联网 发布:论坛自动签到软件 编辑:程序博客网 时间:2024/05/16 12:55
贪心算法具有最优子问题结构,它的特点是“短视”,每次选择对当前局面最有利的决策,来一步步获得最优解。

我个人认为,贪心不是一个具体的方法,而是一类方法,贪心算法的关键不在于想到,而在于正确性的证明。要证明一个贪心算法是正确的,需要证明我们可以把一个最优解逐步转化为我们用贪心算法所得到的解,而解不会更差,从而证明贪心算法得到的解和最优解是一样好的(显然,最优解不可能更好)。而要证明一个贪心算法是错误的,只需要找到一个反例就可以了。

通常情况下,证明贪心算法是正确的或者找到贪心算法的一个反例都不那么容易。

而且即使对于同一个问题,从不同角度的贪心算法的正确性也不尽相同。例如Dijkstra算法是著名的求单源图最短路径的贪心算法。


如果我们也给出一个贪心算法,从源头开始每次选择最短的边继续走,直到走到,直到经过全部点或者无路可走。按照我们的算法,在上图中,A到C的最短路是A-B-C,它的长度是5,显然A-D-C才是真正的最短路。我们的贪心算法是错的。

所以一般对于一个问题来说,我们只讲这样一个贪心算法是错误的,而不说这个问题不能采用贪心算法——因为可能从别的角度设计出的贪心算法是正确。

1 0
原创粉丝点击