我在某些文本中看到了关于算法分析和设计的剪切和粘贴证据的引用。在为优化问题证明最优子结构时,通常会在动态规划的上下文中提及它(参见第15.3章CLRS)。它还显示了图形操作。
此类证明的主要思想是什么?我如何使用它们来证明算法的正确性或特定方法的便利性?
答案 0 :(得分:22)
“剪切和粘贴”这个术语有时会在进行动态编程时显示在算法中(其他事情也是如此,但这是我第一次看到它的地方)。我们的想法是,为了使用动态编程,您尝试解决的问题可能具有某种底层冗余。您使用表或类似技术来避免一遍又一遍地解决相同的优化问题。当然,在开始尝试使用动态编程之前,最好先证明问题中存在这种冗余,否则你不会通过使用表来获得任何东西。这通常被称为“最佳子问题”属性(例如,在CLRS中)。
“剪切和粘贴”技术是一种证明问题具有此属性的方法。特别是,您希望表明当您提出问题的最佳解决方案时,您必须使用组成子问题的最佳解决方案。证据是矛盾的。假设您通过使用次优问题的次优解决方案来提出问题的最佳解决方案。然后,如果您使用最佳子问题解决方案(通过“粘贴”它们)替换(“剪切”)那些次优的子问题解决方案,您将改进最佳解决方案。但是,由于您的解决方案是假设的最佳解决方案,因此您会产生矛盾。这样的证明还涉及其他一些步骤,但那就是“剪切和粘贴”部分。
答案 1 :(得分:2)
剪切和粘贴是一种用于校对图论理论概念的方法,理念是:假设你有问题A的解决方案,你想说一些边缘/节点,应该在解决方案中可用。您将假设您没有指定边缘/节点的解决方案,您尝试通过切割边缘/节点并粘贴指定的边缘/节点来重建解决方案,并说新解决方案的好处至少与先前的解决方案相同。
其中一个最重要的样本证明了MST属性(证明贪婪的选择足够好)。见presentation on MST from CLRS book。
答案 2 :(得分:2)
矛盾证明
P被假定为假,即!P为真。
显示出!P意味着两个相互矛盾的断言,Q和!Q。
由于Q和!Q不能同时为真,因此P为假的假设必定是错误的,并且P必须为真。
答案 3 :(得分:1)
'cut-and-paste'技术可用于证明贪婪算法的正确性(最优结构和贪婪选择属性)和动态编程算法的正确性。
本讲座注释来自MIT 2005的Correctness of MST本科算法类展示了“剪切和粘贴”技术,以证明最佳结构和贪婪选择属性。
本讲座从2015年春季麻省理工学院6.046J / 18.410J开始,使用'剪切 - 粘贴'技术来证明贪婪选择属性
CLRS(第3版)第15.3章动态规划元素第379页介绍了“剪切和粘贴”的更真实的解释
“4。您表明在问题的最佳解决方案中使用的子问题的解决方案本身必须通过使用”剪切和粘贴“来实现最佳 你可以假设每个子问题解决方案都不是最优的,然后得出一个矛盾。特别是,通过“删除”非最优子问题解决方案并“粘贴”最优解决方案,您可以证明您可以更好地解决原始问题,从而与您已经拥有最佳解决方案的假设相矛盾。如果存在多个子问题,它们通常非常相似,可以很容易地修改其中一个的剪切和粘贴参数。“