当我们开始进入算法设计和更多离散的计算机科学主题时,我们最终必须一直在证明事物。每当我看到有人问如何变得非常擅长证明时,常见的(也可能是懒惰的)答案就是“练习”。
如果你掌握了基础知识,那么练习就没事了,但是你如何进入数学证明的思维模式?什么时候感应点击?哪些资源最适合教授这些主题?在沉迷于校对之前应该研究哪些基础主题?
答案 0 :(得分:9)
他们不是懒惰,练习是唯一的方法。参加课程,你必须做校对,并在网上查看课堂笔记和旧测试,并获得其他大学的答案。
答案 1 :(得分:8)
我会开始回答我的回答,承认作为一名CS学生,我非常难以掌握一种正式的思维方式,除非你有天赋,否则这从来都不容易。
我担心没有比练习和学习更好的答案。
一种正式的数学和算法思维方式和愿景问题是一项技能,首先需要对您正在处理的主题有一个非常深刻的理解。其次,它要求您对现有证据有很好的了解。试着想象自己是一些伟大的科学家,他们提出了你正在研究的算法。了解您将如何尝试解决该特定问题。然后看看它们如何证明了算法的正确性。
我只能推荐这个主题中最好的教科书Intro to Algorithms by CLRS。如果你从头到尾经历它,包括每次运动,你将提高你的技能。
答案 2 :(得分:6)
实践确实是唯一的方法,但它也可以通过阅读证明来帮助。我不会涉及练习,因为其他的回答者已经涵盖了我能想到的一切,所以我只想谈谈我读到的意思。
教科书非常喜欢写出“重要”的证据。它非常好,因为它们经常被证明是非常强大的陈述,而且非常有趣。但正如你不应该从第1天开始通过模仿奥林匹克运动员来学习成为一名世界级的体操运动员(因为,你可能会打破你的脊椎),你不应该阅读任何真正的大证明(起初)。我发现有用的是阅读较小的证据,通常是从返回的家庭作业(我假设你是学生)或偶尔阅读一本教科书。
我认为阅读证明有用的原因是因为有一小部分“技巧”或“想法”构成了大量的校务证明,甚至更高级的证据。数据结构质量和递归关系通常涉及与归纳证明相关的思考,涉及有限状态机可计算性的证明有时使用鸽笼原理,而且很少有的概念>对角化(非常罕见,不用担心)。当然,几乎所有其他证据都使用通过矛盾证明。我确信还有其他方便的工具让我不知所措,但我希望你明白这一点。
了解何时,如何以及为何使用某种特定方法解决问题需要实践和经验。我建议除了练习之外阅读校对,因为它通常可以向您展示使用您已经遇到的证明方法的创造性方法。
作为最后一点,请记住您第一次学习编程的时间。你是如何变得更好的?在我看来,证明事物和编程事物并不是太不相似。 :)
答案 3 :(得分:3)
通过成为一名数学家,你进入了进行数学证明的思维模式。我并不是指在同义词方面的最后陈述,而是认识到数学证明,如数学期刊中所公布的那样,是一种修辞神器;也就是说,这是一个证据,因为一群数学家同意这是一个证明。理想情况下,证明中的论证都可以简化为符号逻辑,但这并不是在实践中如何完成的。计算机生成的证据完全没有做有价值的数学,这为此提供了一些证据。
我通过做证明并让其他数学家接受它来进入思维定势。我同意其他人的观点,即“实践”至关重要。除非您尝试,尝试并尝试,否则您不会进行校样。光通常会慢慢地消失。
当然,最好的资源是其他数学家和阅读证据。如果有的话,很少有人可以做真正的数学证明而不属于数学界。
答案 4 :(得分:2)
我担心“练习”真的是最好的答案。
它非常类似于编程:一旦掌握了它,你会发现能够特别好地解决问题的模式,你可以创建一个你以前从未实现过的新系统高级设计的图片。但是,新手程序员并不了解模式:他们会破解代码,直到他们偶然发现一些似乎“有效”的解决方案。
当您遇到问题需要证明时,您通常可以识别属性(“我有一组不同的对象吗?”,“我是否会生成排列?”,“我是否希望最小化/最大化某些值? “等等。迟早,证据会聚集成模糊相似的组,其中用于解决一个问题的技术可以很容易地应用于新的变体。
推荐阅读:
答案 5 :(得分:0)
我不知道。可能就像你擅长创作音乐一样。
当我试图证明我没有遵循一些固定的策略时,我只是想一想这个问题。然后[未定义的时间]以后,我的脑子会返回一个结果,然后我跳起来把它写下来。
但练习肯定有帮助。当我开始尝试证明非常简单的陈述时,比如德摩根的定律,我完全没有希望了。所以我坐下来在我们给出的工作表上做了大约五十个可选的示例问题。现在证明一些事情是很自然的。
答案 6 :(得分:0)
实践和学习是完全合理的,同意的。一些技巧,我发现有用: