每当我遇到一个难题并且无法弄清楚确切的解决方案或无法开始时,我就会与自己进行这种永无止境的讨论,如下所示:
那个问题解决/数学/算法技能很有天赋(不是说你可以通过练习来学习,通过练习,你只能掌握你之前已经解决过的那类问题)
只有那些上过好学校的人才能做到,因为他们很早就学会了.
你的想法是什么,只要通过努力工作或者你需要在你身上拥有那个额外的基因,你能在解决问题/算法方面取得惊人的成就吗?
Jør*_*ogh 68
我花了很长时间来思考人才是你开发的东西还是你天生的东西.然后我发现答案是无关紧要的,至少如果你想自己实现的话.即使你有天赋,如果你表现得好像只有来自练习,才能帮助你,因为你会更加努力.
关于算法,以及任何其他真正困难的技能,需要练习来获得好处.不知道你是否还需要一些人才,我不知道.然而,我确实知道,人们通过练习在TopCoder等竞赛中取得了巨大的进步.我自己从中学到了很多东西.
如果你建立了一个系统的培训计划,即使它不完美,你也会领先一步.我现在已经在TopCoder上写了几百个程序,它已经深刻地影响了我的思考.我学到了很多东西,这些东西只能通过做错而然后修正我的错误来学习.我的一个朋友已经在TopCoder上写了几千个程序,他比我更好,尽管他的数据比我的开始时更差.这不是巧合.
编辑:
我刚刚在math.stackexchange上遇到了这个答案.我认为这是如何学习我读过的算法的最佳解释之一,尽管他写的是国际象棋和数学.
Ara*_*raK 29
1)不要试图在最普遍的抽象中解决问题.
2)选择最适合你的思维方式的正确时间.
作为数学讲师的建议,我得到了第一点.有用!尝试做不同的问题示例和场景.这有助于识别在大多数问题中最难理解的边缘情况.
我最喜欢解决这类问题的时间是黎明(早上4-6点).前一天晚上睡个好觉,醒来准备好解决问题.沉默是你的朋友.
我相信有些人比其他人有更多的智力,但这不是最重要的因素.这是你如何利用这种智能来解决问题.
Mic*_*nny 18
当我十二岁的时候,我在小组环境中学习了魔法课程.魔术师的名字叫Joe Carota.他做了一次魔术,我脱口而出,"你是怎么做到的?" 从那以后,他说那天一直困扰着我的事情.
乔的回答是,"迈克尔,如果你真的想知道这个技巧是如何完成的,你必须弄清楚你将如何做到这一点."
当然,这不是我想听到的,但确实让我的注意力集中在解决问题上.这是从我的角度解决问题.如果我第一次尝试解决这个问题需要十七步并且非常笨拙,那么好消息是我解决了这个问题.
然后通过查看我开发的解决方案并进一步寻找改进该解决方案的方法,我将学习如何简化最终结果.后来在我的计算机编程生活中,我发现这个过程被称为"逐步细化".
它于1971年开始运作,至今仍然有效.
对我而言,我认为这有点天赋,但更重要的是经验和实践.如果您了解许多问题并找到最佳解决方案,那么您可以更轻松地找到解决新问题的方法.
我自己过去的例子:有一些编程竞赛(很适合培训,顺便说一句),我没有找到一个好的解决方案.获胜者主要通过使用KD树来解决问题.要想出这个,你首先需要知道什么,在这种情况下,KD-Tree是什么,以及它在哪里有用.今天,这对我来说很清楚,如果我再遇到类似的问题,我能够很快解决它.