Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 问题解决/算法技能是一种诀窍还是可以通过实践来培养?_Algorithm - Fatal编程技术网

Algorithm 问题解决/算法技能是一种诀窍还是可以通过实践来培养?

Algorithm 问题解决/算法技能是一种诀窍还是可以通过实践来培养?,algorithm,Algorithm,每次我开始一个困难的问题,如果无法找到确切的解决方案或无法开始,我就会与自己进行这场永无止境的讨论,如下所示: 那个问题 解决/数学/算法技能 你很有天赋(不是你能学会的 通过练习,通过练习,你只需要 掌握你需要解决的问题 (以前已经解决过) 只有那些上过好学校的人才能做到这一点,因为他们很早就学会了 你的想法是什么,一个人能通过努力工作在解决问题/算法方面取得惊人的成就吗?还是你需要有额外的基因?对我来说,我认为这有点天赋,但更重要的是经验和实践。如果你知道许多问题以及解决这些问题的最佳方

每次我开始一个困难的问题,如果无法找到确切的解决方案或无法开始,我就会与自己进行这场永无止境的讨论,如下所示:

  • 那个问题 解决/数学/算法技能 你很有天赋(不是你能学会的 通过练习,通过练习,你只需要 掌握你需要解决的问题 (以前已经解决过)

  • 只有那些上过好学校的人才能做到这一点,因为他们很早就学会了


你的想法是什么,一个人能通过努力工作在解决问题/算法方面取得惊人的成就吗?还是你需要有额外的基因?

对我来说,我认为这有点天赋,但更重要的是经验和实践。如果你知道许多问题以及解决这些问题的最佳方案,你就可以更容易地找到新问题的解决方案

来自我自己过去的例子:有一些编程竞赛(顺便说一句,对培训很好),我没有找到一个好的解决方案。获胜者主要通过使用KD树来解决问题。要实现这一点,首先需要知道KD树是什么,在这种情况下,它在哪里有用。今天,我很清楚这一点,如果我再次遇到类似的问题,我会很快解决它。

1)不要试图用最一般的抽象来解决问题。
2) 当你的大脑处于最大工作状态时,选择正确的时间

我从一位数学老师那里得到了第一点建议。它起作用了!试着做不同的例子和场景的问题。这有助于识别在大多数问题中最难理解的边缘情况

我最喜欢解决这类问题的时间是黎明(凌晨4-6点)。前一天晚上好好睡一觉,醒来准备解决问题。沉默是你的朋友


我确实相信有些人比其他人更聪明,但这不是最重要的因素。这是你如何利用这种智慧来解决问题。

我十二岁时在一个小组里上了魔法课。魔术师的名字叫乔·卡洛塔。有一次他表演了一个魔术,我脱口而出:“你是怎么做到的?”那天他说了一句话,这句话从那以后一直萦绕在我心头

乔的回答是:“迈克尔,如果你真的想知道这个把戏是怎么做到的,你必须自己想办法。”

当然这不是我想听到的,但它确实让我的注意力集中在解决问题上。从我的角度来看,这就是解决问题。如果我第一次尝试解决这个问题需要17个步骤,而且非常笨拙,那么好消息是我解决了这个问题

然后,通过查看我开发的解决方案并进一步寻找改进该解决方案的方法,我将学习如何简化最终结果。后来在我的计算机编程生活中,我发现这个过程被称为“逐步求精”


它可以追溯到1971年,至今仍然有效。

我一生中的大部分时间都在想,天赋是你培养出来的还是你天生就有的。然后我想到答案是无关紧要的,至少如果你想自己完成事情的话。即使你有天赋,如果你表现得好像天赋只来自实践,这也会对你有帮助,因为你会更加努力地工作

至于算法,以及任何其他真正困难的技能,都需要练习才能取得好成绩。我不知道你是否也需要一些天赋。然而,我确实知道,人们在比赛中取得了巨大的进步,比如通过练习。我自己也从中学到了很多

如果你建立了一个系统的训练计划,你将远远领先于其他人,即使它并不完美。到目前为止,我已经在TopCoder上写了几百个程序,它深刻地影响了我的思维。我学到了很多东西,只有把它们做错,然后改正错误,我才能学到这些东西。我的一个朋友已经在TopCoder上写了几千个程序,他比我好得多,尽管他刚开始时的数据比我的差。这不是巧合

编辑:


我刚在math.stackexchange遇到过。我认为这是我读过的关于如何学习算法的最好解释之一,尽管他写的是国际象棋和数学。

有很多例子表明,人们有非凡的天赋,但成功率最低。你在体育、政治、商业以及你周围的人身上都能看到这样的例子。所以,我觉得在一定限度之后,天赋是一种毫无意义的美德。它主要是奖励你更大成功的硬词。如果你喜欢板球,这是一个很好的例子。
我觉得同样的原则也适用于算法和问题解决。一年前,我常常拿起算法问题来解决,然后发现自己完全迷失了方向。我花了一年时间阅读算法书籍,解决算法练习,还练习了一些编程问题,我相信现在我能解决大多数问题(在提高效率方面,我还有很长的路要走)。但关键是,聪明的工作足以培养解决问题的本领。

如果不努力,人才是廉价而无用的。天赋只能在一定程度上吸引你,但通过努力和实践,任何人都可以达到很高的境界

-Josh Waitzkin,8次全国象棋冠军,13次全国和2次世界冠军

他自己用画外音说的

如果人才不努力工作,努力工作胜过人才。 上面这句话定义了坚持的真正潜力。这个世界上的任何技能都可以通过实践来发展。这个过程类似于在墙上钉钉子。它不仅需要正确的幅度,而且需要正确的方向


要回答这个问题,首先我们需要找到成分