每次我开始一个难题,如果找不到确切的解决方案或不能开始,我就会和自己进行这个永无止境的讨论,如下所示:
你的想法是什么,一个人仅仅通过努力工作就能在解决问题/算法方面取得卓越的成就吗?还是你需要拥有这种额外的基因?
发布于 2010-06-12 06:03:55
我花了我生命中的很大一部分时间来思考才能到底是后天养成的,还是与生俱来的。然后我突然意识到答案是无关紧要的,至少如果你想自己实现目标的话。即使你有天分,如果你表现得好像天资只来自实践,那也只会对你有帮助,因为你会更加努力地工作。
关于算法,以及其他任何真正困难的技能,需要练习才能变得更好。我不知道你是否也要有一些才华。然而,我确实知道,人们通过练习在像TopCoder这样的比赛中取得了巨大的进步。我自己也从中学到了很多。
如果你建立了一个系统的培训计划,即使它不是完美的,你也会走在前面。到目前为止,我已经在TopCoder上写了几百个程序,它深刻地影响了我的思维。我学到了很多东西,这些东西只有通过犯错然后改正错误才能学到。我的一个朋友已经在TopCoder上写了几千个程序,他比我强得多,尽管他刚开始的时候数据比我差。这不是巧合。
编辑:
我刚在math.stackexchange遇到了this answer。我认为这是我读过的关于如何学习算法的最好的解释之一,尽管他写的是国际象棋和数学。
发布于 2010-06-12 01:58:38
1)不要试图以最一般的抽象来解决问题。
2)选择你的大脑处于最大工作状态的正确时间。
我从一位数学老师那里得到了第一点建议。它起作用了!试着做不同的例子和问题的场景。这极大地有助于识别在大多数问题中最难理解的边缘情况。
我最喜欢的解决这类问题的时间是黎明(凌晨4点到6点)。前一天晚上睡个好觉,然后醒来准备解决问题。
我确实相信有些人比其他人有额外的智慧,但这不是最重要的因素。这是你如何利用这种智能来解决问题。
发布于 2010-06-12 06:00:33
当我12岁的时候,我在一个小组环境中学习了魔术课程。魔术师的名字是乔·卡洛塔。有一次他变了个魔术,我脱口而出:“你怎么做到的?”他那天说了一些话,从那以后一直让我难忘。
乔回答说:“迈克尔,如果你真的想知道这个技巧是怎么做到的,你必须弄清楚你自己会怎么做。”
当然,这不是我想听到的,但它确实让我的注意力集中在解决问题上。从我的角度来看,这是解决问题的方式。如果我第一次尝试解决这个问题需要17个步骤,而且真的很古怪,那么好消息是我解决了这个问题。
然后,通过查看我开发的解决方案,并进一步寻找改进该解决方案的方法,我将学习如何简化最终结果。后来,在我的计算机编程生涯中,我发现这个过程被称为"Stepwise Refinement“。
它早在1971年就起作用了,今天仍然有效。
https://stackoverflow.com/questions/3024972
复制相似问题