【问题标题】:How do you "get it" when it comes to proofs? [closed]当谈到证明时,你如何“得到它”? [关闭]
【发布时间】:2010-11-23 03:06:33
【问题描述】:

当我们开始研究算法设计和更离散的计算机科学主题时,我们最终不得不一直证明事情。每次我看到有人问如何真正擅长证明时,常见的(也可能是懒惰的)答案是“练习”。

如果您掌握了基础知识,练习一切都很好,但是您如何进入数学证明的思维定势?感应何时点击?哪些资源最适合教授这些主题?在进行校对之前应该研究哪些基础主题?

【问题讨论】:

  • 过于主观和以讨论为导向。
  • @EBGreen 我不这么认为。有很多非常流行和长期存在的问题,它们都是主观的和以讨论为导向的。这是一个措辞明确的问题,它确实有一个明确的答案(即使每个人的答案不同)并且可能非常有用。如果它困扰你,也许投票使它成为一个社区 wiki 问题:)
  • 我认为这是一个有效的 CS 问题,与解决实际的日常问题密切相关。 +1
  • 我认为存在其他违反FAQ的问题并不是再次违反FAQ的理由。 “避免提出主观、争论或需要扩展讨论的问题。”在那个非常明确的 OR 语句中,这个命中了 3 分中的 2 分。
  • 问题是社区 wiki,有很多点赞和收藏,与 CS 相关。常见问题解答是网站创建者的声明,而不是社区的声明。根据常见问题解答,该站点由社区运营,尽管有主观意见(就个人经验和建议而言),但肯定可以回答问题。关闭柜台是4,但如果它关闭,我会投票支持重新开放

标签: algorithm computer-science proof


【解决方案1】:

他们不是懒惰,实践是唯一的方法。参加您必须做证明的课程,并在线查找课堂笔记和旧测试以及其他大学提供的经过证明的答案。

【讨论】:

    【解决方案2】:

    我首先要承认,作为一名 CS 学生,我很难掌握一种正式的思维方式,而且这绝非易事,除非你有这方面的天赋。

    恐怕没有比实践学习更好的答案了。

    正式的数学和算法思维和视觉问题是一种技能,首先需要对您正在处理的主题有非常深刻的理解。其次,它要求您对现有证明有很好的了解。试着把自己想象成一些伟大的科学家,他们提出了你正在研究的算法。了解您将如何尝试解决该特定问题。然后看看他们如何证明他们的算法的正确性。

    我只能推荐这门学科最好的教科书Intro to Algorithms by CLRS。如果您从头到尾完成它,包括每个练习,您提高您的技能。

    【讨论】:

    • 实践和学习非常有意义。但是,首先要学习什么是一个问题。我已经学习了算法介绍并正在研究它,但是许多证明方法似乎并不太直观。在进行此操作之前,您是否应该打好基础技能?
    • 我认为您正在寻找的基本技能是一种将问题抽象为您可以轻松“思考”的模式的能力。老实说,我不知道提高这项技能的具体方法。我们这里需要心理学家什么的:)
    【解决方案3】:

    实践确实是唯一的方法,但它也可以通过阅读证明来帮助。练习我就不说了,因为其他回答者已经涵盖了我能想到的所有内容,所以我只谈谈我的阅读意思。

    教科书非常喜欢写出“重要”的证明。它非常好,因为它们经常证明非常强大的陈述,并且真的很花哨。但正如你不应该从第一天起就通过模仿奥运选手来学习成为世界级的体操运动员(例如,你可能会折断你的脊椎),你也不应该阅读任何真正大的证​​明(一开始)。我发现阅读较小的校样很有帮助,通常来自返还的家庭作业(我假设你是学生),或者偶尔从一本可以提高智慧的教科书。

    原因我认为阅读校样是有帮助的,因为有一小部分“技巧”或“想法”构成了大量的作业校样,甚至更高级的。数据结构质量和递归关系通常涉及与归纳证明相关的思考,涉及有限状态机可计算性的证明有时使用鸽巢原理,很少使用 >diagonalization(很少见,不用担心)。当然,几乎所有其他证明都使用矛盾证明。我敢肯定还有其他方便的工具让我忘记了,但我希望你能明白。

    弄清楚何时、如何以及为什么用一种或另一种特定方法解决问题需要实践和经验。我建议在练习之外阅读证明,因为它通常可以向您展示使用您已经遇到的证明方法的创造性方法。

    最后一点,试着记住你第一次学习编程的时间。你是怎么变得更好的?在我看来,证明事物和编程事物并没有太大的不同。 :)

    【讨论】:

      【解决方案4】:

      成为一名数学家后,您就会进入进行数学证明的思维定势。我并不是说最后一个陈述以重言式的方式,而是要意识到,发表在数学期刊上的数学证明是某种修辞的产物。即,它是一个证明,因为一群数学家同意它是一个证明。理想情况下,证明中的论点都可以简化为符号逻辑,但在实践中并非如此。计算机生成的证明在进行有价值的数学运算方面完全失败,为此提供了一些证据。

      我通过做证明并让其他数学家接受它们来进入思维定势。我同意其他人的观点,即“实践”是必不可少的。除非您尝试,尝试和尝试,否则您不会做证明。通常,曙光会慢慢出现。

      最好的资源当然是其他数学家和阅读证明。很少有(如果有的话)能够在不加入数学社区的情况下进行真正的数学证明。

      【讨论】:

        【解决方案5】:

        恐怕“实践”真的是这里最好的答案。

        它与编程非常相似:一旦你掌握了它的窍门,你就会发现能够很好​​地解决问题的模式,并且你可以创建一个你以前从未实现过的新颖系统的高级设计图。然而,新手程序员并没有意识到模式:他们在代码上大打出手,直到他们不小心偶然发现了一些看似“有效”的解决方案。

        当您遇到要证明的问题时,您通常可以识别属性(“我有一组不同的对象吗?”、“我是否正在生成排列?”、“我是否希望最小化/最大化某个值? “, 等等)。迟早,证明会聚集到一个模糊相似的组中,用于解决一个问题的技术可以很容易地应用于新的变体。

        推荐阅读:

        【讨论】:

          【解决方案6】:

          我不知道。可能就像你擅长作曲一样。

          当我试图证明某件事时,我并没有遵循一些固定的策略,我只是在思考问题所在。然后 [undefined amount of time] 之后,我的脑海里返回了一个结果,我跳起来写下来。

          但是练习肯定有帮助。当我开始尝试证明极其简单的陈述时,比如德摩根定律,我完全绝望了。所以我坐下来,在给我们的工作表上做了五十个左右可选的示例问题。现在证明某事感觉很自然。

          【讨论】:

          • 我认为编辑更合理一些。在没有音乐知识的情况下,您不会创作音乐。我经常觉得我“错过了重点”。记住其他证明的工作方式很棒,但是这些证明起源于某个地方,没有其他证明可以记住,不是吗?
          【解决方案7】:

          实践和学习非常有意义,同意。一些我觉得有用的技巧:

          1. 对你所学的所有东西都做笔记(我试着只是看书——很多材料只是通过)。
          2. 除上一点外:自己做所有(或大部分)证明,以书本/讲义为指导;很多证明都包含诸如“我们现在可以看到,那个 XXX”之类的短语。而且 XXX 的结论并不总是微不足道的。
          3. 做练习;例如,在 CLRS 书中有几十个练习。练习是了解算法背后的想法/正确证明的好方法。
          4. 如果您想更好地了解算法的内部原理,请考虑参加 UVa's 等在线编程竞赛。

          【讨论】:

            猜你喜欢
            • 2013-07-15
            • 1970-01-01
            • 2011-05-08
            • 1970-01-01
            • 2015-08-11
            • 2013-02-13
            • 1970-01-01
            • 2012-01-11
            • 1970-01-01
            相关资源
            最近更新 更多