我正在阅读一篇关于“贪心算法”的教程,但是我很难发现它们如何解决真正的“Top Coder”问题。
如果我知道一个给定的问题可以用“贪心”算法来解决,那么编写解决方案就很容易。然而,如果没有告诉我这个问题是“贪心”的,我就无法识别它。
哪些常见属性和模式被贪心算法解决?我能否将它们归结为已知的一个“贪心”问题(例如MST)?
正式地说,你当然需要证明 matroid 属性。然而,在 topcoder 中,我认为你更想快速确定问题是否可以贪心地解决。
在这种情况下,最重要的是 最优子结构性质。为此,您必须能够发现问题可以分解成子问题,并且它们的最优解是整个问题的最优解的一部分。
当然,贪心算法问题有如此之多,几乎不可能对您的问题提供一个通用且正确的答案。因此,我的最佳建议是沿着以下方向思考:
加上大量的经验(只是这么说而已),这应该可以帮助您快速发现贪心问题。当然,您可能最终将问题分类为贪心问题,但实际上不是。在这种情况下,您只能希望在编写过长时间的代码之前意识到它。
(再次说明,我假设这是 topcoder 上下文。对于任何更现实且具有实际后果的情况,我强烈建议在选择贪心算法之前实际验证 matroid 结构。)